Skip to main content

What happened

The crypto outbound provider declined the broadcast request before the transaction was submitted to the chain. The transaction is in a terminal failed state with failureCode: provider_rejected. No on-chain transfer occurred; the reserved balance has been released back to the customer’s available balance.

Fiat payouts

A fiat payout also ends with failureCode: provider_rejected when the recipient’s bank refused it before it settled. No funds moved. When the refusal carried a bank code Conduit maps, or the payee check refused the recipient before sending, the transaction and the transaction.failed event carry returnReason. The values are in the returnReason table. Otherwise, returnReason is absent.

Common causes

  • Provider-side validation failure — the broadcast request failed the outbound provider’s pre-submission checks (for example, invalid gas parameters, nonce conflict, or payload format error)
  • Transient provider error — the provider’s infrastructure returned an error that prevented the broadcast from being accepted

Recovery

This is a terminal state. No on-chain transfer occurred. The reserved balance has been released; you may submit a new payout.
1. Confirm the terminal state
The response will show status: "failed" and failureCode: "provider_rejected". Confirm that no txHash is present — a missing txHash confirms no on-chain transfer occurred. 2. Retry the payout The reserved balance has been released. You may submit a new payout immediately:
3. Contact support if the issue persists If retries consistently fail with PROVIDER_REJECTED, contact support with the transaction IDs and the destination address. There may be a provider-level configuration issue affecting the corridor.

Prevention

  • Handle transaction.failed with this code — branch on failureCode === 'provider_rejected' to surface a “transfer could not be sent; your balance has been restored” message with a retry option
  • Use idempotency keys — ensure each retry uses a fresh idempotency key so retries are not deduplicated against the failed attempt
The transaction.failed event fires when the provider rejects the broadcast: