What happened
A deposit or transaction was flagged during compliance screening and its funds have been frozen pending a manual review. The transaction is in a terminal state with failureCode: COMPLIANCE_HOLD. No funds were credited to the customer.
This code applies specifically to the deposit-frozen path. For AML screening rejections on outbound transactions, see AML_REJECTED.
{
"type": "COMPLIANCE_HOLD",
"title": "Transaction held for compliance review",
"status": 422,
"detail": "This transaction is held pending a regulatory compliance review.",
"resolution": "Contact support. This cannot be retried without a compliance review.",
"docs": "/errors#compliance-hold",
"instance": "/v2/transactions/txn_abc123",
"correlationId": "corr_xyz789",
"timestamp": "2026-01-15T09:30:00.000Z"
}
Common causes
- Screening match on a deposit — the inbound transfer matched an elevated-risk or sanctions signal during compliance review, and the deposit policy routes all non-clear decisions to a frozen hold
- Manual hold placed by Conduit’s compliance team — the transaction was held pending further investigation
Recovery
This is a terminal state. The funds are frozen, not returned. Do not resubmit
without contacting support first.
1. Confirm the terminal state
curl -X GET https://api.conduit.financial/v2/transactions/txn_abc123 \
-H "x-api-key: YOUR_API_KEY"
The response will show status: "failed" and failureCode: "COMPLIANCE_HOLD".
2. Contact your account manager
A compliance hold requires manual review by the compliance team. Provide:
- The transaction ID (
txn_abc123)
- The correlation ID from the error response
- The customer ID and any context about the transaction source
Do not submit new transactions for the same source until the hold is resolved.
Prevention
- Handle
transaction.failed with this code — branch on failureCode === 'COMPLIANCE_HOLD' to surface a neutral “this transfer requires review” message to the customer without disclosing compliance details
- Do not retry — submitting a replacement transaction for the same source is unlikely to succeed and may flag additional transactions
The transaction.failed event fires when the hold is recorded:
{
"type": "transaction.failed",
"data": {
"transactionId": "txn_abc123",
"failureCode": "COMPLIANCE_HOLD"
}
}