RFQ API
Endpoints

Get Transfer Status

Track the execution status of a transfer by quoteId.

GET /v1/status

Returns the current status of a transfer, identified by the quoteId returned from POST /v1/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
quoteIdstringYesThe identifier returned with a quote from POST /v1/quote. This is the anchor for every status lookup — it is issued by the API and identifies the specific quote and its backend.
messageIdstringNoSource-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 it together with quoteId once the source transaction is known.

quoteId is always required. A messageId by itself cannot be resolved: it is not issued by the API, so on its own it cannot be tied to a specific quote — provide it only as a supplement to quoteId.

For most transfers, quoteId alone resolves status from quote time onward. Some backends identify the transfer only once the source transaction lands and cannot bind it to the quote on their own; for these, supply messageId after submitting so the API can track the correct on-chain execution. Until a source transaction is known, the status is reported as AWAITING_DEPOSIT.

curl 'https://rfq.axelar.network/v1/status?quoteId=quote_123'

curl 'https://rfq.axelar.network/v1/status?quoteId=quote_123&messageId=0xabc...-0'

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 below)
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 | nullPopulated on REFUNDED: chain, token, amount, txHash
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
REFUNDEDThe transfer did not complete and funds were returned to the user on the source chain (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.

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 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