RFQ API
Endpoints

Get Transfer Status

Track the execution status of a transfer by quoteId.

GET /v1/rfq/status

Returns 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 ParameterTypeRequiredDescription
quoteIdstringAlwaysThe 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.
messageIdstringgateway, gateway-express, itsSource-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.
sourceChainstringgateway, gateway-express, itsCAIP-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": {}
}
FieldTypeDescription
quoteIdstringThe quote this transfer was executed from, when known
statestringNormalized transfer state. See States.
backendobjectThe execution route serving the transfer (Backend)
sourceobject | nullSource-chain execution: chain, txHash, messageId, timestamp. Null until the source transaction is observed.
destinationobject | nullDestination-chain delivery: chain, txHash, timestamp. Null until delivered.
outputobject | nullWhat the recipient actually received: chain, token, amount. Populated on DONE.
refundobject | nullThe refund returned to the user on the source chain: chain, token, amount, txHash. Populated only once the source-chain refund transaction is observed — it is null through REFUND_PENDING and REFUND_INITIATED, and populated on REFUNDED.
detailsobjectBackend-specific status context. Shape depends on backend.type; treat as informational.

States

StateMeaning
AWAITING_DEPOSITThe quote is known but no source-chain execution has been observed yet
PENDINGThe transfer has been submitted and is in flight
DONEThe transfer completed and the recipient received the output
REFUND_PENDINGThe transfer will not be fulfilled and a refund has been decided, but no refund transaction has been submitted yet (refund is null)
REFUND_INITIATEDThe refund has been submitted, but the source-chain refund transaction has not been observed yet (refund is still null)
REFUNDEDThe refund landed on the source chain and the user has their funds back (refund populated)
FAILEDThe transfer reached a terminal failure
NOT_FOUNDNo 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.

A refund advances REFUND_PENDING (decided), REFUND_INITIATED (submitted), REFUNDED (landed on the source chain). Only REFUNDED is terminal: it is the single state that confirms the user has their funds back, and the only one where refund is populated. Do not treat REFUND_INITIATED as settlement.

Not every backend reports the full sequence yet. A route that cannot observe the source-chain refund transaction stops at REFUND_INITIATED and never reaches REFUNDED, so a client must not block on REFUNDED to consider a transfer resolved.

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": {}
}

REFUND_INITIATED

The transfer will not be fulfilled and the refund has been submitted. destination and output stay null. refund is filled in when the source-chain refund transaction is observed, at which point the state becomes REFUNDED.

{
  "quoteId": "quote_123",
  "state": "REFUND_INITIATED",
  "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 StatusCodeMeaning
400INVALID_REQUESTquoteId was not provided, or a parameter is malformed
429RATE_LIMITEDToo many requests
500INTERNAL_ERRORUnexpected server error; safe to retry

On this page