Overview
The implemented event catalog currently contains 29 emitted events across KYC, account, tenant-user invite, and sanctions domains. V2 planning recommends future enterprise events in source-of-funds, document-review, signature-document, billing, team-user, and integration-operations domains; downstream payload docs will be added as emitters are wired. Every delivery includes a top-level envelope that wraps the event-specificdata object:
Your endpoint must return a
2xx HTTP status within 10 seconds. Any non-2xx response or timeout is treated as a failed delivery and retried with exponential backoff. See Retries for the full schedule.Sanctions events
Sanctions events let your backend track a screening request from submission through review. The result events contain normalized status and list identifiers. They do not contain raw provider request or response bodies.sanctions.screening.requested
Trigger: Zquence accepts a new logical screening operation and is about to call the selected provider. A retry that resolves to an existing idempotent record does not emit another requested event.
sanctions.screening.completed
Trigger: A provider attempt finishes and Zquence stores its log and case attempt.
Outcome-specific events
Zquence emitssanctions.screening.completed for every stored provider result. It then emits one additional event for these statuses:
Each outcome-specific event uses the same
data schema as sanctions.screening.completed.
No outcome-specific event is emitted for manual_review, error, or skipped. Handle those statuses from sanctions.screening.completed.
sanctions.match.resolved
Trigger: An authorized reviewer records a decision on a sanctions case.
Delivery order is not a case-state guarantee. Deduplicate on the top-level event
id, then retrieve the case by caseId when your worker needs current state.KYC events
KYC events track the internal KYC record lifecycle and provider (Onfido) verification outcomes.kyc.created
Trigger: A new KYC record is created for a user — happens the first time a user starts the KYC flow.
Use cases:
- Bootstrap a user record in your system.
- Start a compliance workflow downstream.
- Log the KYC initiation timestamp.
kyc.updated
Trigger: The user saves progress on the KYC form — any field update that does not include a final submission signature.
Use cases:
- Track partial form completion for support tooling.
- Measure drop-off at specific form steps via
currentStep. - Mirror KYC field changes into your own data store.
kyc.submitted
Trigger: The user completes the KYC form and signs it — submittedOn is set for the first time. This marks the end of user-side data entry.
Use cases:
- Notify your compliance team that a KYC is ready for review.
- Transition the user to a “pending verification” state in your UI.
- Trigger downstream document collection workflows.
kyc.provider.completed
Trigger: The identity provider (Onfido) returns an approved outcome for the user’s verification run.
Use cases:
- Unlock features or accounts that require verified identity.
- Update user status to
verifiedin your system. - Trigger onboarding completion notifications.
kyc.provider.failed
Trigger: The identity provider (Onfido) returns a declined or error outcome for the user’s verification run.
Use cases:
- Flag the user account for manual review.
- Notify the user that additional steps are required.
- Track failure rates per reason in your analytics.
KYC status values
Thestatus field in KYC payloads reflects the internal KYC lifecycle state:
Provider status values
Onfido returns these status strings, mapped tokyc.provider.completed (approved) or kyc.provider.failed (rejected):
Account events
Account events cover every stage of an escrow account — from creation and invitation through document submission, admin review, source closures, and case management.The party key in account payloads depends on
accountType. For real_estate accounts the keys are buyer and seller. For all other types (e.g. permanent, construction) the key is customer.account.created
Trigger: A new escrow account is created by an admin or via the API. The buyer (and optionally seller for real_estate) are linked at creation time.
Use cases:
- Register the account in your system before any parties have accepted.
- Send a welcome notification to your CRM.
- Start a compliance timer.
PartyObject schema
account.invited
Trigger: An invitation email is dispatched to a participant. Fires once per party — separately for buyer/customer and seller.
Use cases:
- Log invitation timestamps for compliance audit trails.
- Track invitation delivery metrics per role.
- Trigger a parallel onboarding workflow in your system.
account.opened
Trigger: A participant clicks their invitation link and the invitation page loads. The party has not yet accepted — this is a view event, not an acceptance event.
Use cases:
- Detect when a party has seen the invitation (engagement tracking).
- Start a follow-up timer if acceptance does not follow within N hours.
- Audit trail for compliance.
account.accepted
Trigger: A participant accepts the invitation. For real_estate accounts, fires once per party (buyer and seller independently). Account status advances to "accepted" only when all required parties have accepted.
Use cases:
- Gate access to document upload flows until all parties accept.
- Notify stakeholders when a party joins.
- Progress a workflow state machine.
account.created with updated accepted flag and status.
account.status.changed
Trigger: The account status transitions to any new value. Fires on admin close, admin reopen, and when both parties accept.
Use cases:
- Drive a workflow state machine (e.g. move to
"completed"after close). - Send status update emails to participants.
- Update your internal CRM or compliance dashboard.
account.created with the new status.
Account status values
account.approved
Trigger: An admin closes the account after every source is verified. closeAccount() is the
only path that transitions an account to "completed", so this fires exactly once per account.
account.status.changed also fires on that same transition, carrying the same snapshot. Subscribe
to account.approved when you want an unambiguous approval signal without inspecting status;
subscribe to account.status.changed when you want every transition. Subscribing to both means
two deliveries for one close — dedupe on the account id, not the event id, if that matters to you.
Use cases:
- Release funds or trigger the downstream payout workflow.
- Mark the case closed in your compliance system.
- Send the “your account is approved” message to the parties.
account.created, with status set to
"completed".
account.archived
Trigger: An admin archives the account. Archived accounts are read-only — no modifications are permitted until unarchived.
Use cases:
- Move the account to an archived view in your dashboard.
- Suppress notifications for archived accounts.
- Audit who archived what and when.
account.unarchived
Trigger: An admin restores a previously archived account. The account becomes editable again.
Use cases:
- Restore the account to the active view in your dashboard.
- Re-enable downstream notifications and workflows.
account.deleted
Trigger: An admin permanently deletes an account. This also cascades to delete all associated document review files. This action is irreversible.
Use cases:
- Hard-delete the account record from your system.
- Clean up downstream references (CRM entries, linked workflows).
- Emit a GDPR deletion audit record.
account.document.submitted
Trigger: A user submits their documents for admin review (submitForReview: true). Fires on both initial submission and re-submission after corrections.
Use cases:
- Notify the compliance team that documents are ready to review.
- Start a review SLA timer.
- Transition the account to
"under_review"in your system.
account.document.reviewed
Trigger: An admin approves or rejects a specific document. Fires once per document decision.
Use cases:
- Notify the user their document was approved or needs correction.
- Update a document status badge in your portal.
- Track review turnaround times per document type.
accountId)
account.document.requested
Trigger: An admin requests an additional document from the user.
Use cases:
- Notify the user a specific document has been requested.
- Add a pending task to the user’s document checklist in your UI.
- Track admin-initiated document requests separately from standard requirements.
account.case.locked
Trigger: An admin locks the user’s case. While locked, the user cannot upload documents or take any document action.
Use cases:
- Prevent further user activity while a compliance review is in progress.
- Display a “case locked” banner in your portal.
- Log the lock event with actor identity for audit trails.
account.case.unlocked
Trigger: An admin unlocks a previously locked case. The user can resume document uploads.
Use cases:
- Remove the “case locked” banner in your portal.
- Re-enable document upload flows for the user.
- Log who unlocked the case and when.
Tenant user events
tenant.users.invite
Trigger: A tenant administrator invites someone to the tenant team. This is about staff
access to Zquence, not about customers — a customer invited to an escrow account raises
account.invited instead.
Use cases:
- Mirror team membership into your own directory or IdP.
- Track outstanding invitations in an internal admin view.
Contract events
These events describe the contract requirement (the obligation), not the document. A contract can be declined — execution over — while its requirement is superseded, and it can still be required policy while its document is only half signed. Track the obligation here; track signing progress on the document itself. Every contract event shares one payload shape, with a few event-specific additions:contract.issued
Trigger: An obligation is issued against an account type — at onboarding, after KYC, or as
part of a re-papering batch.
Additional fields
contract.superseded
Trigger: A newer obligation replaces this one — typically a re-papering run issuing an updated
contract version. The replacement raises its own contract.issued.
Additional fields