opbox

The verification.* family (4 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.

Cancelverification.cancel

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

Abort an IN-FLIGHT verification check (PENDING|IN_PROGRESS) -> WITHDRAWN. The operator twin of verification.update’s WITHDRAWN transition, but GUARDED: only a non-terminal check can be cancelled - a COMPLETE/FAILED check is terminal (its result/verdict is recorded), and re-cancelling an already-WITHDRAWN check is an idempotent no-op-shaped success. The row is RETAINED, never deleted (INV-8, the statutory KYC trail); WITHDRAWN is the status (status-not- timestamp, INV-3). Workspace-scoped via the explicit workspace_id = $ predicate + RLS; a check in another workspace reads back not-found (anti-enumeration). The optional reason is folded into result_details.cancelledReason (provider-shaped JSON, never raw PII).

Input { checkId, reason? } (fields ending in ? are optional)

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

Createverification.create

PropertyValue
Capabilityverification.write
Risk classSensitive - autonomy L2
Min. permissionMember
AvailabilityAdmin only (CLI/HTTP; never advertised over MCP)
IdempotentNo
EgressNone - in-box (pure Postgres, no outbound call)

Mints a verification_check PENDING artefact attached to the party (folds kyc.run - the provider is a rail BEHIND the one artefact). The (provider, externalId) unique index makes the provider callback idempotent.

Input { partyId, checkType, provider?, externalId?, matterId? } (fields ending in ? are optional)

Call POST /v/verification.create with a JSON body; returns JSON (or { error, code }). Not advertised over MCP (admin-only); reachable via the CLI and HTTP doors.

Createverification.ext.create

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

(write-once). Called immediately after verification.create in the same admin-gated onfido flow under the SAME session bearer (CC-OPBOX 89 Condition 7: no new seat/token). Fences the verificationCheckId in the caller’s workspace, then writes the index row ONCE; a retry (a row already exists for the check) is a no-op success (idempotent

). { verificationCheckId, subjectEmail, subjectName, stakeholderId?, applicantId, onfidoApplicantContext? }.

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

Updateverification.update

PropertyValue
Capabilityverification.write
Risk classSensitive - autonomy L2
Min. permissionExternal (portal / signer token)
AvailabilityAdmin only (CLI/HTTP; never advertised over MCP)
IdempotentYes
EgressNone - in-box (pure Postgres, no outbound call)

Transitions a check’s status (and, when COMPLETE, its result). The verification_result_requires_complete CHECK enforces that a result is only stored when status = COMPLETE. result_details is a provider-shaped JSON payload (never raw PII). Idempotent: a re-fired callback re-asserting the same terminal status is a no-op.

Input { checkId, status, result?, resultDetails? } (fields ending in ? are optional)

Call POST /v/verification.update with a JSON body; returns JSON (or { error, code }). Not advertised over MCP (admin-only); reachable via the CLI and HTTP doors.