Get Transfer Status
Track the execution status of a transfer by quoteId.
GET /v1/rfq/statusReturns the current status of a transfer, identified by the quoteId returned from POST /v1/rfq/quote.
The response uses a normalized state that is the same across all backends, plus a backend-specific details object for additional context.
Request
| Query Parameter | Type | Required | Description |
|---|---|---|---|
quoteId | string | Always | The identifier returned with a quote from POST /v1/rfq/quote. This is the anchor for every status lookup — it is issued by the API and identifies the specific quote and its backend. |
messageId | string | gateway, gateway-express, its | Source-transaction identifier for the transfer, treated as a single opaque value. On EVM-based routes this is the source transaction hash combined with the event index (e.g. 0xabc...-0); other chains follow their own native identifier format. Supply together with sourceChain once the source transaction is known. |
sourceChain | string | gateway, gateway-express, its | CAIP-2 identifier of the chain the source transaction was submitted on. Supplied together with messageId — the two together form the identifier these backends use to locate the transfer. |
For intent backends, quoteId alone resolves status from quote time onward. The gateway, gateway-express, and its backends identify the transfer only once the source transaction lands and cannot bind it to the quote on their own; for these, supply both messageId and sourceChain after submitting so the API can locate the correct on-chain execution. Until a source transaction is known, the status is reported as AWAITING_DEPOSIT.
# intent backend: quoteId alone
curl 'https://api.axelar.network/v1/rfq/status?quoteId=quote_123'
# gateway / gateway-express / its backend: quoteId + messageId + sourceChain
curl 'https://api.axelar.network/v1/rfq/status?quoteId=quote_123&messageId=0xabc...-0&sourceChain=eip155:42161'Response
{
"quoteId": "quote_123",
"state": "DONE",
"backend": {
"type": "intent",
"name": "Axelar Intents"
},
"source": {
"chain": "eip155:42161",
"txHash": "0xabc...",
"messageId": "0xabc...-0",
"timestamp": "2026-06-16T12:00:03Z"
},
"destination": {
"chain": "eip155:8453",
"txHash": "0xdef...",
"timestamp": "2026-06-16T12:00:48Z"
},
"output": {
"chain": "eip155:8453",
"token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "995000"
},
"refund": null,
"details": {}
}| Field | Type | Description |
|---|---|---|
quoteId | string | The quote this transfer was executed from, when known |
state | string | Normalized transfer state. See States. |
backend | object | The execution route serving the transfer (Backend) |
source | object | null | Source-chain execution: chain, txHash, messageId, timestamp. Null until the source transaction is observed. |
destination | object | null | Destination-chain delivery: chain, txHash, timestamp. Null until delivered. |
output | object | null | What the recipient actually received: chain, token, amount. Populated on DONE. |
refund | object | null | Populated on REFUNDED: chain, token, amount, txHash |
details | object | Backend-specific status context. Shape depends on backend.type; treat as informational. |
States
| State | Meaning |
|---|---|
AWAITING_DEPOSIT | The quote is known but no source-chain execution has been observed yet |
PENDING | The transfer has been submitted and is in flight |
DONE | The transfer completed and the recipient received the output |
REFUNDED | The transfer did not complete and funds were returned to the user on the source chain (refund populated) |
FAILED | The transfer reached a terminal failure |
NOT_FOUND | No transfer matches the supplied identifier |
NOT_FOUND is returned with HTTP 200: a well-formed lookup for an identifier the API does not (yet) recognize is not an error.
The response above shows a DONE transfer. The examples below show earlier states, where source, destination, and output are progressively filled in as the transfer advances.
AWAITING_DEPOSIT
The quote is known but no source-chain transaction has been observed yet.
{
"quoteId": "quote_123",
"state": "AWAITING_DEPOSIT",
"backend": {
"type": "intent",
"name": "Axelar Intents"
},
"source": null,
"destination": null,
"output": null,
"refund": null,
"details": {}
}PENDING
The source transaction has landed and the transfer is in flight; the destination has not been delivered yet.
{
"quoteId": "quote_123",
"state": "PENDING",
"backend": {
"type": "intent",
"name": "Axelar Intents"
},
"source": {
"chain": "eip155:42161",
"txHash": "0xabc...",
"messageId": "0xabc...-0",
"timestamp": "2026-06-16T12:00:03Z"
},
"destination": null,
"output": null,
"refund": null,
"details": {}
}Errors
| HTTP Status | Code | Meaning |
|---|---|---|
| 400 | INVALID_REQUEST | quoteId was not provided, or a parameter is malformed |
| 429 | RATE_LIMITED | Too many requests |
| 500 | INTERNAL_ERROR | Unexpected server error; safe to retry |