Tracking Transaction Status
Poll /status to track a cross-chain transaction.
Transaction Lifecycle

Statuses can be skipped. A single poll may jump from origin_tx_pending directly to bridge_filled if the bridge completes quickly. Do not rely on observing every intermediate status.
Top-level Status
The top-level status shows where the funds are. Statuses appear below in approximate order.
How Confirmation Works
The status service does not wait for multiple block confirmations. A transaction is marked origin_tx_confirmed as soon as a receipt exists and the containing block is available from the RPC node:
- Fast L2s (Base, Arbitrum, Optimism): under 2 seconds
- Ethereum mainnet: ~12 seconds (one slot)
- Bridge providers handle their own finality requirements independently
Using quoteId
The quoteId parameter (returned in each quote from /quotes) is optional but strongly recommended. Passing it enables faster status resolution and is required when the origin transaction contains multiple cross-chain operations (e.g., submitted via an ERC-4337 bundler).
Without quoteId in those cases, the /status endpoint returns a 400 error: "Multiple cross-chain operations found in transaction; provide quoteId to disambiguate"
Settled Amounts
After bridge_filled, the bridge step in the steps array includes a settledBuyAmount field which represents the actual amount the recipient received on the destination chain. This may differ from quotedBuyAmount due to slippage.
Settled amounts are supported on all chain types (EVM, Solana, Tron, HyperCore).
For refunds, recovery.settledAmount similarly shows the actual refunded amount.
Failure Context
When status is bridge_failed, the failure object explains what happened and how recovery works.
Continue polling while an automatic refund or a destination retry submitted by 0x is in progress. Retry transaction hashes can appear in transactions before the funds arrive. Only bridge_filled confirms delivery.
See Handling Failures and Recovery for details.