What happened
Your payout required a Travel Rule message to the receiving institution, but the institution rejected it before the on-chain broadcast. No funds were moved. The payout is in a terminal failed state with failureCode: TRAVEL_RULE_REJECTED.
{
"type": "TRAVEL_RULE_REJECTED",
"title": "Travel Rule counterparty rejected",
"status": 422,
"detail": "The counterparty rejected the Travel Rule transfer before broadcast.",
"resolution": "Confirm beneficiary details with the recipient institution and submit a new payout once the underlying issue is resolved.",
"docs": "/errors#travel-rule-rejected",
"instance": "/v2/payouts/txn_abc123/travel-rule/counterparty",
"correlationId": "corr_xyz789",
"timestamp": "2026-01-15T09:30:00.000Z"
}
Common causes
- Unrecognized beneficiary — the receiving institution could not match the destination address or account to a known entity
- Policy mismatch — the originating or beneficiary information did not meet the receiving institution’s compliance requirements
- Unsupported corridor — the receiving institution does not accept Travel Rule messages for the requested corridor
Recovery
This is a terminal state. The payout cannot be recovered; a new payout must be
submitted.
1. Inspect the failure detail
Read the payout to get the failureMessage field, which carries the institution’s rejection reason when one was provided:
curl -X GET https://api.conduit.financial/v2/payouts/txn_abc123 \
-H "x-api-key: YOUR_API_KEY"
The failureMessage is the institution-supplied reason (if present). When absent, contact your account manager for the raw rejection detail.
2. Investigate the destination
Verify the destination address is associated with a regulated custodian that participates in Travel Rule messaging. Unhosted wallets or unsupported custodians cannot be matched during the Travel Rule exchange.
3. Submit a new payout to a different destination
Once the issue is resolved, submit a new payout with a corrected or alternative destination:
curl -X POST https://api.conduit.financial/v2/payouts \
-H "x-api-key: YOUR_API_KEY" \
-H "Idempotency-Key: idem_NEW_KEY" \
-H "Content-Type: application/json" \
-d '{
"customerId": "cus_abc123",
"assetAmount": {"code": "USDC", "amount": "100.000000", "chain": "ETHEREUM"},
"destination": {
"recipient": {
"rail": "CRYPTO",
"chain": "ETHEREUM",
"address": "0xnew..."
}
}
}'
Prevention
- Verify destination eligibility — confirm the destination address belongs to a custodian that supports Travel Rule before submitting high-value transfers
- Handle
transaction.failed with this code — use failureCode === 'TRAVEL_RULE_REJECTED' to branch on this specific terminal state and surface the failureMessage to the relevant party
The transaction.failed event fires when the payout terminates:
{
"type": "transaction.failed",
"data": {
"transactionId": "txn_abc123",
"failureCode": "TRAVEL_RULE_REJECTED",
"failureMessage": "Beneficiary institution rejected the transfer: unrecognized address"
}
}
failureMessage carries the institution-supplied reason when one was provided. When absent, the rejection had no machine-readable message.