--- title: Catalog and chains description: Discovering quotable tokens, token metadata, and per-chain status and limits. --- ## ListTokens ``` rpc ListTokens(ListTokensRequest) returns (ListTokensResponse) ``` Every quotable token across every chain. Takes no arguments. See [CatalogToken](/api-reference/types#catalogtoken). Cache per page load. The list changes when the operator lists or delists a token. ## GetTokenInfo ``` rpc GetTokenInfo(TokenInfoRequest) returns (TokenInfo) ``` Metadata for one token. Chain name, lowercase. Token address on that chain. Chain name. EVM chain id. Absent for Solana. Token address. Display symbol. Base-unit exponent. Icon URL. Optional. Metadata is read live from the chain (the ERC-20 contract on EVM, the mint account on Solana), so it also resolves addresses that are not in the catalog. A token outside the catalog still is not quotable. When the chain read fails, the call returns `UNAVAILABLE` with `could not read token info from the chain` rather than guessing. ## GetChains ``` rpc GetChains(GetChainsRequest) returns (ChainsResponse) ``` Live per-chain status, limits, and display data. Takes no arguments. This is the source of truth for what is currently open. See [ChainStatus](/api-reference/types#chainstatus). The fields integrations use most: | Field | Use | | --- | --- | | `quote_enabled` | Whether the chain can appear on a new quote. Build selectors from this. | | `max_gas_drop` | Ceiling for `gas_drop` on this destination, in native base units. | | `native_symbol`, `native_decimals` | Render native amounts without a second source. | | `explorer_tx_url`, `explorer_address_url` | Templates with `{tx}` and `{address}` placeholders. | | `treasury` | Deposit target on Solana. | | `rpc_url` | Public RPC the SDK uses for balance and allowance reads. | | `router` | The `HularRouter` contract on EVM chains, used for permit and gasless deposits. | | `gasless` | Whether gasless deposits are available from this chain. | | `vm` | `evm` or `svm`, for choosing the wallet family and deposit path. | | `last_indexed_at` | Freshness of deposit ingestion. | | `logo_url` | Chain icon. | ```ts const { chains } = await hular.getChains({}); const open = chains.filter((c) => c.quoteEnabled); ``` `indexer_enabled` and `relayer_enabled` describe the settlement path rather than quoting. A chain with quoting off still settles orders already in flight.