Handling Execution Errors - Relay
Documentation Index
Fetch the complete documentation index at: /llms.txt
Use this file to discover all available pages before exploring further.
Once a request is submitted, execution can still fail during the fill or, if a fill isn’t possible, during the refund. These failures are surfaced as failReason (fill) and refundFailReason (refund) on the request object, distinct from the quote errors returned before a request is ever submitted. This guide outlines the possible fill and refund failure reasons and what each one means.
Fill Errors
failReason explains why a fill did not complete after a request was submitted.
Deposit & Validation Errors
| Error Code | Description |
|---|---|
DEPOSIT_CHAIN_MISMATCH |
For strict deposit addresses, the deposit landed on a different chain than the one the address was registered for. |
INCORRECT_DEPOSIT_CURRENCY |
For strict deposit addresses, the token received doesn’t match the currency quoted for this request. |
DOUBLE_SPEND |
A second deposit was detected at an address whose first deposit was already processed. |
DEPOSITED_AMOUNT_TOO_LOW_TO_FILL |
The amount deposited is less than the quoted amount needed to complete the swap. |
ORIGIN_CURRENCY_MISMATCH |
The currency detected on origin doesn’t match the origin currency specified in the request. |
TTL_EXPIRED |
The request’s time-to-live window passed before it could be filled. |
DEPOSIT_CONFIRMATION_TIMEOUT |
The deposit transaction wasn’t confirmed within the expected window, so the request timed out and was routed to a refund. |
DEPOSIT_REORGED |
The deposit transaction was removed from the canonical chain by a block reorganization, so the request was failed. |
ORPHANED_DEPOSIT_REFUND |
A deposit at a deposit address couldn’t be matched to a fillable request, so the funds were refunded to the depositor. |
BLOCKED_WALLET |
An address associated with the request was flagged by wallet screening at fill time, so the fill was blocked. Funds are not automatically refunded and are subject to compliance review. |
Solver Capacity & Balance Errors
| Error Code | Description |
|---|---|
SOLVER_CAPACITY_EXCEEDED |
The solver’s available capacity for this route has been exceeded. |
SOLVER_BALANCE_TOO_LOW |
The solver doesn’t have enough native tokens or balance to construct the fill transaction. |
SPONSOR_BALANCE_TOO_LOW |
The sponsor covering transaction fees doesn’t have sufficient balance. |
INSUFFICIENT_FUNDS_FOR_RENT |
The user’s balance isn’t enough to cover rent/storage fees (Solana). |
NEGATIVE_NEW_AMOUNT_AFTER_FEES |
After deducting fees, the resulting amount is zero or negative. |
AMOUNT_TOO_LOW_TO_REFUND |
The amount to refund is zero or negative, or below the chain’s minimum transfer threshold, so no refund could be issued. |
GASLESS_PERMIT_BALANCE_TOO_LOW |
The balance available from a gasless permit wasn’t enough to complete the request, so the funds were refunded. |
Swap Routing & Pricing Errors
| Error Code | Description |
|---|---|
NO_QUOTES |
No liquidity providers returned a valid quote for this swap at fill time. |
NO_INTERNAL_SWAP_ROUTES_FOUND |
No internal DEX route was found between the specified currencies on this chain. |
SWAP_IMPACT_TOO_HIGH |
The swap’s price impact at fill time exceeds the acceptable threshold. |
INSUFFICIENT_POOL_LIQUIDITY |
The DEX pool doesn’t have enough reserves to complete the swap at any price. |
SLIPPAGE |
The swap couldn’t complete within the given slippage tolerance. |
TOO_LITTLE_RECEIVED |
The onchain swap executed, but the output amount was below the guaranteed minimum. |
GENERATE_SWAP_FAILED |
Generating the swap transaction (routing, calldata) failed before execution. |
REVERSE_SWAP_FAILED |
The reversal swap used to return funds to the user for a refund failed to execute or quote. |
Transaction Construction & Gas Errors
| Error Code | Description |
|---|---|
TRANSACTION_TOO_LARGE |
The serialized transaction exceeds the maximum payload size for the origin chain or RPC. |
SWAP_USES_TOO_MUCH_GAS |
The swap transaction would consume more gas than a single block allows. |
NEW_CALLDATA_INCLUDES_HIGHER_RENT_FEE |
A refreshed permit increased the rent/storage fee beyond the acceptable limit (Solana). |
INVALID_GAS_PRICE |
The submitted gas price is outside acceptable bounds. |
QUOTED_GAS_LIMIT_EXCEEDED |
The gas limit required at fill time was significantly higher than the gas limit quoted, so the fill was aborted. |
JUPITER_INVALID_TOKEN_ACCOUNT |
The token account required for the swap doesn’t exist or is invalid (Solana/Jupiter). |
Onchain Execution & Revert Errors
| Error Code | Description |
|---|---|
EXECUTION_REVERTED |
The swap contract call reverted during execution. |
TRANSACTION_REVERTED |
The transaction reverted at the blockchain level. |
MISSING_REVERT_DATA |
The transaction reverted, but the reason couldn’t be decoded from the returned data. |
CONTRACT_PAUSED |
The target contract is currently paused and not accepting calls. |
TOKEN_NOT_TRANSFERABLE |
The token enforces a non-transferable restriction (for example, a soulbound token). |
TRANSFER_FAILED |
A token transfer reverted at the contract level. |
TRANSFER_FROM_FAILED |
Transferring tokens from the user to the contract failed (for example, insufficient allowance). |
TRANSFER_AMOUNT_EXCEEDS_ALLOWANCE |
The approved allowance is less than the amount being transferred. |
TRANSFER_AMOUNT_EXCEEDS_BALANCE |
The sender’s token balance is less than the amount being transferred. |
INSUFFICIENT_NATIVE_TOKENS_SUPPLIED |
The native token value supplied with the transaction is less than required. |
INCORRECT_PAYMENT |
The value or amount sent doesn’t match what the swap requires. |
ZERO_SELL_AMOUNT |
The swap was attempted with a zero input amount. |
INVALID_SENDER |
The address executing the swap isn’t authorized to do so. |
INVALID_SIGNER |
The signer on the order doesn’t match the address expected by the contract. |
DESTINATION_TOKEN_TRANSFER_REJECTED |
A token transfer reverted during the destination-side swap — typically the token itself rejecting the transfer (transfer tax, max wallet/transaction limits, or a blacklist). |
Order & Signature Errors
| Error Code | Description |
|---|---|
ORDER_EXPIRED |
The order’s expiration timestamp passed before it could be executed. |
ORDER_IS_CANCELLED |
The order was cancelled onchain before it could be filled. |
ORDER_ALREADY_FILLED |
The order was already fully executed and can’t be filled again. |
SIGNATURE_EXPIRED |
The signature used for token approval expired before execution. |
INVALID_SIGNATURE |
The provided signature is invalid or doesn’t match the expected signer. |
INVALID_NONCE |
The nonce provided has already been used or isn’t valid for this signer. |
SEAPORT_INEXACT_FRACTION |
The Seaport order specifies a fractional amount that can’t be fulfilled exactly. |
SEAPORT_INVALID_FULFILLER |
The caller isn’t an authorized fulfiller for this Seaport order. |
PROTOCOL_DEADLINE_EXPIRED |
The protocol order’s deadline expired before the fill could complete, so a no-fill-or-refund was submitted onchain. |
Account Abstraction Errors
| Error Code | Description |
|---|---|
ACCOUNT_ABSTRACTION_INVALID_NONCE |
The nonce in the account abstraction user operation is invalid or stale. |
ACCOUNT_ABSTRACTION_SIGNATURE_ERROR |
The account abstraction user operation’s signature is invalid. |
ACCOUNT_ABSTRACTION_GAS_LIMIT |
The gas required for account abstraction verification exceeds the allowed limit. |
NFT Minting Errors
| Error Code | Description |
|---|---|
MINT_NOT_ACTIVE |
The NFT mint phase isn’t currently active. |
ERC_1155_TOO_MANY_REQUESTED |
The quantity requested exceeds the contract’s allowed batch size. |
MINT_QUANTITY_EXCEEDS_MAX_PER_WALLET |
The wallet has already minted the maximum quantity allowed. |
MINT_QUANTITY_EXCEEDS_MAX_SUPPLY |
The requested quantity would exceed the collection’s maximum supply. |
Other
| Error Code | Description |
|---|---|
FLUID_DEX_ERROR |
The Fluid DEX protocol returned an error during the swap. |
MANUAL_ADMIN_REFUND |
The request was manually refunded by the Relay team via an admin action. |
UNKNOWN |
The fill failed for a reason that didn’t match a known error pattern. |
N/A |
The fill completed without failure. |
Refund Errors
refundFailReason explains why a refund could not be completed after a fill failed. This field defaults to N/A when no refund failure has occurred.
| Error Code | Description |
|---|---|
AMOUNT_TOO_LOW_TO_REFUND |
The amount to refund is zero or negative, or below the chain’s minimum transfer threshold, so no refund could be issued. |
NEGATIVE_NEW_AMOUNT_AFTER_FEES |
After deducting fees, the resulting amount is zero or negative. |
SWAP_CURRENCY_NOT_ON_ORIGIN |
The swap’s output currency isn’t available to bridge back to the origin chain, so the refund can’t be issued in the original currency. |
REFUND_RECIPIENT_IS_VASP |
The refund recipient was identified as a Virtual Asset Service Provider (VASP), which requires manual review before the refund can be issued. |
N/A |
No refund failure has occurred. |