cURL
curl --request GET \
--url https://api.relay.link/intents/status/v3const options = {method: 'GET'};
fetch('https://api.relay.link/intents/status/v3', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.relay.link/intents/status/v3"
response = requests.get(url)
print(response.text){
"status": "success",
"inTxHashes": [
"0xe53021eaa63d100b08338197d26953e2219bcbad828267dd936c549ff643aad7"
],
"txHashes": [
"0x9da7bc54dfe6229d6980fd62250d472f23dfe0f41a1cdc870c81a08b3445f254"
],
"updatedAt": 1713290386145,
"originChainId": 7777777,
"destinationChainId": 8453
}API Reference
Get Status
This API returns current status of intent.
GET
/
intents
/
status
/
v3
cURL
curl --request GET \
--url https://api.relay.link/intents/status/v3const options = {method: 'GET'};
fetch('https://api.relay.link/intents/status/v3', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.relay.link/intents/status/v3"
response = requests.get(url)
print(response.text){
"status": "success",
"inTxHashes": [
"0xe53021eaa63d100b08338197d26953e2219bcbad828267dd936c549ff643aad7"
],
"txHashes": [
"0x9da7bc54dfe6229d6980fd62250d472f23dfe0f41a1cdc870c81a08b3445f254"
],
"updatedAt": 1713290386145,
"originChainId": 7777777,
"destinationChainId": 8453
}Polling is not the only way to track status. Configure a webhook in the Relay Dashboard to have status updates pushed to your backend, or subscribe to websockets for a real-time stream.
success and refund are final.
| Status | Description | Final |
|---|---|---|
waiting | Waiting for the origin deposit | ❌ |
depositing | Origin deposit confirmed via the /execute API, waiting for the fill to start | ❌ |
pending | Request accepted and fill in progress | ❌ |
submitted | Fill transaction submitted on the destination chain | ❌ |
success | Fill succeeded on the destination chain | ✅ |
failure | The fill failed and no refund has completed | ❌ |
refund | The fill failed and the deposit was refunded on the origin chain | ✅ |
Polling until settlement
Poll until the status issuccess or refund. Once a request reaches either, its status only changes again in one rare case, a chain reorganization of the settling transaction; Relay otherwise only appends transaction details after that point.
failure is usually not final. A failed fill can be retried, returning the request to pending, or refunded, moving it to refund, so keep polling through a failure rather than treating it as the end. The exception is a failure with refundFailReason set: no automatic refund will follow, so stop polling and handle it per Refunds.
Request acceptance is not settlement. A successful quote or execute response means the request was accepted; treat the swap as settled only when the status is success and txHashes contains the destination fill transaction.
For deposit-address requests,
waiting on the quote-time requestId does not mean the deposit is missing. If Relay regenerated the quote, the fill runs under a new requestId, and the quote-time one can stay waiting after the fill succeeds. Check the order with Get Requests using depositAddress. See Tracking Transactions.Headers
Optional API key for authentication and higher rate limits.
Query Parameters
A unique id representing the execution in the Relay system. You can obtain this id from the requests api or the check object within the step items.
Response
200 - application/json
Default Response
Available options:
refund, waiting, depositing, failure, pending, submitted, success Incoming transaction hashes
Outgoing transaction hashes
The last timestamp the data was updated
The timestamp when the quote request was created
Available options:
UNKNOWN, SLIPPAGE, AMOUNT_TOO_LOW_TO_REFUND, DEPOSIT_ADDRESS_MISMATCH, DEPOSIT_CHAIN_MISMATCH, INCORRECT_DEPOSIT_CURRENCY, DOUBLE_SPEND, SOLVER_CAPACITY_EXCEEDED, SOLVER_BALANCE_TOO_LOW, DEPOSITED_AMOUNT_TOO_LOW_TO_FILL, NEGATIVE_NEW_AMOUNT_AFTER_FEES, NO_QUOTES, MISSING_REVERT_DATA, REVERSE_SWAP_FAILED, GENERATE_SWAP_FAILED, TOO_LITTLE_RECEIVED, EXECUTION_REVERTED, NEW_CALLDATA_INCLUDES_HIGHER_RENT_FEE, TRANSACTION_REVERTED, TRANSACTION_TOO_LARGE, ORIGIN_CURRENCY_MISMATCH, NO_INTERNAL_SWAP_ROUTES_FOUND, SWAP_USES_TOO_MUCH_GAS, INSUFFICIENT_FUNDS_FOR_RENT, SPONSOR_BALANCE_TOO_LOW, ORDER_EXPIRED, ORDER_IS_CANCELLED, TRANSFER_FROM_FAILED, TRANSFER_FAILED, SIGNATURE_EXPIRED, INVALID_SIGNATURE, INSUFFICIENT_NATIVE_TOKENS_SUPPLIED, TRANSFER_AMOUNT_EXCEEDS_ALLOWANCE, TRANSFER_AMOUNT_EXCEEDS_BALANCE, INVALID_SENDER, ACCOUNT_ABSTRACTION_INVALID_NONCE, ACCOUNT_ABSTRACTION_SIGNATURE_ERROR, SEAPORT_INEXACT_FRACTION, TOKEN_NOT_TRANSFERABLE, ZERO_SELL_AMOUNT, MINT_NOT_ACTIVE, ERC_1155_TOO_MANY_REQUESTED, INCORRECT_PAYMENT, INVALID_GAS_PRICE, FLUID_DEX_ERROR, ORDER_ALREADY_FILLED, SEAPORT_INVALID_FULFILLER, INVALID_SIGNER, MINT_QUANTITY_EXCEEDS_MAX_PER_WALLET, MINT_QUANTITY_EXCEEDS_MAX_SUPPLY, JUPITER_INVALID_TOKEN_ACCOUNT, INVALID_NONCE, ACCOUNT_ABSTRACTION_GAS_LIMIT, CONTRACT_PAUSED, SWAP_IMPACT_TOO_HIGH, INSUFFICIENT_POOL_LIQUIDITY, POOL_CAP_EXCEEDED, TTL_EXPIRED, DEPOSIT_CONFIRMATION_TIMEOUT, ORPHANED_DEPOSIT_REFUND, GASLESS_PERMIT_BALANCE_TOO_LOW, MANUAL_ADMIN_REFUND, QUOTED_GAS_LIMIT_EXCEEDED, DESTINATION_TOKEN_TRANSFER_REJECTED, DEPOSIT_REORGED, BLOCKED_WALLET, PROTOCOL_DEADLINE_EXPIRED, TRANSACTION_NOT_INCLUDED, TRANSACTION_SUBMISSION_FAILED, N/A Available options:
AMOUNT_TOO_LOW_TO_REFUND, NEGATIVE_NEW_AMOUNT_AFTER_FEES, SWAP_CURRENCY_NOT_ON_ORIGIN, REFUND_RECIPIENT_IS_VASP, REFUND_RECIPIENT_IS_BLOCKED, MANUAL_REFUND_REQUIRED Was this page helpful?