curl --request GET \
--url https://api-partner.houdiniswap.com/v2/quotes/private-send \
--header 'Authorization: <api-key>'import requests
url = "https://api-partner.houdiniswap.com/v2/quotes/private-send"
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/private-send', 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/private-send",
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/private-send"
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/private-send")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-partner.houdiniswap.com/v2/quotes/private-send")
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": 0.1,
"amountOut": 0.09845812,
"min": 0.0012053668334948734,
"max": 111.14801288872027,
"duration": 44,
"amountOutUsd": 8232.872062741199,
"quoteId": "6abcd9544740df03928bb7ee",
"type": "private",
"rewardsAvailable": true,
"fixed": false
},
{
"amountIn": 0.1,
"amountOut": 0.09845029,
"min": 0.00119657,
"max": 12.158054581842057,
"duration": 37,
"amountOutUsd": 8232.2173337229,
"quoteId": "6abcd9544740df03928bb7ef",
"type": "private",
"rewardsAvailable": true,
"fixed": false
},
{
"amountIn": 0.1,
"amountOut": 0.09842404,
"min": 0.001205773828948278,
"max": 111.18554232344803,
"duration": 35,
"amountOutUsd": 8230.0223609604,
"quoteId": "6abcd9544740df03928bb7f8",
"type": "private",
"rewardsAvailable": true,
"fixed": false
}
]
}{
"message": "<string>",
"code": "<string>",
"requestId": "<string>"
}{}{
"message": "<string>",
"code": "<string>",
"requestId": "<string>"
}{
"message": "<string>",
"code": "<string>",
"requestId": "<string>"
}{
"message": "<string>",
"code": "<string>",
"requestId": "<string>"
}{
"message": "<string>",
"code": "<string>",
"requestId": "<string>"
}Get private send quote
Quote a private send: send funds to another wallet via a private (two-hop) route. Same token in and out.
Returns receive amount, fees, ETA, and min/max. Pass a quoteId from the response to Create private send order.
Quotes are valid for about a minute — create the order before they expire.
Look up token ids with Get tokens (hasSelfPrivate=true).
See the Private send guide.
This endpoint only supports private same-token routes. If you want to keep one integration for every exchange type, use Get quotes instead with the same token on from and to and types=private.
curl --request GET \
--url https://api-partner.houdiniswap.com/v2/quotes/private-send \
--header 'Authorization: <api-key>'import requests
url = "https://api-partner.houdiniswap.com/v2/quotes/private-send"
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/private-send', 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/private-send",
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/private-send"
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/private-send")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-partner.houdiniswap.com/v2/quotes/private-send")
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": 0.1,
"amountOut": 0.09845812,
"min": 0.0012053668334948734,
"max": 111.14801288872027,
"duration": 44,
"amountOutUsd": 8232.872062741199,
"quoteId": "6abcd9544740df03928bb7ee",
"type": "private",
"rewardsAvailable": true,
"fixed": false
},
{
"amountIn": 0.1,
"amountOut": 0.09845029,
"min": 0.00119657,
"max": 12.158054581842057,
"duration": 37,
"amountOutUsd": 8232.2173337229,
"quoteId": "6abcd9544740df03928bb7ef",
"type": "private",
"rewardsAvailable": true,
"fixed": false
},
{
"amountIn": 0.1,
"amountOut": 0.09842404,
"min": 0.001205773828948278,
"max": 111.18554232344803,
"duration": 35,
"amountOutUsd": 8230.0223609604,
"quoteId": "6abcd9544740df03928bb7f8",
"type": "private",
"rewardsAvailable": true,
"fixed": false
}
]
}{
"message": "<string>",
"code": "<string>",
"requestId": "<string>"
}{}{
"message": "<string>",
"code": "<string>",
"requestId": "<string>"
}{
"message": "<string>",
"code": "<string>",
"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+308Token to send. Use an id from Get tokens with hasSelfPrivate=true — not a symbol.
Markup 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. Available for standard and private CEX quotes; not supported for DEX.
Where funds are returned if a swap cannot complete. Optional here — quotes are never filtered by it.
- use a wallet the user controls, not an exchange deposit address
- must be on the source chain — the refund comes back as the token you deposited
- a route that will need one comes back with
requiresRefundAddress: true - supply it at Create exchange, where it is required for fixed-rate quotes and for those routes
200Maximum 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.
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.