> ## Documentation Index
> Fetch the complete documentation index at: https://docs.layerzero.network/llms.txt
> Use this file to discover all available pages before exploring further.

# List Tokens

> Retrieve supported tokens and validate transfer routes between chains.

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                                                                       |

<Tip>
  **Validate transfer routes**
  Provide **both** `transferrableFromChainKey` and `transferrableFromTokenAddress` to get only destination tokens you can transfer to.
</Tip>

### Response

Returns a `tokens` 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.

<Tabs>
  <Tab title="cURL">
    ```bash wrap theme={null}
    curl -X GET "https://transfer.layerzero-api.com/v1/tokens"
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript wrap theme={null}
    const response = await fetch('https://transfer.layerzero-api.com/v1/tokens');
    const {tokens} = await response.json();

    console.log(tokens);
    ```
  </Tab>

  <Tab title="Python">
    ```python wrap theme={null}
    import requests

    response = requests.get("https://transfer.layerzero-api.com/v1/tokens")
    tokens = response.json()["tokens"]

    print(tokens)
    ```
  </Tab>
</Tabs>

### List transferrable destinations

Returns only tokens you can transfer to from a specific source.

<Tabs>
  <Tab title="cURL">
    ```bash wrap theme={null}
    curl -X GET "https://transfer.layerzero-api.com/v1/tokens?transferrableFromChainKey=base&transferrableFromTokenAddress=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript wrap theme={null}
    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);
    ```
  </Tab>

  <Tab title="Python">
    ```python wrap theme={null}
    import requests

    response = requests.get(
      "https://transfer.layerzero-api.com/v1/tokens",
      params={
        "transferrableFromChainKey": "base",
        "transferrableFromTokenAddress": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
      },
    )
    tokens = response.json()["tokens"]

    print(tokens)
    ```
  </Tab>
</Tabs>

### Response

```json wrap theme={null}
{
  "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:

```typescript wrap theme={null}
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

* [Chains](./chains) — List supported blockchain networks
* [Quotes](./quotes) — Request transfer quotes for validated routes


## OpenAPI

````yaml GET /tokens
openapi: 3.0.3
info:
  title: Value Transfer API
  version: 1.0.0
  description: Unified API for cross-chain value transfers across 150+ blockchains
servers:
  - url: https://transfer.layerzero-api.com/v1
security: []
paths:
  /tokens:
    get:
      tags:
        - Discovery
      summary: List supported tokens
      description: >-
        Returns a paginated list of tokens supported by the Value Transfer API.
        Use optional filters to narrow down results by chain or source token.
      parameters:
        - name: transferrableFromChainKey
          in: query
          description: Filter tokens by source chain (for example, 'ethereum', 'arbitrum')
          schema:
            type: string
            example: ethereum
        - name: transferrableFromTokenAddress
          in: query
          description: Filter by source token address
          schema:
            type: string
            example: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'
      responses:
        '200':
          description: Successfully retrieved token list
          content:
            application/json:
              schema:
                type: object
                properties:
                  tokens:
                    type: array
                    items:
                      type: object
                      properties:
                        isSupported:
                          type: boolean
                        chainKey:
                          type: string
                        address:
                          type: string
                        decimals:
                          type: number
                        symbol:
                          type: string
                        name:
                          type: string
                  pagination:
                    type: object
                    properties:
                      nextToken:
                        type: string
                example:
                  tokens:
                    - isSupported: true
                      chainKey: ethereum
                      address: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'
                      decimals: 18
                      symbol: ETH
                      name: Ethereum
                  pagination: {}

````