Search for multi-chain assets
curl --request POST \
--url https://api.hydric.org/v1/tokens/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"search": "ETH",
"config": {
"matchAllSymbols": false,
"limit": 10,
"orderBy": {
"field": "tvl",
"direction": "desc"
},
"cursor": null
},
"filters": {
"chainIds": [
1,
8453
],
"minimumTotalValuePooledUsd": 10000,
"minimumSwapsCount": 100,
"minimumSwapVolumeUsd": 100000,
"ignoreWrappedNative": false
}
}
'import requests
url = "https://api.hydric.org/v1/tokens/search"
payload = {
"search": "ETH",
"config": {
"matchAllSymbols": False,
"limit": 10,
"orderBy": {
"field": "tvl",
"direction": "desc"
},
"cursor": None
},
"filters": {
"chainIds": [1, 8453],
"minimumTotalValuePooledUsd": 10000,
"minimumSwapsCount": 100,
"minimumSwapVolumeUsd": 100000,
"ignoreWrappedNative": False
}
}
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({
search: 'ETH',
config: {
matchAllSymbols: false,
limit: 10,
orderBy: {field: 'tvl', direction: 'desc'},
cursor: null
},
filters: {
chainIds: [1, 8453],
minimumTotalValuePooledUsd: 10000,
minimumSwapsCount: 100,
minimumSwapVolumeUsd: 100000,
ignoreWrappedNative: false
}
})
};
fetch('https://api.hydric.org/v1/tokens/search', 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/search",
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([
'search' => 'ETH',
'config' => [
'matchAllSymbols' => false,
'limit' => 10,
'orderBy' => [
'field' => 'tvl',
'direction' => 'desc'
],
'cursor' => null
],
'filters' => [
'chainIds' => [
1,
8453
],
'minimumTotalValuePooledUsd' => 10000,
'minimumSwapsCount' => 100,
'minimumSwapVolumeUsd' => 100000,
'ignoreWrappedNative' => false
]
]),
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/search"
payload := strings.NewReader("{\n \"search\": \"ETH\",\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\": 10000,\n \"minimumSwapsCount\": 100,\n \"minimumSwapVolumeUsd\": 100000,\n \"ignoreWrappedNative\": false\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/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"search\": \"ETH\",\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\": 10000,\n \"minimumSwapsCount\": 100,\n \"minimumSwapVolumeUsd\": 100000,\n \"ignoreWrappedNative\": false\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hydric.org/v1/tokens/search")
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 \"search\": \"ETH\",\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\": 10000,\n \"minimumSwapsCount\": 100,\n \"minimumSwapVolumeUsd\": 100000,\n \"ignoreWrappedNative\": false\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
]
}
],
"filters": {
"chainIds": [
1,
8453
],
"minimumTotalValuePooledUsd": 10000,
"minimumSwapsCount": 100,
"minimumSwapVolumeUsd": 100000,
"ignoreWrappedNative": false
},
"nextCursor": "eJzLKCkpSs3LT0rNz0tRBAAdewMF"
}{
"statusCode": 400,
"timestamp": "2026-02-28T19:40:59.722Z",
"path": "/tokens/search",
"traceId": "doc_sample_trace_id",
"error": {
"code": "VALIDATION_ERROR",
"title": "Invalid Parameters",
"message": "search must not be empty",
"details": "Check the 'meta' field for specific field-level violations.",
"metadata": {
"property": "search",
"value": 123,
"constraints": {
"isString": [
"search must be a string"
]
}
}
}
}Tokens
Search for multi-chain assets
Searches for assets across all supported blockchains by keyword (name or symbol).
POST
/
v1
/
tokens
/
search
Search for multi-chain assets
curl --request POST \
--url https://api.hydric.org/v1/tokens/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"search": "ETH",
"config": {
"matchAllSymbols": false,
"limit": 10,
"orderBy": {
"field": "tvl",
"direction": "desc"
},
"cursor": null
},
"filters": {
"chainIds": [
1,
8453
],
"minimumTotalValuePooledUsd": 10000,
"minimumSwapsCount": 100,
"minimumSwapVolumeUsd": 100000,
"ignoreWrappedNative": false
}
}
'import requests
url = "https://api.hydric.org/v1/tokens/search"
payload = {
"search": "ETH",
"config": {
"matchAllSymbols": False,
"limit": 10,
"orderBy": {
"field": "tvl",
"direction": "desc"
},
"cursor": None
},
"filters": {
"chainIds": [1, 8453],
"minimumTotalValuePooledUsd": 10000,
"minimumSwapsCount": 100,
"minimumSwapVolumeUsd": 100000,
"ignoreWrappedNative": False
}
}
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({
search: 'ETH',
config: {
matchAllSymbols: false,
limit: 10,
orderBy: {field: 'tvl', direction: 'desc'},
cursor: null
},
filters: {
chainIds: [1, 8453],
minimumTotalValuePooledUsd: 10000,
minimumSwapsCount: 100,
minimumSwapVolumeUsd: 100000,
ignoreWrappedNative: false
}
})
};
fetch('https://api.hydric.org/v1/tokens/search', 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/search",
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([
'search' => 'ETH',
'config' => [
'matchAllSymbols' => false,
'limit' => 10,
'orderBy' => [
'field' => 'tvl',
'direction' => 'desc'
],
'cursor' => null
],
'filters' => [
'chainIds' => [
1,
8453
],
'minimumTotalValuePooledUsd' => 10000,
'minimumSwapsCount' => 100,
'minimumSwapVolumeUsd' => 100000,
'ignoreWrappedNative' => false
]
]),
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/search"
payload := strings.NewReader("{\n \"search\": \"ETH\",\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\": 10000,\n \"minimumSwapsCount\": 100,\n \"minimumSwapVolumeUsd\": 100000,\n \"ignoreWrappedNative\": false\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/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"search\": \"ETH\",\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\": 10000,\n \"minimumSwapsCount\": 100,\n \"minimumSwapVolumeUsd\": 100000,\n \"ignoreWrappedNative\": false\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hydric.org/v1/tokens/search")
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 \"search\": \"ETH\",\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\": 10000,\n \"minimumSwapsCount\": 100,\n \"minimumSwapVolumeUsd\": 100000,\n \"ignoreWrappedNative\": false\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
]
}
],
"filters": {
"chainIds": [
1,
8453
],
"minimumTotalValuePooledUsd": 10000,
"minimumSwapsCount": 100,
"minimumSwapVolumeUsd": 100000,
"ignoreWrappedNative": false
},
"nextCursor": "eJzLKCkpSs3LT0rNz0tRBAAdewMF"
}{
"statusCode": 400,
"timestamp": "2026-02-28T19:40:59.722Z",
"path": "/tokens/search",
"traceId": "doc_sample_trace_id",
"error": {
"code": "VALIDATION_ERROR",
"title": "Invalid Parameters",
"message": "search must not be empty",
"details": "Check the 'meta' field for specific field-level violations.",
"metadata": {
"property": "search",
"value": 123,
"constraints": {
"isString": [
"search must be a string"
]
}
}
}
}Authorizations
Use the docs sandbox API key for authentication: hydric_docs_4N4ocuirsN8Sh
Body
application/json
The search term to filter assets by ticker symbol or name.
- Ticker Symbol or Name: (e.g., 'ETH', 'USD', 'Wrapped') — Case-insensitive substring match.
Minimum string length:
1Example:
"ETH"
Configuration for the search results such as limit, order, cursor, etc.
Show child attributes
Show child attributes
Additional filters to personalize the search results.
Show child attributes
Show child attributes
Response
The search results were successfully retrieved.
Was this page helpful?
⌘I