Get a unified list of multi-chain assets
curl --request POST \
--url https://api.hydric.org/v1/tokens \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"config": {
"matchAllSymbols": false,
"limit": 10,
"orderBy": {
"field": "tvl",
"direction": "desc"
},
"cursor": null
},
"filters": {
"chainIds": [
1,
8453
],
"minimumTotalValuePooledUsd": 50000,
"minimumSwapsCount": 1000,
"minimumSwapVolumeUsd": 100000,
"ignoreWrappedNative": true
}
}
'import requests
url = "https://api.hydric.org/v1/tokens"
payload = {
"config": {
"matchAllSymbols": False,
"limit": 10,
"orderBy": {
"field": "tvl",
"direction": "desc"
},
"cursor": None
},
"filters": {
"chainIds": [1, 8453],
"minimumTotalValuePooledUsd": 50000,
"minimumSwapsCount": 1000,
"minimumSwapVolumeUsd": 100000,
"ignoreWrappedNative": True
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
config: {
matchAllSymbols: false,
limit: 10,
orderBy: {field: 'tvl', direction: 'desc'},
cursor: null
},
filters: {
chainIds: [1, 8453],
minimumTotalValuePooledUsd: 50000,
minimumSwapsCount: 1000,
minimumSwapVolumeUsd: 100000,
ignoreWrappedNative: true
}
})
};
fetch('https://api.hydric.org/v1/tokens', 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.hydric.org/v1/tokens",
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([
'config' => [
'matchAllSymbols' => false,
'limit' => 10,
'orderBy' => [
'field' => 'tvl',
'direction' => 'desc'
],
'cursor' => null
],
'filters' => [
'chainIds' => [
1,
8453
],
'minimumTotalValuePooledUsd' => 50000,
'minimumSwapsCount' => 1000,
'minimumSwapVolumeUsd' => 100000,
'ignoreWrappedNative' => true
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.hydric.org/v1/tokens"
payload := strings.NewReader("{\n \"config\": {\n \"matchAllSymbols\": false,\n \"limit\": 10,\n \"orderBy\": {\n \"field\": \"tvl\",\n \"direction\": \"desc\"\n },\n \"cursor\": null\n },\n \"filters\": {\n \"chainIds\": [\n 1,\n 8453\n ],\n \"minimumTotalValuePooledUsd\": 50000,\n \"minimumSwapsCount\": 1000,\n \"minimumSwapVolumeUsd\": 100000,\n \"ignoreWrappedNative\": true\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.hydric.org/v1/tokens")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"config\": {\n \"matchAllSymbols\": false,\n \"limit\": 10,\n \"orderBy\": {\n \"field\": \"tvl\",\n \"direction\": \"desc\"\n },\n \"cursor\": null\n },\n \"filters\": {\n \"chainIds\": [\n 1,\n 8453\n ],\n \"minimumTotalValuePooledUsd\": 50000,\n \"minimumSwapsCount\": 1000,\n \"minimumSwapVolumeUsd\": 100000,\n \"ignoreWrappedNative\": true\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hydric.org/v1/tokens")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"config\": {\n \"matchAllSymbols\": false,\n \"limit\": 10,\n \"orderBy\": {\n \"field\": \"tvl\",\n \"direction\": \"desc\"\n },\n \"cursor\": null\n },\n \"filters\": {\n \"chainIds\": [\n 1,\n 8453\n ],\n \"minimumTotalValuePooledUsd\": 50000,\n \"minimumSwapsCount\": 1000,\n \"minimumSwapVolumeUsd\": 100000,\n \"ignoreWrappedNative\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"tokens": [
{
"addresses": [
{
"chainId": 1,
"address": "0x0000000000000000000000000000000000000000"
}
],
"symbol": "USDC",
"name": "USD Coin",
"logoUrl": "https://logos.hydric.org/tokens/1/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"chainIds": [
1,
8453
]
}
],
"nextCursor": "eJzLKCkpSs3LT0rNz0tRBAAdewMF"
}{
"statusCode": 400,
"timestamp": "2026-02-28T19:40:59.721Z",
"path": "/tokens",
"traceId": "doc_sample_trace_id",
"error": {
"code": "VALIDATION_ERROR",
"title": "Invalid Parameters",
"message": "limit must not be greater than 1000",
"details": "Check the 'meta' field for specific field-level violations.",
"metadata": {
"property": "limit",
"value": 101,
"constraints": {
"max": [
"limit must not be greater than 1000"
]
}
}
}
}Tokens
Get a unified list of multi-chain assets
Returns a list of tokens containing metadata for multiple blockchains in one single model.
Key Capabilities:
- Cross-Chain Discovery: Instantly identify every network where a specific asset maintains a liquidity presence.
- Metadata Consolidation: Retrieve a single, high-fidelity model containing localized contract addresses and decimal precision for every supported chain.
- Operational Efficiency: Eliminate the need for manual network switching or multiple RPC calls to resolve cross-chain token identities.
POST
/
v1
/
tokens
Get a unified list of multi-chain assets
curl --request POST \
--url https://api.hydric.org/v1/tokens \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"config": {
"matchAllSymbols": false,
"limit": 10,
"orderBy": {
"field": "tvl",
"direction": "desc"
},
"cursor": null
},
"filters": {
"chainIds": [
1,
8453
],
"minimumTotalValuePooledUsd": 50000,
"minimumSwapsCount": 1000,
"minimumSwapVolumeUsd": 100000,
"ignoreWrappedNative": true
}
}
'import requests
url = "https://api.hydric.org/v1/tokens"
payload = {
"config": {
"matchAllSymbols": False,
"limit": 10,
"orderBy": {
"field": "tvl",
"direction": "desc"
},
"cursor": None
},
"filters": {
"chainIds": [1, 8453],
"minimumTotalValuePooledUsd": 50000,
"minimumSwapsCount": 1000,
"minimumSwapVolumeUsd": 100000,
"ignoreWrappedNative": True
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
config: {
matchAllSymbols: false,
limit: 10,
orderBy: {field: 'tvl', direction: 'desc'},
cursor: null
},
filters: {
chainIds: [1, 8453],
minimumTotalValuePooledUsd: 50000,
minimumSwapsCount: 1000,
minimumSwapVolumeUsd: 100000,
ignoreWrappedNative: true
}
})
};
fetch('https://api.hydric.org/v1/tokens', 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.hydric.org/v1/tokens",
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([
'config' => [
'matchAllSymbols' => false,
'limit' => 10,
'orderBy' => [
'field' => 'tvl',
'direction' => 'desc'
],
'cursor' => null
],
'filters' => [
'chainIds' => [
1,
8453
],
'minimumTotalValuePooledUsd' => 50000,
'minimumSwapsCount' => 1000,
'minimumSwapVolumeUsd' => 100000,
'ignoreWrappedNative' => true
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.hydric.org/v1/tokens"
payload := strings.NewReader("{\n \"config\": {\n \"matchAllSymbols\": false,\n \"limit\": 10,\n \"orderBy\": {\n \"field\": \"tvl\",\n \"direction\": \"desc\"\n },\n \"cursor\": null\n },\n \"filters\": {\n \"chainIds\": [\n 1,\n 8453\n ],\n \"minimumTotalValuePooledUsd\": 50000,\n \"minimumSwapsCount\": 1000,\n \"minimumSwapVolumeUsd\": 100000,\n \"ignoreWrappedNative\": true\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.hydric.org/v1/tokens")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"config\": {\n \"matchAllSymbols\": false,\n \"limit\": 10,\n \"orderBy\": {\n \"field\": \"tvl\",\n \"direction\": \"desc\"\n },\n \"cursor\": null\n },\n \"filters\": {\n \"chainIds\": [\n 1,\n 8453\n ],\n \"minimumTotalValuePooledUsd\": 50000,\n \"minimumSwapsCount\": 1000,\n \"minimumSwapVolumeUsd\": 100000,\n \"ignoreWrappedNative\": true\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hydric.org/v1/tokens")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"config\": {\n \"matchAllSymbols\": false,\n \"limit\": 10,\n \"orderBy\": {\n \"field\": \"tvl\",\n \"direction\": \"desc\"\n },\n \"cursor\": null\n },\n \"filters\": {\n \"chainIds\": [\n 1,\n 8453\n ],\n \"minimumTotalValuePooledUsd\": 50000,\n \"minimumSwapsCount\": 1000,\n \"minimumSwapVolumeUsd\": 100000,\n \"ignoreWrappedNative\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"tokens": [
{
"addresses": [
{
"chainId": 1,
"address": "0x0000000000000000000000000000000000000000"
}
],
"symbol": "USDC",
"name": "USD Coin",
"logoUrl": "https://logos.hydric.org/tokens/1/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"chainIds": [
1,
8453
]
}
],
"nextCursor": "eJzLKCkpSs3LT0rNz0tRBAAdewMF"
}{
"statusCode": 400,
"timestamp": "2026-02-28T19:40:59.721Z",
"path": "/tokens",
"traceId": "doc_sample_trace_id",
"error": {
"code": "VALIDATION_ERROR",
"title": "Invalid Parameters",
"message": "limit must not be greater than 1000",
"details": "Check the 'meta' field for specific field-level violations.",
"metadata": {
"property": "limit",
"value": 101,
"constraints": {
"max": [
"limit must not be greater than 1000"
]
}
}
}
}Authorizations
Use the docs sandbox API key for authentication: hydric_docs_4N4ocuirsN8Sh
Body
application/json
Was this page helpful?
⌘I