curl --request GET \
--url https://api-partner.houdiniswap.com/v2/orders/{houdiniId} \
--header 'Authorization: <api-key>'import requests
url = "https://api-partner.houdiniswap.com/v2/orders/{houdiniId}"
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/orders/{houdiniId}', 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/orders/{houdiniId}",
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/orders/{houdiniId}"
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/orders/{houdiniId}")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-partner.houdiniswap.com/v2/orders/{houdiniId}")
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{
"created": "2026-09-28T02:44:44.178Z",
"houdiniId": "ao5tBEaAxkjJJdZnZeuXo6",
"receiverAddress": "8jZnXYnZB1MJQG6zBXyouzcycsaPTrZtPXPHDNifjYaC",
"status": 0,
"anonymous": false,
"expires": "2026-09-28T03:14:44.178Z",
"in": "se",
"inAmount": 0.05,
"inSymbol": "ETH",
"inStatus": 0,
"inCreated": "2026-09-28T02:44:44.178Z",
"outAmount": 1.09202632,
"outSymbol": "SOL",
"eta": 8,
"inAmountUsd": 132.6355,
"isDex": false,
"swapName": "StealthEx",
"depositAddress": "0x0000000000000000000000000000000000000000",
"id": "6ab9d49ca4f8db2c6ce6dfb2",
"hashUrl": "",
"statusLabel": "WAITING",
"inStatusLabel": "NEW",
"displayStatus": "WAITING_FOR_DEPOSIT"
}{
"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 order details
Returns order details for a given Houdini order ID created in the last 48 hours.
Past that window the order drops out of the API and returns 404, the same as an id that never existed — store whatever you need to keep before then.
curl --request GET \
--url https://api-partner.houdiniswap.com/v2/orders/{houdiniId} \
--header 'Authorization: <api-key>'import requests
url = "https://api-partner.houdiniswap.com/v2/orders/{houdiniId}"
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/orders/{houdiniId}', 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/orders/{houdiniId}",
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/orders/{houdiniId}"
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/orders/{houdiniId}")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-partner.houdiniswap.com/v2/orders/{houdiniId}")
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{
"created": "2026-09-28T02:44:44.178Z",
"houdiniId": "ao5tBEaAxkjJJdZnZeuXo6",
"receiverAddress": "8jZnXYnZB1MJQG6zBXyouzcycsaPTrZtPXPHDNifjYaC",
"status": 0,
"anonymous": false,
"expires": "2026-09-28T03:14:44.178Z",
"in": "se",
"inAmount": 0.05,
"inSymbol": "ETH",
"inStatus": 0,
"inCreated": "2026-09-28T02:44:44.178Z",
"outAmount": 1.09202632,
"outSymbol": "SOL",
"eta": 8,
"inAmountUsd": 132.6355,
"isDex": false,
"swapName": "StealthEx",
"depositAddress": "0x0000000000000000000000000000000000000000",
"id": "6ab9d49ca4f8db2c6ce6dfb2",
"hashUrl": "",
"statusLabel": "WAITING",
"inStatusLabel": "NEW",
"displayStatus": "WAITING_FOR_DEPOSIT"
}{
"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.
Path Parameters
64Response
Success
Public order id. Use it with Get order details.
Deposit deadline — send the funds by this time or the order expires. Not a rate lock.
Human-readable state for your UI, derived from status and the leg statuses. Prefer this over status.
WAITING_FOR_DEPOSIT, DEPOSIT_DETECTED, EXCHANGE_IN_PROGRESS, SENDING_TO_INTERMEDIARY, REACHED_INTERMEDIARY, INITIATING_SECOND_EXCHANGE, SECOND_EXCHANGE_IN_PROGRESS, SENDING_TO_RECEIVER, SWAP_COMPLETED, EXPIRED, FAILED, REFUNDED, DELETED Numeric order state. For anything user-facing prefer displayStatus.
-2initializing-1created0waiting for your deposit1confirming your deposit2exchanging3anonymizing — private swaps only4finished5expired6failed7refunded8deleted
-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8 ETA time, depending on swap
Amount to deposit, in the input token.
Symbol of the input token, e.g. BTC.
Amount you receive, in the output token.
Symbol of the output token, e.g. ETH.
USD value of the input amount at order creation time.
outAmount valued in USD.
Token you sent.
Show child attributes
Show child attributes
Token you received.
Show child attributes
Show child attributes
Wallet the payout is sent to.
True when this order took the private two-leg route.
True when the order executed on a DEX route.
True when the order failed but your deposit had already arrived — contact support to recover the funds.
Progress of the incoming leg — your deposit reaching the provider. For reference and debugging; drive your UI from displayStatus instead.
0created1waiting for the deposit2deposit seen, waiting for confirmations3exchanging4sending funds on5finished6failed7refunded8on hold for a compliance check9expired — no deposit arrived in time10finished through a fallback payout
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 When the incoming leg was created.
True when the order settled at a locked rate.
Refund address recorded for this order.
Memo/tag that must be sent with the deposit, on chains that use one (XRP, TON, Stellar, …).
Show it to your user next to depositAddress — a deposit sent without it may not be credited.
True when the deposit can no longer be refunded.
True when the route that executed is not the one that was quoted, because the quoted route failed and a fallback was used. The amounts may differ from the quote — compare inAmount against quotedInAmount and outAmount against quotedOutAmount.
The deposit amount originally quoted, present only when the order was rerouted. inAmount is what the fallback route actually asks for; on an exact-out order this is the side that moves.
The payout originally quoted, present only when the order was rerouted. outAmount is what the fallback route will actually pay; on an exact-in order this is the side that moves.
Hash of the transaction that returned your funds. Absent unless the order refunded.
Chain the refund was returned on, e.g. "bsc". Refunds are returned on the input chain.
Amount returned to you, after the provider's refund fee. Absent when the exchange did not report one.
Extra data from the provider. The shape depends on the route.
Memo/tag required when receiving funds for assets that use one
Name of the exchange handling the deposit leg. Omitted on private orders, which withhold the provider, and on multiswap orders that have not yet been assigned one.
Multi ID. Present only on orders created as part of a batch.
Status of the payout leg. Present only on private orders — public orders settle in a single leg and never carry one. For reference and debugging; drive your UI from displayStatus instead.
0created1waiting for the deposit2deposit seen, waiting for confirmations3exchanging4sending funds on5finished6failed7refunded8on hold for a compliance check9expired — no deposit arrived in time10finished through a fallback payout
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 Payout transaction hash of the second leg. Present only on private orders, and only once that leg has paid out. Public orders report their payout hash on inTransactionOutHash instead.
When the order reached a final state. Stamped only when an order finishes — orders that expire, fail or refund never receive one.
The deposit address where the user must send funds. Omitted on multiswap orders whose per-order setup did not complete.