Simulate the compliance verdict on a sandbox application
Drives an in-flight sandbox application to a deterministic compliance verdict. outcome: "approved" flips the application to APPROVED, activates the resource it produces (customer, organization, virtual account, wallet), and fires the matching *.approved event. outcome: "rejected" flips the application to REJECTED (the application response carries failureCode: "REJECTED_BY_OPS" and failureMessage) and fires the matching *.rejected event. On rejected, the optional body shapes the rejection: free-text { reason } surfaces verbatim as the application’s failureMessage, or structured { category, field? } selects a canonical user-facing summary that appears on failureMessage. Categories: DOCUMENT_MISMATCH (optional field: TAX_ID, DATE_OF_INCORPORATION, BUSINESS_NAME, BUSINESS_ENTITY_ID); DATA_SOURCING_MISMATCH (optional field: BUSINESS_ENTITY_ID, UBO_FIRST_NAME, UBO_LAST_NAME, UBO_PHONE, UBO_EMAIL, OWNERSHIP_LIST); COMPLIANCE; GENERIC (accepts an optional free-text reason). category is only applicable to KYB-pipeline applications; other application types yield 422 REJECTION_CATEGORY_NOT_APPLICABLE. The response is the application resource at its new state. Caller’s API key must own the application.
Authorizations
Path Parameters
Body
Decision to force onto the application. approved activates the resource it produces; rejected records a rejection.
approved, rejected Free-text rejection reason. Valid on the free-text branch ({ outcome: "rejected", reason }) and on category: GENERIC. Persisted verbatim to rejectionReason.
500Structured rejection category. Selects a specific user-facing summary. Mutually exclusive with a bare reason on non-GENERIC branches.
document_mismatch, data_sourcing_mismatch, compliance, generic Optional field hint. Requires category; sending field without category yields 400 VALIDATION_ERROR. Accepted by DOCUMENT_MISMATCH (TAX_ID / DATE_OF_INCORPORATION / BUSINESS_NAME / BUSINESS_ENTITY_ID) and DATA_SOURCING_MISMATCH (BUSINESS_ENTITY_ID / UBO_FIRST_NAME / UBO_LAST_NAME / UBO_PHONE / UBO_EMAIL / OWNERSHIP_LIST). Ignored on other categories and on the free-text branch.
Response
The application at its new terminal state
- Option 1
- Option 2
- Option 3
- Option 4
Unique application identifier
^app_[0-9A-Za-z]{22}$Current lifecycle status of the application
pending, processing, approved, rejected, cancelled "pending"
Timestamp when the application was created
"2026-01-15T09:30:00.000Z"
Timestamp when the application was last modified
"2026-01-15T09:30:00.000Z"
customer_onboarding Client-provided identifier for cross-referencing. Omitted when the client did not supply one. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.
^[A-Za-z0-9_\-:.]{1,255}$"ext-12345"
Timestamp when the application was submitted for review. Omitted while still in progress.
"2026-01-15T09:30:00.000Z"
Machine-readable failure code on rejected applications. Omitted on non-rejected applications.
rejected_by_ops, compliance_denied Customer-facing failure message accompanying failureCode. Omitted on non-rejected applications.
Customer this onboarding application produced. Omitted while the application is still being reviewed; present after approval persists the customer row.
^cus_[0-9A-Za-z]{22}$People declared on the submission (beneficial owners and controlling persons), in submit order. Omitted before the application carries a submission.