Deposit Addresses - Relay

Documentation Index

Fetch the complete documentation index at: /llms.txt

Use this file to discover all available pages before exploring further.

Skip to main content

Deposit addresses let users bridge or swap tokens by simply sending funds to an address — no wallet connection or signing required. This works for both cross-chain bridges and same-chain swaps. The integrator requests a quote with useDepositAddress: true, receives a deposit address, and the user transfers funds there. Relay detects the deposit and fills on the destination chain.This makes deposit addresses ideal for CEX withdrawals, fiat onramps, and headless systems where the sender can’t sign transactions. The user just sends to an address — same UX as a normal transfer.

​ How It Works

  1. Quote — Integrator requests a quote with useDepositAddress: true. The response includes a depositAddress and requestId.
  2. User Deposit — User sends funds to the deposit address (wallet transfer or exchange withdrawal).
  3. Detect + Sweep — Relay detects the deposit onchain and sweeps funds to the depository contract. For open-ended addresses, the amount, currency, and chain are validated and the quote may be regenerated if different from the original. For strict addresses, the deposit is validated against the original order.
  4. Fill — Relay fills on the destination chain from pre-positioned liquidity. Funds are delivered to the recipient address.

​ Key Parameters

Parameter Type Details
useDepositAddress boolean Set to true to receive a deposit address instead of transaction calldata.
user address The recipient wallet on the destination chain. Can be any valid address, including the zero address.
recipient address The address that receives funds on the destination chain.
refundTo address Address to send refunds if the transfer fails. Required for strict deposit addresses and for routes that include a destination-side swap. Set to the origin chain’s native-currency address (EVM 0x0000000000000000000000000000000000000000, Bitcoin bc1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqmql8k8, Solana 11111111111111111111111111111111) to opt into automatic refunds to the original depositor — supported on EVM chains, Bitcoin, and Solana. Omitting this on open addresses disables automatic refund. See Refund Behavior.
recoveryAddress address Optional origin-chain EOA controlled by the integrator. Used as a recovery address when Relay cannot safely auto-refund to the original depositor. This is additive to refundTo; existing refundTo behavior is preserved unless recoveryAddress is supplied. See recoveryAddress.
tradeType string EXACT_INPUT or EXPECTED_OUTPUT for open deposit addresses. EXACT_OUTPUT is supported only with a strict deposit address (strict: true); an open-ended EXACT_OUTPUT request is rejected.
amount string The quoted amount in the origin token’s smallest unit. Open-ended addresses support variable deposit amounts. Strict addresses should be treated as exact-payment instructions.
strict boolean Set to true for a strict deposit address tied to a specific order. Omit or set to false for an open deposit address.

​ Address Reuse

Open deposit addresses can be reused for the same route (same origin currency, origin chain, destination currency, and destination chain). Each new deposit triggers a fresh quote and fill.Strict addresses should not be presented as reusable. They are bound to the original order and intended for single-use payment instructions.

​ Open vs Strict Deposit Addresses

Relay supports two deposit address modes that differ in how flexible they are when handling deposits.

​ Open Deposit Addresses

Open-ended deposit addresses are the flexible mode for supported routes. They can handle variable deposit amounts, and on some supported chain families they can also adapt to a different supported input token or a deposit on a different chain within the same VM. Adapting to a different token or a wrong chain is not always automatic — recovery may require manual reindexing before the deposit is recognized.

​ Strict Deposit Addresses

Strict deposit addresses are bound to the original order and should be treated as predictable payment instructions. They are not flexible intake points.

​ Comparison

Behavior Open Strict
Accepted currencies Flexible — may adapt to a different supported token depending on chain family Only the currency specified in the original quote
Wrong token (solver currency) Requote and fill on some chain families (not universal); relay.link/withdraw is the fallback if the auto-flow doesn’t complete Recoverable via relay.link/withdraw
Wrong token (non-solver) Not supported and not currently recoverable Not supported and not currently recoverable
Wrong chain (same VM) Supported, but may require manual reindexing before the deposit is recognized; some chain families refund instead Not supported — no automatic wrong-chain recovery
Wrong chain (different VM) Not supported Not supported
Amount mismatch Usually requotes for actual amount; too-small deposits may refund Underpayments refund; exact payments fill; overpayments fill the quoted amount and refund the excess
refundTo Recommended (omitting disables automatic refund) Required
Address reuse Yes, same route No — bound to original order

​ Example Request and Response

​ Open Deposit Address

Bridging 0.01 ETH from Base to Optimism using an open deposit address:

Request

Response

