List supported tokens
curl --request GET \
--url https://transfer.layerzero-api.com/v1/tokensimport requests
url = "https://transfer.layerzero-api.com/v1/tokens"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://transfer.layerzero-api.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://transfer.layerzero-api.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",
]);
$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://transfer.layerzero-api.com/v1/tokens"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://transfer.layerzero-api.com/v1/tokens")
.asString();require 'uri'
require 'net/http'
url = URI("https://transfer.layerzero-api.com/v1/tokens")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"tokens": [
{
"isSupported": true,
"chainKey": "ethereum",
"address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
"decimals": 18,
"symbol": "ETH",
"name": "Ethereum"
}
],
"pagination": {}
}API Reference
List Tokens
Retrieve supported tokens and validate transfer routes between chains.
GET
/
tokens
List supported tokens
curl --request GET \
--url https://transfer.layerzero-api.com/v1/tokensimport requests
url = "https://transfer.layerzero-api.com/v1/tokens"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://transfer.layerzero-api.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://transfer.layerzero-api.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",
]);
$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://transfer.layerzero-api.com/v1/tokens"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://transfer.layerzero-api.com/v1/tokens")
.asString();require 'uri'
require 'net/http'
url = URI("https://transfer.layerzero-api.com/v1/tokens")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"tokens": [
{
"isSupported": true,
"chainKey": "ethereum",
"address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
"decimals": 18,
"symbol": "ETH",
"name": "Ethereum"
}
],
"pagination": {}
}Returns tokens supported by the Value Transfer API. Use query parameters to filter for tokens transferrable from a specific source chain and token.
Reference
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
transferrableFromChainKey | string | No | Source chain key (for example, base, ethereum). Must be combined with transferrableFromTokenAddress. |
transferrableFromTokenAddress | string | No | Source token address. Must be combined with transferrableFromChainKey. |
pagination[nextToken] | string | No | Pagination cursor from previous response |
Validate transfer routes
Provide both
transferrableFromChainKey and transferrableFromTokenAddress to get only destination tokens you can transfer to.Response
Returns atokens array and a pagination object.
Attributes
| Attribute | Type | Description |
|---|---|---|
isSupported | boolean | Whether the token is available for transfers |
chainKey | string | Chain identifier (for example, ethereum, base) |
address | string | Token contract address |
decimals | number | Token decimal places |
symbol | string | Token symbol (for example, ETH, USDC) |
name | string | Full token name |
logoUrl | string | Optional token logo URL |
price | object | Optional price information |
price.usd | number | Current price in USD |
Code examples
List all tokens
Returns the complete token catalog across all chains.- cURL
- TypeScript
- Python
curl -X GET "https://transfer.layerzero-api.com/v1/tokens"
const response = await fetch('https://transfer.layerzero-api.com/v1/tokens');
const {tokens} = await response.json();
console.log(tokens);
import requests
response = requests.get("https://transfer.layerzero-api.com/v1/tokens")
tokens = response.json()["tokens"]
print(tokens)
List transferrable destinations
Returns only tokens you can transfer to from a specific source.- cURL
- TypeScript
- Python
curl -X GET "https://transfer.layerzero-api.com/v1/tokens?transferrableFromChainKey=base&transferrableFromTokenAddress=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
const params = new URLSearchParams({
transferrableFromChainKey: 'base',
transferrableFromTokenAddress: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',
});
const response = await fetch(`https://transfer.layerzero-api.com/v1/tokens?${params}`);
const {tokens} = await response.json();
console.log(tokens);
import requests
response = requests.get(
"https://transfer.layerzero-api.com/v1/tokens",
params={
"transferrableFromChainKey": "base",
"transferrableFromTokenAddress": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
},
)
tokens = response.json()["tokens"]
print(tokens)
Response
{
"tokens": [
{
"isSupported": true,
"chainKey": "base",
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"decimals": 6,
"symbol": "USDC",
"name": "USD Coin",
"price": {
"usd": 0.99986254
}
},
{
"isSupported": true,
"chainKey": "base",
"address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
"decimals": 18,
"symbol": "ETH",
"name": "Ether",
"price": {
"usd": 2132.3224
}
},
{
"isSupported": true,
"chainKey": "ethereum",
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"decimals": 6,
"symbol": "USDC",
"name": "USDC",
"price": {
"usd": 0.99986254
}
},
{
"isSupported": true,
"chainKey": "ethereum",
"address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
"decimals": 18,
"symbol": "ETH",
"name": "ETH",
"price": {
"usd": 2132.3224
}
},
{
"isSupported": true,
"chainKey": "arbitrum",
"address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"decimals": 6,
"symbol": "USDC",
"name": "USD Coin",
"price": {
"usd": 0.99986254
}
}
],
"pagination": {}
}
Validate transfer routes
Check if a transfer route exists before requesting quotes:async function validatePath(
srcChain: string,
srcToken: string,
dstChain: string,
dstToken: string,
): Promise<boolean> {
const params = new URLSearchParams({
transferrableFromChainKey: srcChain,
transferrableFromTokenAddress: srcToken,
});
const response = await fetch(`https://transfer.layerzero-api.com/v1/tokens?${params}`);
const {tokens} = await response.json();
return tokens.some(
(t) => t.chainKey === dstChain && t.address.toLowerCase() === dstToken.toLowerCase(),
);
}
const isSupported = await validatePath(
'base',
'0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
'arbitrum',
'0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
);
Related endpoints
Query Parameters
Filter tokens by source chain (for example, 'ethereum', 'arbitrum')
Example:
"ethereum"
Filter by source token address
Example:
"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
Was this page helpful?
⌘I