curl --request GET \
--url https://api-partner.houdiniswap.com/v2/quotes/byChainAddress \
--header 'Authorization: <api-key>'import requests
url = "https://api-partner.houdiniswap.com/v2/quotes/byChainAddress"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api-partner.houdiniswap.com/v2/quotes/byChainAddress', 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-partner.houdiniswap.com/v2/quotes/byChainAddress",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api-partner.houdiniswap.com/v2/quotes/byChainAddress"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api-partner.houdiniswap.com/v2/quotes/byChainAddress")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-partner.houdiniswap.com/v2/quotes/byChainAddress")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"total": 3,
"quotes": [
{
"amountIn": 1,
"amountOut": 24.308952,
"min": 0.041681,
"max": 1617.53705385,
"duration": 4,
"amountOutUsd": 2366.7195667200003,
"quoteId": "6aaa4273aa41ccf7cad03086",
"type": "private",
"rewardsAvailable": true,
"fixed": false
},
{
"amountIn": 1,
"amountOut": 24.50601963,
"min": 0.01250098966168155,
"max": 9007199254740991,
"duration": 21,
"amountOutUsd": 2385.9060711768,
"swap": "se",
"swapName": "StealthEx",
"logoUrl": "https://api.houdiniswap.com/assets/logos/stealthex.png",
"quoteId": "6aaa4272aa41ccf7cad03035",
"type": "standard",
"rewardsAvailable": false,
"rateId": null
},
{
"swap": "cf",
"quoteId": "6aaa4272aa41ccf7cad0303c",
"duration": 2.71,
"gas": 0,
"amountIn": 1,
"amountOut": 24.690801441,
"amountOutUsd": 2402.4149802093,
"netAmountOut": 24.690801441,
"swapName": "ChainFlip",
"type": "dex",
"logoUrl": "https://api.houdiniswap.com/assets/logos/chainflip.png",
"markupSupported": true,
"apiMarkupValue": 10,
"markupType": "bp",
"restrictedCountries": [],
"rewardsAvailable": false,
"min": 0,
"max": 9007199254740991,
"requiresApproval": false,
"depositAddressSupported": true
}
]
}{
"message": "<string>",
"code": "<string>",
"requestId": "<string>"
}{}{
"message": "<string>",
"code": "<string>",
"requestId": "<string>"
}{
"message": "<string>",
"code": "<string>",
"fields": {},
"requestId": "<string>"
}{
"message": "<string>",
"code": "<string>",
"requestId": "<string>"
}{
"message": "<string>",
"code": "<string>",
"requestId": "<string>"
}Get quotes by token address
Get quotes using contract addresses instead of token ids. Returns private, standard and DEX routes — narrow the set with types.
- send
fromChain+fromTokenAddressinstead offrom - send
toChain+toTokenAddressinstead ofto
Everything else works the same as Get quotes.
curl --request GET \
--url https://api-partner.houdiniswap.com/v2/quotes/byChainAddress \
--header 'Authorization: <api-key>'import requests
url = "https://api-partner.houdiniswap.com/v2/quotes/byChainAddress"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api-partner.houdiniswap.com/v2/quotes/byChainAddress', 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-partner.houdiniswap.com/v2/quotes/byChainAddress",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api-partner.houdiniswap.com/v2/quotes/byChainAddress"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api-partner.houdiniswap.com/v2/quotes/byChainAddress")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-partner.houdiniswap.com/v2/quotes/byChainAddress")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"total": 3,
"quotes": [
{
"amountIn": 1,
"amountOut": 24.308952,
"min": 0.041681,
"max": 1617.53705385,
"duration": 4,
"amountOutUsd": 2366.7195667200003,
"quoteId": "6aaa4273aa41ccf7cad03086",
"type": "private",
"rewardsAvailable": true,
"fixed": false
},
{
"amountIn": 1,
"amountOut": 24.50601963,
"min": 0.01250098966168155,
"max": 9007199254740991,
"duration": 21,
"amountOutUsd": 2385.9060711768,
"swap": "se",
"swapName": "StealthEx",
"logoUrl": "https://api.houdiniswap.com/assets/logos/stealthex.png",
"quoteId": "6aaa4272aa41ccf7cad03035",
"type": "standard",
"rewardsAvailable": false,
"rateId": null
},
{
"swap": "cf",
"quoteId": "6aaa4272aa41ccf7cad0303c",
"duration": 2.71,
"gas": 0,
"amountIn": 1,
"amountOut": 24.690801441,
"amountOutUsd": 2402.4149802093,
"netAmountOut": 24.690801441,
"swapName": "ChainFlip",
"type": "dex",
"logoUrl": "https://api.houdiniswap.com/assets/logos/chainflip.png",
"markupSupported": true,
"apiMarkupValue": 10,
"markupType": "bp",
"restrictedCountries": [],
"rewardsAvailable": false,
"min": 0,
"max": 9007199254740991,
"requiresApproval": false,
"depositAddressSupported": true
}
]
}{
"message": "<string>",
"code": "<string>",
"requestId": "<string>"
}{}{
"message": "<string>",
"code": "<string>",
"requestId": "<string>"
}{
"message": "<string>",
"code": "<string>",
"fields": {},
"requestId": "<string>"
}{
"message": "<string>",
"code": "<string>",
"requestId": "<string>"
}{
"message": "<string>",
"code": "<string>",
"requestId": "<string>"
}Authorizations
Send Authorization: <ApiKey>:<ApiSecret> — joined by a colon, raw. No Bearer prefix, no base64.
Query Parameters
Amount of the from token to swap, e.g. 1.5 BTC or 250.75 USDT — not base units / wei like 100000000000000.
0 <= x <= 1.7976931348623157e+308Source chain identifier — shortName from Get chains (e.g. "ethereum", "kava_2222-10", "AssetHub") or numeric EVM chainId (e.g. "1", "42161").
^[A-Za-z0-9][A-Za-z0-9_.\-]{0,49}$Destination chain identifier — shortName from Get chains (e.g. "ethereum", "kava_2222-10", "AssetHub") or numeric EVM chainId (e.g. "1", "42161").
^[A-Za-z0-9][A-Za-z0-9_.\-]{0,49}$Contract address of the token you are swapping from. Omit for the chain's native coin.
Contract address of the token you are swapping to. Omit for the chain's native coin.
Slippage percentage. Only used for DEX swaps.
0 <= x <= 100Markup for this request, as a percentage — 0.5 means 0.5%.
- range 0–4; overrides your account default for this trade
- send
0for no markup, or omit the field to use your account default - providers that cannot apply it are excluded from the results
- not supported on DEX routes. Leave
typesunset and DEX quotes are simply left out; ask fortypes=dextogether with a markup and the request is rejected
0 <= x <= 4Use Monero (XMR) as the bridge token on a private swap.
A private route hops through an intermediary token so the deposit and the payout are not linkable on-chain. true pins that hop to XMR; leave it unset and the hop is picked from a rotating set of other tokens. Ignored by standard and DEX quotes, which are single-leg.
Request a fixed-rate quote. Only partners that support fixed rate will be returned. On this endpoint fixed rate is limited to standard CEX quotes — use Get quotes for private fixed-rate quotes or amountType=receive.
Maximum price deviation percentage when rotating wallets. Only used if rotatePayoutWallets is true. Default 5
0 <= x <= 100Number of recent orders to check for path rotation. Only used if rotatePayoutWallets is true. Default 10
1 <= x <= 100Rotate the payout path for better privacy. Only used for private swaps (types=private) — standard and DEX are single-leg and ignore it.
When strict rotation exhausts every rotated route, fall back to a valid non-rotated route instead of failing. Default false. Requires rotatePayoutWallets — a no-op on its own.
Types of quotes to return; if omitted, all types are used
private, standard, dex Only quote these providers. Omit to use all of them.
- values are
shortNamefrom Get swap providers - applies to every quote type — private, standard and DEX
ch, cl, cn, ff, le, se, ss, sx, sxby, sxhu, sxku, sxmx, sz, sp, eb, nx, cc, qx, sg, tc, hu, nic, dl, ad, wh, cf, un, jp, mn, rd, ps, cs, kd, ct, zx, wc, su, tt, ni, sd, bg, ab, pt, ax, rl Only use these providers for the in-leg of a private (2-hop) route. Ignored by standard and DEX quotes, which are single-hop.
Never use these providers for the in-leg of a private (2-hop) route. Does not affect the out-leg. Ignored by standard and DEX quotes.
Only use these providers for the out-leg of a private (2-hop) route. Ignored by standard and DEX quotes, which are single-hop.
Never use these providers for the out-leg of a private (2-hop) route. Does not affect the in-leg. Ignored by standard and DEX quotes.
Wallet that funds the swap, on the source chain. Used by DEX quotes only — private and standard swaps ignore it.
Wallet that receives the payout.
- when it differs from
senderAddress, DEX routes that cannot pay out to a different wallet are returned withfiltered: trueandfilteredReason: different_recipient— still listed, but not usable - also used for payout wallet rotation
Sort the quotes by the given field (default: amountOut)
amountOut, amountOutUsd, amountIn, duration Sort direction for quotes (default: desc)
asc, desc