Skip to main content
Cross-chain transfers take time to complete. This page explains how to poll the status endpoint, interpret status values, and handle each outcome correctly.

Status Endpoint

Parameters

Only txHash is required. Providing fromChain speeds up the response significantly.

Example Request

Or with optional parameters for faster response:

Status Response


Status Values

Primary Status

Substatus (when status = DONE)


Decision Matrix


Polling Implementation

These examples bound automatic polling but do not classify unknown hashes as failed or replaced. Both HTTP 404 and a NOT_FOUND body remain non-terminal here. On timeout, preserve the unresolved record and use the source-chain reconciliation checks below.

JavaScript Implementation

Python Implementation


Handling Each Outcome

COMPLETED - Success

PARTIAL - Different Token Received

REFUNDED - Tokens Returned

FAILED - Permanent Failure


Estimated Transfer Times

The quote response includes estimate.executionDuration (in seconds) which gives you the expected transfer time for that specific route. Always use this value rather than general estimates.
Transfer times vary significantly based on the bridge used and network conditions. The executionDuration field in the quote response provides the most accurate estimate for each specific route.

Timeout Handling

If polling times out:
  1. Don’t assume failure - The transfer may still complete
  2. Save the transaction details - txHash, bridge, fromChain, toChain
  3. Provide manual check - User can check status later
  4. Link to explorer - Provide transaction explorer URLs

Never-mined transactions

If /status keeps answering 404 with code: 1003, first query the original hash’s receipt on the correct source chain. A receipt means the original transaction was mined: handle source execution failure or keep tracking the cross-chain outcome if it succeeded. Without a receipt, check whether the transaction is pending. For ordinary EVM account transactions, an advanced nonce is only a reason to investigate, not proof of replacement. Confirm a different mined transaction with the same source chain, sender and nonce, then inspect its intent before associating it with the original order. A cancellation does not continue the transfer. Use GET /v1/analytics/transfers?wallet=<address>&fromTimestamp=<unix>&toTimestamp=<unix>&status=ALL for candidates, not proof. Missing evidence remains unknown even after polling stops. Full recipe: Unknown and never-mined transaction hashes.