curl --request POST \
--url https://api.delora.build/v1/advanced/routes \
--header 'Content-Type: application/json' \
--data '
{
"senderAddress": "0x1111111111111111111111111111111111111111",
"receiverAddress": "0x2222222222222222222222222222222222222222",
"originChainId": 8453,
"destinationChainId": 42161,
"amount": "1000000",
"originCurrency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"destinationCurrency": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"includeBridges": "RELAY",
"maxRoutes": 2
}
'import requests
url = "https://api.delora.build/v1/advanced/routes"
payload = {
"senderAddress": "0x1111111111111111111111111111111111111111",
"receiverAddress": "0x2222222222222222222222222222222222222222",
"originChainId": 8453,
"destinationChainId": 42161,
"amount": "1000000",
"originCurrency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"destinationCurrency": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"includeBridges": "RELAY",
"maxRoutes": 2
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
senderAddress: '0x1111111111111111111111111111111111111111',
receiverAddress: '0x2222222222222222222222222222222222222222',
originChainId: 8453,
destinationChainId: 42161,
amount: '1000000',
originCurrency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
destinationCurrency: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
includeBridges: 'RELAY',
maxRoutes: 2
})
};
fetch('https://api.delora.build/v1/advanced/routes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.delora.build/v1/advanced/routes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'senderAddress' => '0x1111111111111111111111111111111111111111',
'receiverAddress' => '0x2222222222222222222222222222222222222222',
'originChainId' => 8453,
'destinationChainId' => 42161,
'amount' => '1000000',
'originCurrency' => '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
'destinationCurrency' => '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
'includeBridges' => 'RELAY',
'maxRoutes' => 2
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.delora.build/v1/advanced/routes"
payload := strings.NewReader("{\n \"senderAddress\": \"0x1111111111111111111111111111111111111111\",\n \"receiverAddress\": \"0x2222222222222222222222222222222222222222\",\n \"originChainId\": 8453,\n \"destinationChainId\": 42161,\n \"amount\": \"1000000\",\n \"originCurrency\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"destinationCurrency\": \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n \"includeBridges\": \"RELAY\",\n \"maxRoutes\": 2\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.delora.build/v1/advanced/routes")
.header("Content-Type", "application/json")
.body("{\n \"senderAddress\": \"0x1111111111111111111111111111111111111111\",\n \"receiverAddress\": \"0x2222222222222222222222222222222222222222\",\n \"originChainId\": 8453,\n \"destinationChainId\": 42161,\n \"amount\": \"1000000\",\n \"originCurrency\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"destinationCurrency\": \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n \"includeBridges\": \"RELAY\",\n \"maxRoutes\": 2\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.delora.build/v1/advanced/routes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"senderAddress\": \"0x1111111111111111111111111111111111111111\",\n \"receiverAddress\": \"0x2222222222222222222222222222222222222222\",\n \"originChainId\": 8453,\n \"destinationChainId\": 42161,\n \"amount\": \"1000000\",\n \"originCurrency\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"destinationCurrency\": \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n \"includeBridges\": \"RELAY\",\n \"maxRoutes\": 2\n}"
response = http.request(request)
puts response.read_body{
"routes": [
{
"id": "<string>",
"inputAmount": "<string>",
"outputAmount": "<string>",
"minOutputAmount": "<string>",
"fees": {
"total": {
"amount": "2679",
"currencySymbol": "USDC",
"currencyAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"chainId": 8453,
"decimals": 6
},
"breakdown": [
{
"amount": "2679",
"currencySymbol": "USDC",
"currencyAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"chainId": 8453,
"type": "gas",
"decimals": 6,
"amountUsd": "0.01"
}
],
"totalUsd": "0.01"
},
"adapter": "RELAY",
"isMultistep": true,
"steps": [
{
"id": "<string>",
"routeId": "<string>",
"tool": "RELAY",
"action": {
"fromChainId": 123,
"toChainId": 123,
"fromToken": {
"address": "<string>",
"symbol": "<string>",
"decimals": 123,
"chainId": 123
},
"toToken": {
"address": "<string>",
"symbol": "<string>",
"decimals": 123,
"chainId": 123
},
"fromAmount": "<string>",
"slippage": 123,
"fromAddress": "<string>",
"toAddress": "<string>"
},
"estimate": {
"fromAmount": "<string>",
"toAmount": "<string>",
"toAmountMin": "<string>",
"fees": {
"total": {
"amount": "2679",
"currencySymbol": "USDC",
"currencyAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"chainId": 8453,
"decimals": 6
},
"breakdown": [
{
"amount": "2679",
"currencySymbol": "USDC",
"currencyAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"chainId": 8453,
"type": "gas",
"decimals": 6,
"amountUsd": "0.01"
}
],
"totalUsd": "0.01"
},
"quoteFromAmount": "<string>",
"estimatedTimeSec": 123,
"approvalAddress": "<string>",
"simulatedToAmount": "<string>",
"simulation": {
"source": "TENDERLY",
"executionStatus": "SUCCESS",
"outputValidation": "VERIFIED",
"advertisedOutputAmount": "997321",
"latencyMs": 712,
"providerResults": [
{
"source": "TENDERLY",
"executionStatus": "SUCCESS",
"outputValidation": "VERIFIED",
"latencyMs": 312,
"simulatedOutputAmount": "996100",
"deviation": {
"absolute": "-1200",
"bps": -12,
"percent": "-0.12%"
},
"gasUsed": "142331",
"reason": "Exceeded 700ms"
}
],
"simulatedOutputAmount": "996100",
"deviation": {
"absolute": "-1200",
"bps": -12,
"percent": "-0.12%"
},
"gasUsed": "142331",
"reason": "Simulation exceeded budget"
}
},
"execution": {
"applyFee": true,
"requiresPreviousStepAmount": true,
"quoteRequest": {},
"routeRequest": {}
},
"integrator": "<string>",
"fee": 123,
"warnings": [
{
"code": "SOLANA_INSUFFICIENT_BALANCE",
"message": "Solana simulation reported insufficient balance."
}
],
"bridgeScan": {},
"transactionRequest": {
"to": "<string>",
"value": "<string>",
"data": "<string>",
"gas": {
"gasPrice": "0x3b9aca00",
"maxFeePerGas": "0x59682f00",
"maxPriorityFeePerGas": "0x3b9aca00"
},
"transactionSize": {
"raw": 123,
"encoded": 123
}
}
}
],
"estimatedTimeSec": 123,
"warnings": [
{
"code": "SOLANA_INSUFFICIENT_BALANCE",
"message": "Solana simulation reported insufficient balance."
}
],
"simulation": {
"source": "TENDERLY",
"executionStatus": "SUCCESS",
"outputValidation": "VERIFIED",
"advertisedOutputAmount": "997321",
"latencyMs": 712,
"providerResults": [
{
"source": "TENDERLY",
"executionStatus": "SUCCESS",
"outputValidation": "VERIFIED",
"latencyMs": 312,
"simulatedOutputAmount": "996100",
"deviation": {
"absolute": "-1200",
"bps": -12,
"percent": "-0.12%"
},
"gasUsed": "142331",
"reason": "Exceeded 700ms"
}
],
"simulatedOutputAmount": "996100",
"deviation": {
"absolute": "-1200",
"bps": -12,
"percent": "-0.12%"
},
"gasUsed": "142331",
"reason": "Simulation exceeded budget"
}
}
]
}{
"statusCode": 400,
"code": "VALIDATION_ERROR",
"message": "Invalid request parameters",
"timestamp": "2026-05-13T18:00:00.000Z",
"details": {
"message": [
"One or more request parameters are invalid."
]
},
"path": "/v1/..."
}{
"statusCode": 400,
"code": "VALIDATION_ERROR",
"message": "Invalid request parameters",
"timestamp": "2026-05-13T18:00:00.000Z",
"details": {
"message": [
"One or more request parameters are invalid."
]
},
"path": "/v1/..."
}{
"statusCode": 429,
"code": "RATE_LIMIT",
"message": "Rate limit exceeded. Please try again later.",
"details": {
"message": "Rate limit exceeded. Please try again later."
},
"timestamp": "2026-05-15T16:58:45.603Z",
"path": "/v1/advanced/routes"
}Discover advanced routes
Returns ranked route plans with explicit steps. These routes are estimates; call /v1/advanced/stepTransaction for each selected step to get live executable transaction data.
curl --request POST \
--url https://api.delora.build/v1/advanced/routes \
--header 'Content-Type: application/json' \
--data '
{
"senderAddress": "0x1111111111111111111111111111111111111111",
"receiverAddress": "0x2222222222222222222222222222222222222222",
"originChainId": 8453,
"destinationChainId": 42161,
"amount": "1000000",
"originCurrency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"destinationCurrency": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"includeBridges": "RELAY",
"maxRoutes": 2
}
'import requests
url = "https://api.delora.build/v1/advanced/routes"
payload = {
"senderAddress": "0x1111111111111111111111111111111111111111",
"receiverAddress": "0x2222222222222222222222222222222222222222",
"originChainId": 8453,
"destinationChainId": 42161,
"amount": "1000000",
"originCurrency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"destinationCurrency": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"includeBridges": "RELAY",
"maxRoutes": 2
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
senderAddress: '0x1111111111111111111111111111111111111111',
receiverAddress: '0x2222222222222222222222222222222222222222',
originChainId: 8453,
destinationChainId: 42161,
amount: '1000000',
originCurrency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
destinationCurrency: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
includeBridges: 'RELAY',
maxRoutes: 2
})
};
fetch('https://api.delora.build/v1/advanced/routes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.delora.build/v1/advanced/routes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'senderAddress' => '0x1111111111111111111111111111111111111111',
'receiverAddress' => '0x2222222222222222222222222222222222222222',
'originChainId' => 8453,
'destinationChainId' => 42161,
'amount' => '1000000',
'originCurrency' => '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
'destinationCurrency' => '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
'includeBridges' => 'RELAY',
'maxRoutes' => 2
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.delora.build/v1/advanced/routes"
payload := strings.NewReader("{\n \"senderAddress\": \"0x1111111111111111111111111111111111111111\",\n \"receiverAddress\": \"0x2222222222222222222222222222222222222222\",\n \"originChainId\": 8453,\n \"destinationChainId\": 42161,\n \"amount\": \"1000000\",\n \"originCurrency\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"destinationCurrency\": \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n \"includeBridges\": \"RELAY\",\n \"maxRoutes\": 2\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.delora.build/v1/advanced/routes")
.header("Content-Type", "application/json")
.body("{\n \"senderAddress\": \"0x1111111111111111111111111111111111111111\",\n \"receiverAddress\": \"0x2222222222222222222222222222222222222222\",\n \"originChainId\": 8453,\n \"destinationChainId\": 42161,\n \"amount\": \"1000000\",\n \"originCurrency\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"destinationCurrency\": \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n \"includeBridges\": \"RELAY\",\n \"maxRoutes\": 2\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.delora.build/v1/advanced/routes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"senderAddress\": \"0x1111111111111111111111111111111111111111\",\n \"receiverAddress\": \"0x2222222222222222222222222222222222222222\",\n \"originChainId\": 8453,\n \"destinationChainId\": 42161,\n \"amount\": \"1000000\",\n \"originCurrency\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"destinationCurrency\": \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n \"includeBridges\": \"RELAY\",\n \"maxRoutes\": 2\n}"
response = http.request(request)
puts response.read_body{
"routes": [
{
"id": "<string>",
"inputAmount": "<string>",
"outputAmount": "<string>",
"minOutputAmount": "<string>",
"fees": {
"total": {
"amount": "2679",
"currencySymbol": "USDC",
"currencyAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"chainId": 8453,
"decimals": 6
},
"breakdown": [
{
"amount": "2679",
"currencySymbol": "USDC",
"currencyAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"chainId": 8453,
"type": "gas",
"decimals": 6,
"amountUsd": "0.01"
}
],
"totalUsd": "0.01"
},
"adapter": "RELAY",
"isMultistep": true,
"steps": [
{
"id": "<string>",
"routeId": "<string>",
"tool": "RELAY",
"action": {
"fromChainId": 123,
"toChainId": 123,
"fromToken": {
"address": "<string>",
"symbol": "<string>",
"decimals": 123,
"chainId": 123
},
"toToken": {
"address": "<string>",
"symbol": "<string>",
"decimals": 123,
"chainId": 123
},
"fromAmount": "<string>",
"slippage": 123,
"fromAddress": "<string>",
"toAddress": "<string>"
},
"estimate": {
"fromAmount": "<string>",
"toAmount": "<string>",
"toAmountMin": "<string>",
"fees": {
"total": {
"amount": "2679",
"currencySymbol": "USDC",
"currencyAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"chainId": 8453,
"decimals": 6
},
"breakdown": [
{
"amount": "2679",
"currencySymbol": "USDC",
"currencyAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"chainId": 8453,
"type": "gas",
"decimals": 6,
"amountUsd": "0.01"
}
],
"totalUsd": "0.01"
},
"quoteFromAmount": "<string>",
"estimatedTimeSec": 123,
"approvalAddress": "<string>",
"simulatedToAmount": "<string>",
"simulation": {
"source": "TENDERLY",
"executionStatus": "SUCCESS",
"outputValidation": "VERIFIED",
"advertisedOutputAmount": "997321",
"latencyMs": 712,
"providerResults": [
{
"source": "TENDERLY",
"executionStatus": "SUCCESS",
"outputValidation": "VERIFIED",
"latencyMs": 312,
"simulatedOutputAmount": "996100",
"deviation": {
"absolute": "-1200",
"bps": -12,
"percent": "-0.12%"
},
"gasUsed": "142331",
"reason": "Exceeded 700ms"
}
],
"simulatedOutputAmount": "996100",
"deviation": {
"absolute": "-1200",
"bps": -12,
"percent": "-0.12%"
},
"gasUsed": "142331",
"reason": "Simulation exceeded budget"
}
},
"execution": {
"applyFee": true,
"requiresPreviousStepAmount": true,
"quoteRequest": {},
"routeRequest": {}
},
"integrator": "<string>",
"fee": 123,
"warnings": [
{
"code": "SOLANA_INSUFFICIENT_BALANCE",
"message": "Solana simulation reported insufficient balance."
}
],
"bridgeScan": {},
"transactionRequest": {
"to": "<string>",
"value": "<string>",
"data": "<string>",
"gas": {
"gasPrice": "0x3b9aca00",
"maxFeePerGas": "0x59682f00",
"maxPriorityFeePerGas": "0x3b9aca00"
},
"transactionSize": {
"raw": 123,
"encoded": 123
}
}
}
],
"estimatedTimeSec": 123,
"warnings": [
{
"code": "SOLANA_INSUFFICIENT_BALANCE",
"message": "Solana simulation reported insufficient balance."
}
],
"simulation": {
"source": "TENDERLY",
"executionStatus": "SUCCESS",
"outputValidation": "VERIFIED",
"advertisedOutputAmount": "997321",
"latencyMs": 712,
"providerResults": [
{
"source": "TENDERLY",
"executionStatus": "SUCCESS",
"outputValidation": "VERIFIED",
"latencyMs": 312,
"simulatedOutputAmount": "996100",
"deviation": {
"absolute": "-1200",
"bps": -12,
"percent": "-0.12%"
},
"gasUsed": "142331",
"reason": "Exceeded 700ms"
}
],
"simulatedOutputAmount": "996100",
"deviation": {
"absolute": "-1200",
"bps": -12,
"percent": "-0.12%"
},
"gasUsed": "142331",
"reason": "Simulation exceeded budget"
}
}
]
}{
"statusCode": 400,
"code": "VALIDATION_ERROR",
"message": "Invalid request parameters",
"timestamp": "2026-05-13T18:00:00.000Z",
"details": {
"message": [
"One or more request parameters are invalid."
]
},
"path": "/v1/..."
}{
"statusCode": 400,
"code": "VALIDATION_ERROR",
"message": "Invalid request parameters",
"timestamp": "2026-05-13T18:00:00.000Z",
"details": {
"message": [
"One or more request parameters are invalid."
]
},
"path": "/v1/..."
}{
"statusCode": 429,
"code": "RATE_LIMIT",
"message": "Rate limit exceeded. Please try again later.",
"details": {
"message": "Rate limit exceeded. Please try again later."
},
"timestamp": "2026-05-15T16:58:45.603Z",
"path": "/v1/advanced/routes"
}/v1/quotes.Headers
Optional API key for higher rate limits and fee rules.
Body
Sender wallet address on the origin chain.
"0x1111111111111111111111111111111111111111"
Origin chain ID.
8453
Destination chain ID.
42161
Exact input amount in token base units as a positive integer string, before Delora and integrator fees.
"1000000"
Origin token address, or native asset marker supported by the backend.
"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
Destination token address, or native asset marker supported by the backend.
"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"
Receiver wallet address. Defaults to senderAddress for same chain-type routes (EVM -> EVM or SVM -> SVM) and is required when crossing chain types (EVM -> SVM or SVM -> EVM).
"0x2222222222222222222222222222222222222222"
Integrator identifier used for fee attribution. Required when fee is provided.
"partner-app"
Optional integrator fee fraction taken from the input amount. 0.01 means 1%. Must be between 0 and 0.1 inclusive and can be provided only with integrator.
0 <= x <= 0.10.01
Optional slippage fraction. 0.005 means 0.5%.
0 <= x <= 10.005
Comma-separated bridge adapter keys from /v1/tools to include. Only bridge-capable or multi-capability adapters are valid.
"RELAY,ACROSS"
Comma-separated exchange adapter keys from /v1/tools to include. Only exchange-capable or multi-capability adapters are valid.
"OPENOCEAN,OKX"
Comma-separated bridge adapter keys from /v1/tools to exclude. Only bridge-capable or multi-capability adapters are valid.
"MAYAN_FAST_MCTP"
Comma-separated exchange adapter keys from /v1/tools to exclude. Only exchange-capable or multi-capability adapters are valid.
"OKX"
Maximum number of ranked advanced routes to return.
x >= 12
Response
Ranked advanced route plans.
Ranked route plans. Each route contains one or more estimated steps.
Show child attributes
Show child attributes

