opbox

The domainProfile.* family (3 verbs). Every verb enters through the one front door: it is capability-checked, permission-checked, scope-checked and audited before it runs (see Security & permissions). Each entry below lists its capability, risk class (which fixes the minimum autonomy level), the minimum caller permission, its availability tier, whether it is idempotent, and any outbound egress.

CreatedomainProfile.create

PropertyValue
Capabilityother.write
Risk classWrite - autonomy L1
Min. permissionMember
AvailabilityOn demand (MCP tier 2)
IdempotentNo
EgressNone - in-box (pure Postgres, no outbound call)

workspace-owned overlay (workspace_id from ctx). source defaults MANUAL. Unique (workspace_id, addon_key, domain) -> Conflict. updated_by_id = OPTIONAL updatedById (guarded) else the acting user (NULL for a seat).

Call POST /v/domainProfile.create with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool domainProfile.create.

DeletedomainProfile.delete

PropertyValue
Capabilityother.write
Risk classWrite - autonomy L1
Min. permissionMember
AvailabilityOn demand (MCP tier 2)
IdempotentYes
EgressNone - in-box (pure Postgres, no outbound call)

Hard delete by id + workspace fence (idempotent).

Call POST /v/domainProfile.delete with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool domainProfile.delete.

UpdatedomainProfile.update

PropertyValue
Capabilityother.write
Risk classWrite - autonomy L1
Min. permissionMember
AvailabilityOn demand (MCP tier 2)
IdempotentNo
EgressNone - in-box (pure Postgres, no outbound call)

Partial PATCH by id + workspace fence. updated_by_id is set only when updatedById is supplied (guarded). Sets updated_at = now().

Call POST /v/domainProfile.update with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool domainProfile.update.