curl --request GET \
--url https://api-partner.houdiniswap.com/v2/tokens/{id} \
--header 'Authorization: <api-key>'import requests
url = "https://api-partner.houdiniswap.com/v2/tokens/{id}"
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/tokens/{id}', 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/tokens/{id}",
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/tokens/{id}"
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/tokens/{id}")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-partner.houdiniswap.com/v2/tokens/{id}")
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{
"address": null,
"chain": "solana",
"decimals": 9,
"symbol": "SOL",
"name": "Solana",
"created": "2024-07-06T21:29:34.822Z",
"modified": "2026-09-16T07:17:14.429Z",
"chainData": {
"created": "2024-07-06T21:02:11.673Z",
"modified": "2026-09-14T10:01:00.292Z",
"name": "Solana",
"shortName": "solana",
"addressValidation": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
"tokenAddressValidation": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
"memoNeeded": false,
"explorerUrl": "https://solscan.io/tx/{txHash}",
"addressUrl": "https://solscan.io/account/{address}",
"priority": 1,
"kind": "sol",
"enabled": true,
"shortNameV1": "SOL",
"id": "6689b0d3c52f263938c4484e",
"icon": "https://api.houdiniswap.com/assets/chains/solana-n1gfe3.png"
},
"description": "Solana is a highly functional open source project that banks on blockchain technology’s permissionless nature to provide decentralized finance (DeFi) solutions. It is a layer 1 network that offers fast speeds and affordable costs. While the idea and initial work on the project began in 2017, Solana was officially launched in March 2020 by the Solana Foundation with headquarters in Geneva, Switzerland.",
"mainnet": true,
"enabled": true,
"unverified": false,
"hasDex": true,
"hasCex": true,
"hasBundler": true,
"hasSelfPrivate": true,
"cexTokenId": "SOL",
"rank": 7,
"cgId": "solana",
"marketCapChange24h": -3.76076,
"circulatingSupply": 587064779.4352292,
"price": 97.3,
"marketCap": 56980421616,
"volume": 3952383111,
"fdv": 61546706124,
"change": -3.61639,
"securityScan": {
"provider": "blockaid",
"resultType": "Unscanned",
"features": [],
"unscannedReason": "NATIVE_TOKEN",
"unscannedDetail": "SOL has no contract address to scan",
"scannedAt": "2026-09-15T08:23:22.968Z",
"expiresAt": "2026-09-16T08:23:22.968Z"
},
"id": "6689b73ec90e45f3b3e51558",
"icon": "https://api.houdiniswap.com/assets/tokens/sol-solana.png"
}{
"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 token by ID
Returns a single token by its id. Use this to refresh one token you already know, rather than re-fetching the whole list.
curl --request GET \
--url https://api-partner.houdiniswap.com/v2/tokens/{id} \
--header 'Authorization: <api-key>'import requests
url = "https://api-partner.houdiniswap.com/v2/tokens/{id}"
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/tokens/{id}', 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/tokens/{id}",
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/tokens/{id}"
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/tokens/{id}")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-partner.houdiniswap.com/v2/tokens/{id}")
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{
"address": null,
"chain": "solana",
"decimals": 9,
"symbol": "SOL",
"name": "Solana",
"created": "2024-07-06T21:29:34.822Z",
"modified": "2026-09-16T07:17:14.429Z",
"chainData": {
"created": "2024-07-06T21:02:11.673Z",
"modified": "2026-09-14T10:01:00.292Z",
"name": "Solana",
"shortName": "solana",
"addressValidation": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
"tokenAddressValidation": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
"memoNeeded": false,
"explorerUrl": "https://solscan.io/tx/{txHash}",
"addressUrl": "https://solscan.io/account/{address}",
"priority": 1,
"kind": "sol",
"enabled": true,
"shortNameV1": "SOL",
"id": "6689b0d3c52f263938c4484e",
"icon": "https://api.houdiniswap.com/assets/chains/solana-n1gfe3.png"
},
"description": "Solana is a highly functional open source project that banks on blockchain technology’s permissionless nature to provide decentralized finance (DeFi) solutions. It is a layer 1 network that offers fast speeds and affordable costs. While the idea and initial work on the project began in 2017, Solana was officially launched in March 2020 by the Solana Foundation with headquarters in Geneva, Switzerland.",
"mainnet": true,
"enabled": true,
"unverified": false,
"hasDex": true,
"hasCex": true,
"hasBundler": true,
"hasSelfPrivate": true,
"cexTokenId": "SOL",
"rank": 7,
"cgId": "solana",
"marketCapChange24h": -3.76076,
"circulatingSupply": 587064779.4352292,
"price": 97.3,
"marketCap": 56980421616,
"volume": 3952383111,
"fdv": 61546706124,
"change": -3.61639,
"securityScan": {
"provider": "blockaid",
"resultType": "Unscanned",
"features": [],
"unscannedReason": "NATIVE_TOKEN",
"unscannedDetail": "SOL has no contract address to scan",
"scannedAt": "2026-09-15T08:23:22.968Z",
"expiresAt": "2026-09-16T08:23:22.968Z"
},
"id": "6689b73ec90e45f3b3e51558",
"icon": "https://api.houdiniswap.com/assets/tokens/sol-solana.png"
}{
"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
The token id returned by Get tokens
^[a-fA-F0-9]{24}$Response
Success
Token icon URL.
The token id. Pass this as from / to when quoting.
Chain short name, e.g. ethereum. Matches shortName on chainData.
The chain this token lives on.
Show child attributes
Show child attributes
Contract address. Null for a chain's native coin — see mainnet.
On-chain decimals. Amounts in this API are decimals in the token's own units, so you only need this for on-chain work.
Token description from CoinGecko.
True for the chain's native coin (e.g. ETH on Ethereum), false for an issued token (e.g. USDT). Not related to mainnet vs testnet.
False when the token is temporarily not swappable.
True when we have not reviewed this token yet — check securityScan before using it.
True when the token can be swapped on DEX routes.
True when the token can be swapped on private and standard routes.
True when the bundler can fund this token — paying for a whole multi-exchange group with one transaction instead of a deposit per order. Available on Solana, and on supported EVM chains.
True when the token supports self-to-self private swaps — send it and receive the same token at another address, with no on-chain link.
The token's identifier on centralized exchanges.
CoinGecko market-cap rank. Null when unranked.
CoinGecko id for this token.
24h market cap change percentage from CoinGecko.
Token circulating supply from CoinGecko.
Current price in USD, from CoinGecko.
Market cap in USD, from CoinGecko.
24h trading volume in USD, from CoinGecko.
Fully diluted valuation in USD, from CoinGecko.
24h price change, as a percentage.
Display order — lower sorts first. Unrelated to rank.
Warning to show the user before swapping this token.
Latest security verdict for this token. Absent until the token has been used in a swap at least once.
Show child attributes
Show child attributes