curl -X POST \
  'https://api.relay.link/quote/v2' \
  -H 'Content-Type: application/json' \
  -d '{
    "user": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",
    "originChainId": 8453,
    "originCurrency": "0x0000000000000000000000000000000000000000",
    "destinationChainId": 10,
    "destinationCurrency": "0x0000000000000000000000000000000000000000",
    "tradeType": "EXACT_INPUT",
    "recipient": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",
    "amount": "100000000000000000",
    "useDepositAddress": true,
    "refundTo": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd"
}'
{
  "steps": [\
    {\
      "id": "deposit",\
      "action": "Confirm transaction in your wallet",\
      "description": "Depositing funds to the relayer to execute the swap for ETH",\
      "kind": "transaction",\
      "items": [\
        {\
          "status": "incomplete",\
          "data": {\
            "from": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",\
            "to": "0x856533b33e4526ca3df3b4df4205955056d9d3f0",\
            "data": "0x",\
            "value": "100000000000000000",\
            "chainId": 8453,\
            "gas": "27300",\
            "maxFeePerGas": "6500000",\
            "maxPriorityFeePerGas": "1000000"\
          },\
          "check": {\
            "endpoint": "/intents/status/v3?requestId=0x5288854c6ff2bf4eb4f53f515e599217c20ded0654f7bbfa2a459ebfe462a57c",\
            "method": "GET"\
          }\
        }\
      ],\
      "requestId": "0x5288854c6ff2bf4eb4f53f515e599217c20ded0654f7bbfa2a459ebfe462a57c",\
      "depositAddress": "0x856533b33e4526ca3df3b4df4205955056d9d3f0"\
    }\
  ],
  "fees": {
    "gas": {
      "currency": {
        "chainId": 8453,
        "address": "0x0000000000000000000000000000000000000000",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "metadata": {
          "logoURI": "https://assets.relay.link/icons/1/light.png",
          "verified": true
        }
      },
      "amount": "143425703256",
      "amountFormatted": "0.000000143425703256",
      "amountUsd": "0.000302",
      "minimumAmount": "143425703256"
    },
    "relayer": {
      "currency": {
        "chainId": 8453,
        "address": "0x0000000000000000000000000000000000000000",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "metadata": {
          "logoURI": "https://assets.relay.link/icons/1/light.png",
          "verified": true
        }
      },
      "amount": "19775083466725",
      "amountFormatted": "0.000019775083466725",
      "amountUsd": "0.041623",
      "minimumAmount": "19775083466725"
    },
    "relayerGas": {
      "currency": {
        "chainId": 8453,
        "address": "0x0000000000000000000000000000000000000000",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "metadata": {
          "logoURI": "https://assets.relay.link/icons/1/light.png",
          "verified": true
        }
      },
      "amount": "773003796434",
      "amountFormatted": "0.000000773003796434",
      "amountUsd": "0.001627",
      "minimumAmount": "773003796434"
    },
    "relayerService": {
      "currency": {
        "chainId": 8453,
        "address": "0x0000000000000000000000000000000000000000",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "metadata": {
          "logoURI": "https://assets.relay.link/icons/1/light.png",
          "verified": true
        }
      },
      "amount": "19002079670291",
      "amountFormatted": "0.000019002079670291",
      "amountUsd": "0.039996",
      "minimumAmount": "19002079670291"
    },
    "app": {
      "currency": {
        "chainId": 8453,
        "address": "0x0000000000000000000000000000000000000000",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "metadata": {
          "logoURI": "https://assets.relay.link/icons/1/light.png",
          "verified": true
        }
      },
      "amount": "0",
      "amountFormatted": "0.0",
      "amountUsd": "0",
      "minimumAmount": "0"
    },
    "subsidized": {
      "currency": {
        "chainId": 8453,
        "address": "0x0000000000000000000000000000000000000000",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "metadata": {
          "logoURI": "https://assets.relay.link/icons/1/light.png",
          "verified": true
        }
      },
      "amount": "0",
      "amountFormatted": "0.0",
      "amountUsd": "0",
      "minimumAmount": "0"
    }
  },
  "details": {
    "operation": "swap",
    "sender": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",
    "recipient": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",
    "currencyIn": {
      "currency": {
        "chainId": 8453,
        "address": "0x0000000000000000000000000000000000000000",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "metadata": {
          "logoURI": "https://assets.relay.link/icons/1/light.png",
          "verified": true
        }
      },
      "amount": "100000000000000000",
      "amountFormatted": "0.1",
      "amountUsd": "210.480239",
      "minimumAmount": "100000000000000000"
    },
    "currencyOut": {
      "currency": {
        "chainId": 10,
        "address": "0x0000000000000000000000000000000000000000",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "metadata": {
          "logoURI": "https://assets.relay.link/icons/1/light.png",
          "verified": true
        }
      },
      "amount": "99980224916533275",
      "amountFormatted": "0.099980224916533275",
      "amountUsd": "210.438616",
      "minimumAmount": "97980620418202610"
    },
    "refundCurrency": {
      "currency": {
        "chainId": 8453,
        "address": "0x0000000000000000000000000000000000000000",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "metadata": {
          "logoURI": "https://assets.relay.link/icons/1/light.png",
          "verified": true
        }
      },
      "amount": "100000000000000000",
      "amountFormatted": "0.1",
      "amountUsd": "210.480239",
      "minimumAmount": "100000000000000000"
    },
    "totalImpact": {
      "usd": "-0.041623",
      "percent": "-0.02"
    },
    "swapImpact": {
      "usd": "-0.000000",
      "percent": "-0.00"
    },
    "expandedPriceImpact": {
      "swap": {
        "usd": "-0.019996"
      },
      "execution": {
        "usd": "-0.021627"
      },
      "relay": {
        "usd": "0"
      },
      "app": {
        "usd": "0"
      },
      "sponsored": {
        "usd": "0"
      }
    },
    "rate": "0.9998022491653327",
    "slippageTolerance": {
      "origin": {
        "usd": "0.000000",
        "value": "0",
        "percent": "0.00"
      },
      "destination": {
        "usd": "4.187728",
        "value": "1999604498330665",
        "percent": "1.99"
      }
    },
    "timeEstimate": 2,
    "userBalance": "0",
    "isFixedRate": false,
    "route": {
      "origin": {
        "inputCurrency": {
          "currency": {
            "chainId": 8453,
            "address": "0x0000000000000000000000000000000000000000",
            "symbol": "ETH",
            "name": "Ether",
            "decimals": 18,
            "metadata": {
              "logoURI": "https://assets.relay.link/icons/1/light.png",
              "verified": true
            }
          },
          "amount": "100000000000000000",
          "amountFormatted": "0.1",
          "amountUsd": "210.480239",
          "minimumAmount": "100000000000000000"
        },
        "outputCurrency": {
          "currency": {
            "chainId": 8453,
            "address": "0x0000000000000000000000000000000000000000",
            "symbol": "ETH",
            "name": "Ether",
            "decimals": 18,
            "metadata": {
              "logoURI": "https://assets.relay.link/icons/1/light.png",
              "verified": true
            }
          },
          "amount": "100000000000000000",
          "amountFormatted": "0.1",
          "amountUsd": "210.480239",
          "minimumAmount": "100000000000000000"
        },
        "router": "relay"
      },
      "destination": {
        "inputCurrency": {
          "currency": {
            "chainId": 10,
            "address": "0x0000000000000000000000000000000000000000",
            "symbol": "ETH",
            "name": "Ether",
            "decimals": 18,
            "metadata": {
              "logoURI": "https://assets.relay.link/icons/1/light.png",
              "verified": true
            }
          },
          "amount": "99980224916533275",
          "amountFormatted": "0.099980224916533275",
          "amountUsd": "210.438616",
          "minimumAmount": "97980620418202610"
        },
        "outputCurrency": {
          "currency": {
            "chainId": 10,
            "address": "0x0000000000000000000000000000000000000000",
            "symbol": "ETH",
            "name": "Ether",
            "decimals": 18,
            "metadata": {
              "logoURI": "https://assets.relay.link/icons/1/light.png",
              "verified": true
            }
          },
          "amount": "99980224916533275",
          "amountFormatted": "0.099980224916533275",
          "amountUsd": "210.438616",
          "minimumAmount": "97980620418202610"
        },
        "router": "relay"
      }
    }
  },
  "protocol": {
    "v2": {
      "orderId": "0x8391f3eb54c0999767a970a1603aaf16403a17263cdf723adec76e3fda5be275",
      "orderData": {
        "version": "v1",
        "solverChainId": "base",
        "solver": "0xf70da97812cb96acdf810712aa562db8dfa3dbef",
        "salt": "0x184ed77f343bff09b7255a75f0be900ac82c00c276c0a97eed2948ab3a1e8503",
        "inputs": [\
          {\
            "payment": {\
              "chainId": "base",\
              "currency": "0x0000000000000000000000000000000000000000",\
              "amount": "100000000000000000",\
              "weight": "1"\
            },\
            "refunds": [\
              {\
                "chainId": "base",\
                "recipient": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",\
                "currency": "0x0000000000000000000000000000000000000000",\
                "minimumAmount": "0",\
                "deadline": 1791082506,\
                "extraData": "0x000000000000000000000000b92fe925dc43a0ecde6c8b1a2709c170ec4fff4f"\
              },\
              {\
                "chainId": "optimism",\
                "recipient": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",\
                "currency": "0x0000000000000000000000000000000000000000",\
                "minimumAmount": "0",\
                "deadline": 1791082506,\
                "extraData": "0x000000000000000000000000b92fe925dc43a0ecde6c8b1a2709c170ec4fff4f"\
              }\
            ]\
          }\
        ],
        "output": {
          "chainId": "optimism",
          "payments": [\
            {\
              "recipient": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",\
              "currency": "0x0000000000000000000000000000000000000000",\
              "minimumAmount": "97980620418202610",\
              "expectedAmount": "99980224916533275"\
            }\
          ],
          "calls": [],
          "deadline": 1791082506,
          "extraData": "0x000000000000000000000000b92fe925dc43a0ecde6c8b1a2709c170ec4fff4f"
        },
        "fees": []
      },
      "paymentDetails": {
        "chainId": "base",
        "depository": "0x4cd00e387622c35bddb9b4c962c136462338bc31",
        "currency": "0x0000000000000000000000000000000000000000",
        "amount": "100000000000000000"
      }
    }
  }
}

​ Strict Deposit Address

Same route, but using a strict deposit address. Note the addition of strict: true and the required refundTo:

Request

Response

curl -X POST \
  'https://api.relay.link/quote/v2' \
  -H 'Content-Type: application/json' \
  -d '{
    "user": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",
    "originChainId": 8453,
    "originCurrency": "0x0000000000000000000000000000000000000000",
    "destinationChainId": 10,
    "destinationCurrency": "0x0000000000000000000000000000000000000000",
    "tradeType": "EXACT_INPUT",
    "recipient": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",
    "amount": "100000000000000000",
    "useDepositAddress": true,
    "strict": true,
    "refundTo": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd"
}'
{
  "steps": [\
    {\
      "id": "deposit",\
      "action": "Confirm transaction in your wallet",\
      "description": "Depositing funds to the relayer to execute the swap for ETH",\
      "kind": "transaction",\
      "items": [\
        {\
          "status": "incomplete",\
          "data": {\
            "from": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",\
            "to": "0xEa04F61d00AFD8649B39b873306949aa11630067",\
            "data": "0x",\
            "value": "100000000000000000",\
            "chainId": 8453,\
            "gas": "27300",\
            "maxFeePerGas": "6500000",\
            "maxPriorityFeePerGas": "1000000"\
          },\
          "check": {\
            "endpoint": "/intents/status/v3?requestId=0xcb422162ba0a775cadcdc7983fc2108e761840446fe3f241fd8f72286fd3b4f8",\
            "method": "GET"\
          }\
        }\
      ],\
      "requestId": "0xcb422162ba0a775cadcdc7983fc2108e761840446fe3f241fd8f72286fd3b4f8",\
      "depositAddress": "0xEa04F61d00AFD8649B39b873306949aa11630067"\
    }\
  ],
  "fees": {
    "gas": {
      "currency": {
        "chainId": 8453,
        "address": "0x0000000000000000000000000000000000000000",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "metadata": {
          "logoURI": "https://assets.relay.link/icons/1/light.png",
          "verified": true
        }
      },
      "amount": "143437744316",
      "amountFormatted": "0.000000143437744316",
      "amountUsd": "0.000302",
      "minimumAmount": "143437744316"
    },
    "relayer": {
      "currency": {
        "chainId": 8453,
        "address": "0x0000000000000000000000000000000000000000",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "metadata": {
          "logoURI": "https://assets.relay.link/icons/1/light.png",
          "verified": true
        }
      },
      "amount": "19782653616567",
      "amountFormatted": "0.000019782653616567",
      "amountUsd": "0.041606",
      "minimumAmount": "19782653616567"
    },
    "relayerGas": {
      "currency": {
        "chainId": 8453,
        "address": "0x0000000000000000000000000000000000000000",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "metadata": {
          "logoURI": "https://assets.relay.link/icons/1/light.png",
          "verified": true
        }
      },
      "amount": "773072690010",
      "amountFormatted": "0.00000077307269001",
      "amountUsd": "0.001626",
      "minimumAmount": "773072690010"
    },
    "relayerService": {
      "currency": {
        "chainId": 8453,
        "address": "0x0000000000000000000000000000000000000000",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "metadata": {
          "logoURI": "https://assets.relay.link/icons/1/light.png",
          "verified": true
        }
      },
      "amount": "19009580926557",
      "amountFormatted": "0.000019009580926557",
      "amountUsd": "0.039980",
      "minimumAmount": "19009580926557"
    },
    "app": {
      "currency": {
        "chainId": 8453,
        "address": "0x0000000000000000000000000000000000000000",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "metadata": {
          "logoURI": "https://assets.relay.link/icons/1/light.png",
          "verified": true
        }
      },
      "amount": "0",
      "amountFormatted": "0.0",
      "amountUsd": "0",
      "minimumAmount": "0"
    },
    "subsidized": {
      "currency": {
        "chainId": 8453,
        "address": "0x0000000000000000000000000000000000000000",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "metadata": {
          "logoURI": "https://assets.relay.link/icons/1/light.png",
          "verified": true
        }
      },
      "amount": "0",
      "amountFormatted": "0.0",
      "amountUsd": "0",
      "minimumAmount": "0"
    }
  },
  "details": {
    "operation": "swap",
    "sender": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",
    "recipient": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",
    "currencyIn": {
      "currency": {
        "chainId": 8453,
        "address": "0x0000000000000000000000000000000000000000",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "metadata": {
          "logoURI": "https://assets.relay.link/icons/1/light.png",
          "verified": true
        }
      },
      "amount": "100000000000000000",
      "amountFormatted": "0.1",
      "amountUsd": "210.314210",
      "minimumAmount": "100000000000000000"
    },
    "currencyOut": {
      "currency": {
        "chainId": 10,
        "address": "0x0000000000000000000000000000000000000000",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "metadata": {
          "logoURI": "https://assets.relay.link/icons/1/light.png",
          "verified": true
        }
      },
      "amount": "99980217346383433",
      "amountFormatted": "0.099980217346383433",
      "amountUsd": "210.272604",
      "minimumAmount": "97980612999455765"
    },
    "refundCurrency": {
      "currency": {
        "chainId": 8453,
        "address": "0x0000000000000000000000000000000000000000",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "metadata": {
          "logoURI": "https://assets.relay.link/icons/1/light.png",
          "verified": true
        }
      },
      "amount": "100000000000000000",
      "amountFormatted": "0.1",
      "amountUsd": "210.314210",
      "minimumAmount": "100000000000000000"
    },
    "totalImpact": {
      "usd": "-0.041606",
      "percent": "-0.02"
    },
    "swapImpact": {
      "usd": "0.000000",
      "percent": "0.00"
    },
    "expandedPriceImpact": {
      "swap": {
        "usd": "-0.019980"
      },
      "execution": {
        "usd": "-0.021626"
      },
      "relay": {
        "usd": "0"
      },
      "app": {
        "usd": "0"
      },
      "sponsored": {
        "usd": "0"
      }
    },
    "rate": "0.9998021734638343",
    "slippageTolerance": {
      "origin": {
        "usd": "0.000000",
        "value": "0",
        "percent": "0.00"
      },
      "destination": {
        "usd": "4.184425",
        "value": "1999604346927668",
        "percent": "1.99"
      }
    },
    "timeEstimate": 2,
    "userBalance": "0",
    "isFixedRate": false,
    "route": {
      "origin": {
        "inputCurrency": {
          "currency": {
            "chainId": 8453,
            "address": "0x0000000000000000000000000000000000000000",
            "symbol": "ETH",
            "name": "Ether",
            "decimals": 18,
            "metadata": {
              "logoURI": "https://assets.relay.link/icons/1/light.png",
              "verified": true
            }
          },
          "amount": "100000000000000000",
          "amountFormatted": "0.1",
          "amountUsd": "210.314210",
          "minimumAmount": "100000000000000000"
        },
        "outputCurrency": {
          "currency": {
            "chainId": 8453,
            "address": "0x0000000000000000000000000000000000000000",
            "symbol": "ETH",
            "name": "Ether",
            "decimals": 18,
            "metadata": {
              "logoURI": "https://assets.relay.link/icons/1/light.png",
              "verified": true
            }
          },
          "amount": "100000000000000000",
          "amountFormatted": "0.1",
          "amountUsd": "210.314210",
          "minimumAmount": "100000000000000000"
        },
        "router": "relay"
      },
      "destination": {
        "inputCurrency": {
          "currency": {
            "chainId": 10,
            "address": "0x0000000000000000000000000000000000000000",
            "symbol": "ETH",
            "name": "Ether",
            "decimals": 18,
            "metadata": {
              "logoURI": "https://assets.relay.link/icons/1/light.png",
              "verified": true
            }
          },
          "amount": "99980217346383433",
          "amountFormatted": "0.099980217346383433",
          "amountUsd": "210.272604",
          "minimumAmount": "97980612999455765"
        },
        "outputCurrency": {
          "currency": {
            "chainId": 10,
            "address": "0x0000000000000000000000000000000000000000",
            "symbol": "ETH",
            "name": "Ether",
            "decimals": 18,
            "metadata": {
              "logoURI": "https://assets.relay.link/icons/1/light.png",
              "verified": true
            }
          },
          "amount": "99980217346383433",
          "amountFormatted": "0.099980217346383433",
          "amountUsd": "210.272604",
          "minimumAmount": "97980612999455765"
        },
        "router": "relay"
      }
    }
  },
  "protocol": {
    "v2": {
      "orderId": "0x67ffde85c03352d45f9b073ef15fc73c656115d1c472de76aff9c66580eb5dc7",
      "orderData": {
        "version": "v1",
        "solverChainId": "base",
        "solver": "0xf70da97812cb96acdf810712aa562db8dfa3dbef",
        "salt": "0xe95244440faaedb49eddcb1dda9a5b82531b38e03c5799242638685b2fdb924e",
        "inputs": [\
          {\
            "payment": {\
              "chainId": "base",\
              "currency": "0x0000000000000000000000000000000000000000",\
              "amount": "100000000000000000",\
              "weight": "1"\
            },\
            "refunds": [\
              {\
                "chainId": "base",\
                "recipient": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",\
                "currency": "0x0000000000000000000000000000000000000000",\
                "minimumAmount": "0",\
                "deadline": 1791082605,\
                "extraData": "0x000000000000000000000000b92fe925dc43a0ecde6c8b1a2709c170ec4fff4f"\
              },\
              {\
                "chainId": "optimism",\
                "recipient": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",\
                "currency": "0x0000000000000000000000000000000000000000",\
                "minimumAmount": "0",\
                "deadline": 1791082605,\
                "extraData": "0x000000000000000000000000b92fe925dc43a0ecde6c8b1a2709c170ec4fff4f"\
              }\
            ]\
          }\
        ],
        "output": {
          "chainId": "optimism",
          "payments": [\
            {\
              "recipient": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",\
              "currency": "0x0000000000000000000000000000000000000000",\
              "minimumAmount": "97980612999455765",\
              "expectedAmount": "99980217346383433"\
            }\
          ],
          "calls": [],
          "deadline": 1791082605,
          "extraData": "0x000000000000000000000000b92fe925dc43a0ecde6c8b1a2709c170ec4fff4f"
        },
        "fees": []
      },
      "paymentDetails": {
        "chainId": "base",
        "depository": "0x4cd00e387622c35bddb9b4c962c136462338bc31",
        "currency": "0x0000000000000000000000000000000000000000",
        "amount": "100000000000000000"
      }
    }
  }
}

Key differences in the strict request:

​ Quote Regeneration

When funds arrive at a deposit address, Relay evaluates what was sent versus what was originally quoted. How mismatches are handled depends on the deposit address mode.

​ Open-Ended Addresses

​ Same Token, Different Amount

​ Different Token (Solver Currency)

On some chain families, if the user sends a different token that is a solver currency, Relay can regenerate the quote using the actual currency deposited and fill the order. This is not universal across all chains — some chain families will fail or refund on token mismatch. If a different supported token was sent and nothing happens immediately, use the reindex endpoint as a fallback.

​ Different Chain (Same VM)

Open and custodial deposit addresses exist at the same address across chains within a VM family (e.g. all EVM chains), so a deposit can land on a chain other than the one quoted. This is supported but not always automatic: Relay’s background monitor watches the chain the address was registered on, so a wrong-chain deposit may not be recognized until it is reindexed.If a wrong-chain deposit isn’t picked up within a few minutes, trigger detection manually with the Deposit Address Reindex endpoint, setting targetChainId to the chain the funds actually landed on. Once detected, Relay sweeps the funds and proceeds with a fresh quote and fill.Behavior varies by chain family — some families refund a wrong-chain deposit instead of re-routing it. Strict addresses have no wrong-chain recovery (see Strict Addresses).

​ Different Chain (Different VM)

This is not possible — deposit address formats differ across VM types (e.g., EVM vs Solana vs Bitcoin), so a user cannot accidentally send to the wrong VM.

​ Strict Addresses

Strict addresses are bound to the original order. The handling is narrower:

Open-ended mismatches often create a new requestId. Always track transactions by deposit address, not by requestId. See Tracking Transactions.

​ Refund Behavior

What happens when a deposit can’t be processed depends on the token type and the refundTo configuration.

​ Refund Flows

There are two distinct refund scenarios:

  1. Correct currency, fill failed (e.g., slippage, network issues) — If refundTo is set, the deposit is automatically refunded to that address, minus the cost of gas. No additional fees are taken.
  2. Wrong currency (non-solver token) — Not supported and not currently recoverable.

If a wrong solver currency was sent and the deposit didn’t auto-resolve, users can recover it at relay.link/withdraw.

A same-VM wrong-chain deposit to an open or custodial address is recoverable but may not re-route or refund on its own. Trigger reindexing with targetChainId set to the chain the funds landed on. Strict addresses have no automatic wrong-chain recovery.

​ refundTo Configuration

refundTo value Behavior
User’s address Refund directly to the user
App-controlled address Refund to integrator’s address — your support team handles returning funds to the user
Origin chain’s native-currency address (EVM 0x0000000000000000000000000000000000000000, Bitcoin bc1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqmql8k8, Solana 11111111111111111111111111111111) Auto-refund to the original depositor — the address that sent funds to the deposit address. Supported on EVM chains, Bitcoin, and Solana origins; rejected on other VMs. Relay makes a best effort to detect known CEX sender addresses — if the depositor is detected as a CEX address, Relay aborts auto-refund and requires manual refund / recovery instead.
Not set (open) Automatic refund is disabled — no internal fallback
Not set (strict) Not allowed — refundTo is required for strict deposit addresses

If users may send from a centralized exchange, do not set refundTo as the user’s address — neither an explicit user address you don’t control nor the native-currency-address auto-refund opt-in — the sender address will be the exchange’s hot wallet, not the user’s. Use an app-controlled address instead so your support team can handle the last mile. If you still want depositor auto-detection for self-custodied senders, pair the auto-refund opt-in with a recoveryAddress as the fallback.

When auto-refund to the original depositor is triggered, the request’s outTxs will contain two refund transactions. The first transaction is the solver-to-depositor transfer that actually returns funds to the depositor — this is the one to track from your integration. The second is an internal protocol-settlement transaction that does not move user funds and can be ignored by integrators.

​ recoveryAddress

recoveryAddress is for cases where Relay cannot auto-refund. It should be an integrator-controlled EOA on the origin chain.Use recoveryAddress when an integrator wants to use Relay’s depositor detection, but also needs a fallback recovery path if the detected depositor cannot safely receive an automatic refund. This is most relevant for deposits from custodial sources like centralized exchanges, unsupported currency deposits, or blocked depositor addresses.When recoveryAddress is supplied:

recoveryAddress never receives refunds — it is only used to withdraw funds from the depository contract in the case that we cannot fill or refund.

Constraints:

​ Recommended Setup

​ Tracking Transactions

​ Querying by Deposit Address

The most reliable way to track deposit address transactions is to poll the Get Requests API using the depositAddress query parameter:

Request

Response

curl -X GET "https://api.relay.link/requests/v2?depositAddress=<DEPOSIT_ADDRESS>&sortBy=updatedAt&sortDirection=desc&limit=20"
{
  "requests": [\
    {\
      "id": "0x6acbc4acb0cb61d2b42962ddaf0973b536933670ede1df3ab39f9003e9c3e04e",\
      "status": "success",\
      "user": "0x43255777ad9bd6ff7684d04d6121cd8d96c7e32b",\
      "recipient": "0xf3128499092b90f1a520f63c09946dca3dadf98f",\
      "depositAddress": {\
        "address": "0xb353e49aa47514fb579d6ba6594c768379a96515",\
        "depositAddressType": "open",\
        "depositor": "0xb353e49aa47514fb579d6ba6594c768379a96515",\
        "depositTxHash": "0x41ce037184d661c35f102c961c88f587d137c611bf928389a562ff139ad51d4b",\
      },\
      "data": {\
        "slippageTolerance": "50",\
        "failReason": "N/A",\
        "refundFailReason": "N/A",\
        "subsidizedRequest": false,\
        "fees": {\
          "gas": "3807",\
          "fixed": "20002",\
          "price": "7990",\
          "gateway": "0"\
        },\
        "feesUsd": {\
          "gas": "0.003806",\
          "fixed": "0.020000",\
          "price": "0.007989",\
          "gateway": "0.000000"\
        },\
        "inTxs": [\
          {\
            "fee": "9823482523847773",\
            "data": {\
              "to": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",\
              "data": "0xa9059cbb0000000000000000000000004cd00e387622c35bddb9b4c962c136462338bc310000000000000000000000000000000000000000000000000000000004c3b43d1307b68c63c473186b7aebd374e9bffd16fd791ebcb37b3d005edeb88e7b7672",\
              "from": "0xb353e49aa47514fb579d6ba6594c768379a96515",\
              "value": "0"\
            },\
            "stateChanges": [\
              {\
                "change": {\
                  "data": {\
                    "tokenKind": "ft",\
                    "tokenAddress": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359"\
                  },\
                  "kind": "token",\
                  "balanceDiff": "-79934525"\
                },\
                "address": "0xb353e49aa47514fb579d6ba6594c768379a96515"\
              },\
              {\
                "change": {\
                  "data": {\
                    "tokenKind": "ft",\
                    "tokenAddress": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359"\
                  },\
                  "kind": "token",\
                  "balanceDiff": "79934525"\
                },\
                "address": "0x4cd00e387622c35bddb9b4c962c136462338bc31"\
              }\
            ],\
            "hash": "0x6334e6ce2558c2d4ebc187d99f3adf2605a97279a6733e612ee6cdc57f112ad3",\
            "block": 85115744,\
            "type": "onchain",\
            "chainId": 137,\
            "timestamp": 1775351525,\
            "status": "success"\
          }\
        ],\
        "currency": "usdc",\
        "currencyObject": {},\
        "feeCurrency": "usdc",\
        "feeCurrencyObject": {\
          "chainId": 137,\
          "address": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",\
          "symbol": "USDC",\
          "name": "USD Coin",\
          "decimals": 6,\
          "metadata": {\
            "logoURI": "https://ethereum-optimism.github.io/data/USDC/logo.png",\
            "verified": true\
          }\
        },\
        "appFeeCurrencyObject": {\
          "chainId": 137,\
          "address": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",\
          "symbol": "USDC",\
          "name": "USD Coin",\
          "decimals": 6,\
          "metadata": {\
            "logoURI": "https://ethereum-optimism.github.io/data/USDC/logo.png",\
            "verified": true\
          }\
        },\
        "appFees": [],\
        "paidAppFees": [],\
        "metadata": {\
          "sender": "0x43255777ad9bd6ff7684d04d6121cd8d96c7e32b",\
          "recipient": "0xf3128499092b90f1a520f63c09946dca3dadf98f",\
          "currencyIn": {\
            "currency": {\
              "chainId": 137,\
              "address": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",\
              "symbol": "USDC",\
              "name": "USD Coin",\
              "decimals": 6,\
              "metadata": {\
                "logoURI": "https://ethereum-optimism.github.io/data/USDC/logo.png",\
                "verified": true\
              }\
            },\
            "amount": "79934525",\
            "amountFormatted": "79.934525",\
            "amountUsd": "79.926372",\
            "amountUsdCurrent": "79.923094",\
            "minimumAmount": "79934525"\
          },\
          "currencyOut": {\
            "currency": {\
              "chainId": 8453,\
              "address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",\
              "symbol": "USDC",\
              "name": "USD Coin",\
              "decimals": 6,\
              "metadata": {\
                "logoURI": "https://coin-images.coingecko.com/coins/images/6319/large/usdc.png?1696506694",\
                "verified": true\
              }\
            },\
            "amount": "79902723",\
            "amountFormatted": "79.902723",\
            "amountUsd": "79.894573",\
            "amountUsdCurrent": "79.891297",\
            "minimumAmount": "79503210"\
          },\
          "rate": "0.9996021493841366",\
          "route": {\
            "origin": {\
              "inputCurrency": {\
                "currency": {\
                  "chainId": 137,\
                  "address": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",\
                  "symbol": "USDC",\
                  "name": "USD Coin",\
                  "decimals": 6,\
                  "metadata": {\
                    "logoURI": "https://ethereum-optimism.github.io/data/USDC/logo.png",\
                    "verified": true\
                  }\
                },\
                "amount": "79934525",\
                "amountFormatted": "79.934525",\
                "amountUsd": "79.926372",\
                "minimumAmount": "79934525"\
              },\
              "outputCurrency": {\
                "currency": {\
                  "chainId": 137,\
                  "address": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",\
                  "symbol": "USDC",\
                  "name": "USD Coin",\
                  "decimals": 6,\
                  "metadata": {\
                    "logoURI": "https://ethereum-optimism.github.io/data/USDC/logo.png",\
                    "verified": true\
                  }\
                },\
                "amount": "79934525",\
                "amountFormatted": "79.934525",\
                "amountUsd": "79.926372",\
                "minimumAmount": "79934525"\
              },\
              "router": "relay"\
            },\
            "destination": {\
              "inputCurrency": {\
                "currency": {\
                  "chainId": 8453,\
                  "address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",\
                  "symbol": "USDC",\
                  "name": "USD Coin",\
                  "decimals": 6,\
                  "metadata": {\
                    "logoURI": "https://coin-images.coingecko.com/coins/images/6319/large/usdc.png?1696506694",\
                    "verified": true\
                  }\
                },\
                "amount": "79902723",\
                "amountFormatted": "79.902723",\
                "amountUsd": "79.894573",\
                "minimumAmount": "79503210"\
              },\
              "outputCurrency": {\
                "currency": {\
                  "chainId": 8453,\
                  "address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",\
                  "symbol": "USDC",\
                  "name": "USD Coin",\
                  "decimals": 6,\
                  "metadata": {\
                    "logoURI": "https://coin-images.coingecko.com/coins/images/6319/large/usdc.png?1696506694",\
                    "verified": true\
                  }\
                },\
                "amount": "79902723",\
                "amountFormatted": "79.902723",\
                "amountUsd": "79.894573",\
                "minimumAmount": "79503210"\
              },\
              "router": "relay"\
            }\
          }\
        },\
        "price": "79902723",\
        "usesExternalLiquidity": false,\
        "timeEstimate": 4,\
        "outTxs": [\
          {\
            "fee": "426860744193",\
            "data": {\
              "to": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",\
              "data": "0x23b872dd000000000000000000000000f70da97812cb96acdf810712aa562db8dfa3dbef000000000000000000000000f3128499092b90f1a520f63c09946dca3dadf98f0000000000000000000000000000000000000000000000000000000004c338031307b68c63c473186b7aebd374e9bffd16fd791ebcb37b3d005edeb88e7b7672",\
              "from": "0xca7ded7e4f4ba8ab3b10009236ae6d1b95094589",\
              "value": "0"\
            },\
            "stateChanges": [\
              {\
                "change": {\
                  "data": {\
                    "tokenKind": "ft",\
                    "tokenAddress": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"\
                  },\
                  "kind": "token",\
                  "balanceDiff": "-79902723"\
                },\
                "address": "0xf70da97812cb96acdf810712aa562db8dfa3dbef"\
              },\
              {\
                "change": {\
                  "data": {\
                    "tokenKind": "ft",\
                    "tokenAddress": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"\
                  },\
                  "kind": "token",\
                  "balanceDiff": "79902723"\
                },\
                "address": "0xf3128499092b90f1a520f63c09946dca3dadf98f"\
              }\
            ],\
            "hash": "0x098d75e397350670f9c3fa4496036b0594ad3a06f00ea1784cf45b080f258651",\
            "block": 44281091,\
            "type": "onchain",\
            "chainId": 8453,\
            "timestamp": 1775351529,\
            "status": "success"\
          }\
        ]\
      },\
      "referrer": "meshpay_f5b533dc-841a-4820-a454-9912fca134c1",\
      "createdAt": "2026-04-05T01:12:06.153Z",\
      "updatedAt": "2026-04-05T01:12:44.199Z"\
    }\
  ]
}

​ Handling Quote Regeneration

When a quote is regenerated (different amount, token, or chain), a new requestId may be generated. Use includeChildRequests=true to find all related requests, including regenerated ones:

curl -X GET "https://api.relay.link/requests/v2?depositAddress=<DEPOSIT_ADDRESS>&includeChildRequests=true"

When a regeneration happens, the original request stays under its original requestId and public status while the actual sweep and fill move under the regenerated request. To follow the handoff directly, read data.supersededByRequestId on the original request — it returns the regenerated requestId that now owns the fill lifecycle.

curl -X GET "https://api.relay.link/requests/v2?id=<ORIGINAL_REQUEST_ID>"
{
  "requests": [\
    {\
      "id": "<ORIGINAL_REQUEST_ID>",\
      "status": "pending",\
      "data": {\
        "supersededByRequestId": "<REGENERATED_REQUEST_ID>"\
      }\
    }\
  ]
}

Use supersededByRequestId when you have the original requestId and want a direct pointer to the request that owns the fill. Use includeChildRequests=true when you want every related request in one response.

​ Request-Level Status

Once you have a requestId, you can use Get Status for detailed status polling:

Request

Response

curl -X GET "https://api.relay.link/intents/status/v3?requestId=<REQUEST_ID>"
{
  "status": "pending",
  "inTxHashes": [\
    "0xabc123..."\
  ],
  "txHashes": [],
  "updatedAt": 1769988962883,
  "originChainId": 8453,
  "destinationChainId": 10
}

​ Reindexing Stuck Deposits

Relay’s background monitor only checks the originally quoted input token. If a user sent a different supported (solver) token, the monitor may not detect it automatically. Use the Deposit Address Reindex endpoint to trigger on-demand re-detection — it checks every solver-depositable currency on the chain and queues a sweep for any non-zero balances.

curl -X POST 'https://api.relay.link/transactions/deposit-address/reindex' \
  -H 'Content-Type: application/json' \
  -d '{
    "chainId": 8453,
    "depositAddress": "0x1ba74e01d46372008260ec971f77eb6032b938a4"
  }'

chainId is the chain the deposit address was originally registered on. Pass targetChainId to run the reindex on a different chain — useful when funds were sent to the right address but on the wrong chain (e.g. the address was registered for Arbitrum but funds landed on Ethereum). This is the chain being reindexed, not the destination chain of the original quote.Pass currency to scope the reindex to a single currency address instead of iterating every depositable currency. Any currency registered with Relay on the target chain is accepted — including currencies outside the standard solver-depositable list (e.g. a HyperCore-registered token when the deposit address was created for HyperEVM).

curl -X POST 'https://api.relay.link/transactions/deposit-address/reindex' \
  -H 'Content-Type: application/json' \
  -d '{
    "chainId": 42161,
    "depositAddress": "0x1ba74e01d46372008260ec971f77eb6032b938a4",
    "targetChainId": 1,
    "currency": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
  }'

The deposit transaction hash cannot be used to look up the status of a deposit address bridge. Always use the deposit address itself or the requestId to track status.

​ Caveats

​ Gas Overhead

Deposit addresses add gas overhead compared to direct calldata execution because Relay must sweep funds from the deposit address:

Method Token Type Gas Overhead
Receiver Native tokens (ETH, MATIC, etc.) ~33,000 gas
Protocol ERC-20 tokens ~70,000 gas

For very small amounts, the gas overhead may make deposit addresses less cost-effective than direct calldata execution.

​ Supported Currencies

Only tokens listed as solver currencies for a given chain can be processed by deposit addresses. The input token must be a solver-depositable currency for the requested route. The destination token can differ and be completed through a destination-side swap — in that case, refundTo is required.Relay treats certain tokens as equivalent within currency groups (e.g., ETH and WETH) — depositing any token in a group triggers the same fill behavior.The table below is loaded live from the chains API. Each chain’s solverCurrencies array is the authoritative source for which tokens are supported.

Chain Solver Currencies
Ethereum ETH, USDC, USDT, WETH, ANIME, APE, DAI, mUSD, PLUME, PYUSD, SIPHER, SYND, USDe, USDG
Base ETH, USDC, USDT, WETH, cbBTC, DEGEN, SOL, SYND
Arbitrum ETH, USDC, USDT, WETH, ANIME, APE
Optimism ETH, USDC, USDT, WETH
BNB USDC, USDT, BNB, SOMI, USDe
Polygon USDC, USDT, USDC.e
Solana USDC, USDT, CASH, PENGU, PYUSD, SOL, USDG
Bitcoin BTC
Abstract ETH, USDC, PENGU
Animechain USDC, ANIME
ApeChain APE, ApeETH
Arbitrum Nova ETH
Avalanche USDC, GUN, USDe
B3 ETH, USDC
Berachain USDC, WETH
Blast ETH, WETH
BOB ETH
Boba Network ETH
Celo USDC
Cronos USDC, CRO, USDC.e
Cyber ETH
Data USDC, WETH
Degen DEGEN
Doma ETH, USDC.e
Eclipse ETH
Ethereal USDe
Flow EVM USDC, FLOW
Gensyn ETH, USDC
Gnosis USDC, xDAI
Gunz GUN
Hemi ETH
HyperEVM USDC, HYPE, USD₮0, USDe
Hyperliquid USDC, USDe
Ink ETH, USDC, USDT0
Katana ETH, USDC, USDT
Lighter ETH (Spot), USDC (Perp)
Linea ETH, USDC, mUSD
Lisk ETH
Manta Pacific ETH
Mantle USDC
MegaETH ETH, USDT, USDm
Metis WETH
Mode ETH
Monad USDC, MON, mUSD
Morph ETH
Mythos ETH, USDC.e
Plasma USD₮0, XPL
Plume USDC, WETH, PLUME, pUSD
Robinhood Chain ETH, USDG
Ronin USDC, RON
Scroll ETH
Sei USDC, USDT0
Shape ETH
Somnia SOMI
Soneium ETH, USDC.e
Sonic USDC
Stable USDT0
Superposition ETH
Superseed ETH
Tempo USDC
TON GRAM
Tron USDT, TRX
Unichain ETH, USDC
World Chain ETH, USDC
ZERO ETH, USDC
Zircuit ETH
zkSync Era ETH
Zora ETH, USDzC

Non-solver tokens and NFTs sent to deposit addresses are not recoverable through normal processes. Always verify the token is a solver currency before depositing.

​ Chain-Specific Notes

​ Other Limitations

Was this page helpful?

YesNo

Fee Sponsorship Gas Top-Up

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.