List tokens
curl --request GET \
--url https://api.eco.com/v1/tokens \
--header 'x-api-key: <api-key>'import requests
url = "https://api.eco.com/v1/tokens"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.eco.com/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.eco.com/v1/tokens",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <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.eco.com/v1/tokens"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<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.eco.com/v1/tokens")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.eco.com/v1/tokens")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"tokens": [
{
"chainId": 1,
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"symbol": "USDC",
"decimals": 6,
"supports": {
"quote": [
"erc-3009",
"permit2",
"permit3"
],
"depositAddress": [
"erc-2612",
"erc-3009"
]
}
},
{
"chainId": 1,
"address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
"symbol": "USDT",
"decimals": 6,
"supports": {
"quote": [
"erc-3009",
"permit2",
"permit3"
],
"depositAddress": [
"erc-2612",
"erc-3009"
]
}
},
{
"chainId": 10,
"address": "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
"symbol": "USDC",
"decimals": 6,
"supports": {
"quote": [
"erc-3009",
"permit2",
"permit3"
],
"depositAddress": [
"erc-2612",
"erc-3009"
]
}
},
{
"chainId": 8453,
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"symbol": "USDC",
"decimals": 6,
"supports": {
"quote": [
"erc-3009",
"permit2",
"permit3"
],
"depositAddress": [
"erc-2612",
"erc-3009"
]
}
},
{
"chainId": 8453,
"address": "0x1217BfE6c773EEC6cc4A38b5Dc45B92292B6E189",
"symbol": "oUSDT",
"decimals": 6,
"supports": {
"quote": [
"erc-3009",
"permit2",
"permit3"
],
"depositAddress": [
"erc-2612",
"erc-3009"
]
}
},
{
"chainId": 42161,
"address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"symbol": "USDC",
"decimals": 6,
"supports": {
"quote": [
"erc-3009",
"permit2",
"permit3"
],
"depositAddress": [
"erc-2612",
"erc-3009"
]
}
},
{
"chainId": 1399811149,
"address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"symbol": "USDC",
"decimals": 6,
"supports": {
"quote": [
"erc-3009",
"permit2",
"permit3"
],
"depositAddress": [
"erc-2612",
"erc-3009"
]
}
}
],
"nextCursor": null
}Discovery and quotes
List tokens
Returns every token the API can quote, with decimals and the gasless funding standards each supports.
GET
/
v1
/
tokens
List tokens
curl --request GET \
--url https://api.eco.com/v1/tokens \
--header 'x-api-key: <api-key>'import requests
url = "https://api.eco.com/v1/tokens"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.eco.com/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.eco.com/v1/tokens",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <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.eco.com/v1/tokens"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<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.eco.com/v1/tokens")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.eco.com/v1/tokens")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"tokens": [
{
"chainId": 1,
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"symbol": "USDC",
"decimals": 6,
"supports": {
"quote": [
"erc-3009",
"permit2",
"permit3"
],
"depositAddress": [
"erc-2612",
"erc-3009"
]
}
},
{
"chainId": 1,
"address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
"symbol": "USDT",
"decimals": 6,
"supports": {
"quote": [
"erc-3009",
"permit2",
"permit3"
],
"depositAddress": [
"erc-2612",
"erc-3009"
]
}
},
{
"chainId": 10,
"address": "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
"symbol": "USDC",
"decimals": 6,
"supports": {
"quote": [
"erc-3009",
"permit2",
"permit3"
],
"depositAddress": [
"erc-2612",
"erc-3009"
]
}
},
{
"chainId": 8453,
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"symbol": "USDC",
"decimals": 6,
"supports": {
"quote": [
"erc-3009",
"permit2",
"permit3"
],
"depositAddress": [
"erc-2612",
"erc-3009"
]
}
},
{
"chainId": 8453,
"address": "0x1217BfE6c773EEC6cc4A38b5Dc45B92292B6E189",
"symbol": "oUSDT",
"decimals": 6,
"supports": {
"quote": [
"erc-3009",
"permit2",
"permit3"
],
"depositAddress": [
"erc-2612",
"erc-3009"
]
}
},
{
"chainId": 42161,
"address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"symbol": "USDC",
"decimals": 6,
"supports": {
"quote": [
"erc-3009",
"permit2",
"permit3"
],
"depositAddress": [
"erc-2612",
"erc-3009"
]
}
},
{
"chainId": 1399811149,
"address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"symbol": "USDC",
"decimals": 6,
"supports": {
"quote": [
"erc-3009",
"permit2",
"permit3"
],
"depositAddress": [
"erc-2612",
"erc-3009"
]
}
}
],
"nextCursor": null
}Returns every token the API can quote, with decimals and the gasless standards each token supports for quote funding (
permit3, permit2, erc-3009) and deposit-address funding (erc-2612, erc-3009). chainId filters to one chain. A listed token does not guarantee that every pair and amount can be quoted.
Requires x-api-key. Partner pricing, attribution, and enabled features are tied to the key. Without a key the gateway can answer 403 with a plain JSON body ({"Message": "User is not authorized ..."}); a key that is unknown, revoked, or not enabled for v1 answers 401 invalid-api-key. No requests-per-second quota is published. Handle 429 and honor Retry-After when present. See Errors and retries for common errors and retry handling.
Examples use mainnet token and contract addresses with placeholder wallets, hashes, signatures, and IDs. They are illustrative and must not be used to transfer funds.