What happened
A sandbox simulate endpoint refused the request because the requested outcome is not viable in the transaction’s current phase. This returns HTTP 422 with error codeSANDBOX_TRANSACTION_NOT_FORCE_TERMINAL_READY. Three endpoints return this code today: POST /v2/sandbox/transactions/{id}/simulate/terminal, POST /v2/sandbox/payouts/{id}/simulate/settled, and POST /v2/sandbox/payouts/{id}/simulate/confirm.
The most common cases:
- A fiat payout with no selected settlement route receiving
outcome: "completed"onsimulate/terminal. Thecompletedpath requires the payout to be in the settlement-ready phase; before that, onlyoutcome: "failed"is accepted. - A payout that carries supporting
documents(anypurposeother thanINTERCOMPANY) parks at the document-review gate before broadcast / settlement. Callingsimulate/settled(fiat) orsimulate/confirm(crypto) while the gate is still open used to silently 200 with no observable effect; Conduit only acts on the settlement / chain-confirm call after the gate clears. The 422 now surfaces the gap explicitly.
Common causes
- Payout parked at the document-review gate — the payout carries
documentsand is waiting forsimulate-review-approve/simulate-review-rejectbefore it can advance to broadcast / settlement.simulate/settledandsimulate/confirmreturn 422 in this state. - Requesting
completedtoo early on a fiat payout — onsimulate/terminal, a fiat payout must have a settlement route beforeoutcome: "completed"is accepted; route selection runs automatically after the compliance phase clears - Unsupported phase — the transaction is in a phase that the force-terminal endpoint does not support for the requested outcome
RESOURCE_TERMINAL (409), not this 422. See the RESOURCE_TERMINAL playbook.
Recovery
1. Re-fetch the transaction to check the current phasestatus and waitingOn fields to understand what phase the transaction is in.
2. Clear the document-review gate first if your payout carries documents
If the 422 came from simulate/settled or simulate/confirm, the payout is most likely parked at document review. Approve (or reject) the review before retrying the terminal lever:
simulate-review-reject instead terminates the payout as failed with failureCode: COMPLIANCE_REJECTED and returns the reserved funds. See withdrawals for the full flow.
3. Use outcome: "failed" to terminate immediately
If you need to terminate the transaction from its current phase without waiting, use outcome: "failed" on simulate/terminal:
outcome: "completed"
For fiat payouts on simulate/terminal, wait a few seconds for route selection to run, then retry with outcome: "completed":
Prevention
- Approve document review before settlement — a payout that carries
documentsparks for review before it can settle / confirm. Callsimulate-review-approvefirst. - Understand phase gating — fiat payouts require route selection before the
completedpath opens onsimulate/terminal; deposits require the compliance phase to clear - Default to
outcome: "failed"for speed —failedterminates a transaction from any non-terminal phase; usecompletedonly when the happy path is what you need to test - Consult the simulate reference — the sandbox cheat sheet documents which outcomes are valid per transaction type and phase
Related endpoints
- GET /v2/transactions/ — read transaction state and current phase
- POST /v2/sandbox/transactions//simulate/terminal — force a transaction to a terminal state
- POST /v2/sandbox/payouts//simulate-review-approve — clear the document-review gate