{ "openapi": "3.0.0", "info": { "title": "CCIP directory and configuration REST API (v1)", "description": "**Deprecation:** This CCIP Directory and configuration REST API (v1), including `/api/ccip/v1/*` on docs.chain.link, is **planned for deprecation soon**. Timelines and migration guidance will be published in the [CCIP Tools documentation](https://docs.chain.link/ccip/tools/). For new integrations, prefer the [CCIP Tools REST API (v2)](https://docs.chain.link/ccip/tools/api/) where it meets your needs.\n\nREST API for CCIP supported chains, tokens, lanes, and related configuration on docs.chain.link. This is distinct from the CCIP Tools REST API (v2), which covers messages, lane latency, intents, and related tooling (https://docs.chain.link/ccip/tools/api/). For on-chain Solidity, Move, SVM, and TON interfaces, see https://docs.chain.link/ccip/api-reference.\n\nTo get started quickly, you can download our [Postman Collection](/api/ccip/v1/postman-collection.json) which includes all endpoints and example requests.", "version": "1.6.0", "contact": { "name": "File issues", "url": "https://github.com/smartcontractkit/documentation/issues/new/choose" }, "license": { "name": "MIT", "url": "https://opensource.org/licenses/MIT" } }, "servers": [ { "url": "https://docs.chain.link/api/ccip/v1", "description": "Production server" }, { "url": "http://localhost:4321/api/ccip/v1", "description": "Development server" } ], "tags": [ { "name": "chains", "description": "Chain information endpoints" }, { "name": "tokens", "description": "Token information endpoints" }, { "name": "lanes", "description": "Cross-chain lane information endpoints" } ], "paths": { "/chains": { "get": { "tags": ["chains"], "summary": "Retrieve CCIP chain information", "description": "Returns information about Cross-Chain Interoperability Protocol (CCIP) chains across different blockchain families (EVM, Solana, Aptos)", "operationId": "getChains", "parameters": [ { "name": "environment", "in": "query", "required": true, "schema": { "type": "string", "enum": ["mainnet", "testnet"] }, "description": "The network environment to query" }, { "name": "chainId", "in": "query", "schema": { "type": "string" }, "description": "Filter by chain ID (e.g., \"1\" for Ethereum, \"56\" for BSC, or a Solana pubkey)", "example": "1,56" }, { "name": "selector", "in": "query", "schema": { "type": "string" }, "description": "Filter by CCIP chain selector. Multiple selectors can be specified using comma-separated values", "example": "5009297550715157269,13264668187771770619" }, { "name": "internalId", "in": "query", "schema": { "type": "string" }, "description": "Filter by internal chain identifier. Multiple IDs can be specified using comma-separated values (e.g., \"ethereum-mainnet,bsc-mainnet\")", "example": "ethereum-mainnet,bsc-mainnet" }, { "name": "outputKey", "in": "query", "schema": { "type": "string", "enum": ["chainId", "selector", "internalId"], "default": "chainId" }, "description": "Key to use for organizing the response data" }, { "name": "enrichFeeTokens", "in": "query", "schema": { "type": "string", "enum": ["true", "false"], "default": "false" }, "description": "When set to 'true', returns detailed fee token information including addresses, names, and decimals instead of just symbol strings" }, { "name": "search", "in": "query", "schema": { "type": "string", "maxLength": 100 }, "description": "Unified search query. Automatically detects query type: selector (>17 digits), chainId (≤17 digits or Solana base58 hash), internalId (kebab-case), or displayName (fuzzy text search). Cannot be combined with chainId, selector, or internalId filters.", "example": "ethereum" }, { "name": "family", "in": "query", "schema": { "type": "string", "enum": ["evm", "solana", "aptos", "sui", "tron", "canton", "ton", "stellar", "starknet"] }, "description": "Filter results by chain family. Only effective when using the search parameter." } ], "responses": { "200": { "description": "Successful response with chain data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ChainApiResponse" }, "examples": { "default": { "summary": "Default response (string array for feeTokens)", "value": { "metadata": { "environment": "mainnet", "timestamp": "2024-03-14T12:00:00Z", "requestId": "123e4567-e89b-12d3-a456-426614174000", "ignoredChainCount": 0, "validChainCount": 2 }, "data": { "evm": { "1": { "chainId": 1, "displayName": "Ethereum", "selector": "5009297550715157269", "internalId": "ethereum-mainnet", "feeTokens": ["LINK", "WETH", "GHO"], "router": "0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", "rmn": "0x411dE17f12D1A34ecC7F45f49844626267c75e81", "registryModule": "0x13022e3e6C77524308BD56AEd716E88311b2E533", "tokenAdminRegistry": "0xb22764f98dD05c789929716D677382Df22C05Cb6", "tokenPoolFactory": "0x17D8a409fE2ceF2d3808bcB61F14aBEFfc28876e", "chainType": "evm", "chainFamily": "evm", "supported": true } }, "solana": { "solana-devnet": { "chainId": "solana-devnet", "displayName": "Solana Devnet", "selector": "16015286601757825753", "internalId": "solana-devnet", "feeTokens": ["LINK", "SOL"], "router": "CCiPv7hcmEqNdMdJgmHDJmEJyCkBgLqxmcf87R1Gho6H", "rmn": "CRmNVnB7S6SqEPFG6m9dVp9fJJCjr3TC2TiAWB3RqNod", "feeQuoter": "FqbCVbS7a4ndxs9xZ8UmfL6LQsUhAJNkWxW3duJRrCWD", "chainType": "solana", "chainFamily": "solana", "supported": true } } }, "ignored": [] } }, "search": { "summary": "Search response (includes both supported and unsupported chains)", "value": { "metadata": { "environment": "testnet", "timestamp": "2024-03-14T12:00:00Z", "requestId": "123e4567-e89b-12d3-a456-426614174000", "ignoredChainCount": 0, "validChainCount": 2, "searchQuery": "solana", "searchType": "displayName" }, "data": { "solana": { "solana-devnet": { "chainId": "EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG", "displayName": "Solana Devnet", "selector": "16015286601757825753", "internalId": "solana-devnet", "feeTokens": ["LINK", "SOL"], "router": "CCiPv7hcmEqNdMdJgmHDJmEJyCkBgLqxmcf87R1Gho6H", "rmn": "CRmNVnB7S6SqEPFG6m9dVp9fJJCjr3TC2TiAWB3RqNod", "feeQuoter": "FqbCVbS7a4ndxs9xZ8UmfL6LQsUhAJNkWxW3duJRrCWD", "chainType": "solana", "chainFamily": "solana", "supported": true }, "solana-testnet": { "chainId": "4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z", "displayName": "Solana Testnet", "selector": "6302590918974934319", "internalId": "solana-testnet", "feeTokens": [], "router": "", "rmn": "", "chainType": "solana", "chainFamily": "solana", "supported": false } } }, "ignored": [] } }, "enriched": { "summary": "Enriched response (detailed objects for feeTokens when enrichFeeTokens=true)", "value": { "metadata": { "environment": "mainnet", "timestamp": "2024-03-14T12:00:00Z", "requestId": "123e4567-e89b-12d3-a456-426614174000", "ignoredChainCount": 0, "validChainCount": 1 }, "data": { "evm": { "1": { "chainId": 1, "displayName": "Ethereum", "selector": "5009297550715157269", "internalId": "ethereum-mainnet", "feeTokens": [ { "symbol": "GHO", "name": "Gho Token", "address": "0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f", "decimals": 18 }, { "symbol": "LINK", "name": "ChainLink Token", "address": "0x514910771AF9Ca656af840dff83E8264EcF986CA", "decimals": 18 }, { "symbol": "WETH", "name": "Wrapped Ether", "address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "decimals": 18 } ], "router": "0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", "rmn": "0x411dE17f12D1A34ecC7F45f49844626267c75e81", "registryModule": "0x13022e3e6C77524308BD56AEd716E88311b2E533", "tokenAdminRegistry": "0xb22764f98dD05c789929716D677382Df22C05Cb6", "tokenPoolFactory": "0x17D8a409fE2ceF2d3808bcB61F14aBEFfc28876e", "chainType": "evm", "chainFamily": "evm", "supported": true } } }, "ignored": [] } } } } } }, "400": { "description": "Invalid request parameters", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/tokens": { "get": { "tags": ["tokens"], "summary": "Retrieve CCIP token information", "description": "Returns information about Cross-Chain Interoperability Protocol (CCIP) supported tokens. The response includes token details organized by token symbol, with chain-specific information nested under each token and indexed by chain ID or selector (depending on the outputKey parameter).", "operationId": "getTokens", "parameters": [ { "name": "environment", "in": "query", "required": true, "schema": { "type": "string", "enum": ["mainnet", "testnet"] }, "description": "The network environment to query" }, { "name": "token_id", "in": "query", "schema": { "type": "string" }, "description": "Filter by token canonical identifier (e.g., \"LINK\" for Chainlink token, or \"LINK,ETH\" for multiple tokens)", "example": "LINK,ETH" }, { "name": "chain_id", "in": "query", "schema": { "type": "string" }, "description": "Filter by chain ID where the token is supported (e.g., \"1\" for Ethereum, or \"1,56\" for Ethereum and BSC)", "example": "1,56" }, { "name": "outputKey", "in": "query", "schema": { "type": "string", "enum": ["chainId", "selector", "internalId"], "default": "chainId" }, "description": "Key to use for organizing the response data" } ], "responses": { "200": { "description": "Successful response with token data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenApiResponse" }, "example": { "metadata": { "environment": "mainnet", "timestamp": "2024-03-14T12:00:00Z", "requestId": "123e4567-e89b-12d3-a456-426614174000", "ignoredTokenCount": 0, "validTokenCount": 1 }, "data": { "LINK": { "1": { "chainId": 1, "chainName": "Ethereum", "decimals": 18, "destinations": [ "1088", "1111", "1868", "2020", "324", "34443", "42220", "592", "81457", "8453" ], "name": "ChainLink Token", "poolAddress": "0xE31009Ac8385147A74463F686Dd148e99d291739", "poolType": "lockRelease", "symbol": "LINK", "tokenAddress": "0x514910771AF9Ca656af840dff83E8264EcF986CA" }, "42220": { "chainId": 42220, "chainName": "Celo", "decimals": 18, "destinations": ["1"], "name": "ChainLink Token", "poolAddress": "0xEB521366531411b982D1bc822A9fa09EDd94E309", "poolType": "burnMint", "symbol": "LINK", "tokenAddress": "0xd07294e6E917e07dfDcee882dd1e2565085C2ae0" } } }, "ignored": [] } } } }, "400": { "description": "Invalid request parameters", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/lanes": { "get": { "tags": ["lanes"], "summary": "Retrieve CCIP lane information", "description": "Returns information about Cross-Chain Interoperability Protocol (CCIP) lanes between supported chains. Each lane represents a unidirectional connection from a source chain to a destination chain, with associated onRamp and offRamp contracts and supported tokens.", "operationId": "getLanes", "parameters": [ { "name": "environment", "in": "query", "required": true, "schema": { "type": "string", "enum": ["mainnet", "testnet"] }, "description": "The network environment to query" }, { "name": "sourceChainId", "in": "query", "schema": { "type": "string" }, "description": "Filter by source chain ID. Multiple chain IDs can be specified using comma-separated values", "example": "1,56" }, { "name": "destinationChainId", "in": "query", "schema": { "type": "string" }, "description": "Filter by destination chain ID. Multiple chain IDs can be specified using comma-separated values", "example": "137,42161" }, { "name": "sourceSelector", "in": "query", "schema": { "type": "string" }, "description": "Filter by source chain CCIP selector. Multiple selectors can be specified using comma-separated values", "example": "5009297550715157269" }, { "name": "destinationSelector", "in": "query", "schema": { "type": "string" }, "description": "Filter by destination chain CCIP selector. Multiple selectors can be specified using comma-separated values", "example": "4949039107694359620" }, { "name": "sourceInternalId", "in": "query", "schema": { "type": "string" }, "description": "Filter by source chain internal identifier. Multiple IDs can be specified using comma-separated values", "example": "ethereum-mainnet" }, { "name": "destinationInternalId", "in": "query", "schema": { "type": "string" }, "description": "Filter by destination chain internal identifier. Multiple IDs can be specified using comma-separated values", "example": "polygon-mainnet" }, { "name": "version", "in": "query", "schema": { "type": "string" }, "description": "Filter by lane version. Only lanes where both onRamp and offRamp match the specified version will be returned", "example": "1.6.0" }, { "name": "outputKey", "in": "query", "schema": { "type": "string", "enum": ["chainId", "selector", "internalId"], "default": "chainId" }, "description": "Key format to use for organizing the lane keys in the response" } ], "responses": { "200": { "description": "Successful response with lane data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LaneApiResponse" }, "example": { "metadata": { "environment": "mainnet", "timestamp": "2024-01-15T10:30:00Z", "requestId": "123e4567-e89b-12d3-a456-426614174000", "ignoredLaneCount": 0, "validLaneCount": 2 }, "data": { "1_to_56": { "sourceChain": { "chainId": 1, "displayName": "Ethereum Mainnet", "selector": "5009297550715157269", "internalId": "ethereum-mainnet" }, "destinationChain": { "chainId": 56, "displayName": "BNB Smart Chain", "selector": "13264668187771770619", "internalId": "bsc-mainnet" }, "onRamp": { "address": "0x925228D7B82d883Dde340A55Fe8e6dA56244A22C", "version": "1.6.0", "enforceOutOfOrder": false }, "offRamp": { "address": "0xdf85c8381954694E74abD07488f452b374A4B4cC", "version": "1.6.0" }, "supportedTokens": ["LINK", "CCIP-BnM", "USDC"] }, "1_to_137": { "sourceChain": { "chainId": 1, "displayName": "Ethereum Mainnet", "selector": "5009297550715157269", "internalId": "ethereum-mainnet" }, "destinationChain": { "chainId": 137, "displayName": "Polygon Mainnet", "selector": "4051577828743386545", "internalId": "polygon-mainnet" }, "onRamp": { "address": "0x3df8dAe2d123081c4D5E946E655F7c109B9Dd630", "version": "1.5.0" }, "offRamp": { "address": "0x0af338C8545eb6265FedC01BEca4cAe0d94DA9Da", "version": "1.5.0" }, "supportedTokens": ["LINK", "USDC"] } }, "ignored": [] } } } }, "400": { "description": "Bad request - invalid parameters", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } } }, "components": { "schemas": { "ChainMetadata": { "type": "object", "required": ["environment", "timestamp", "requestId", "ignoredChainCount", "validChainCount"], "properties": { "environment": { "type": "string", "enum": ["mainnet", "testnet"], "description": "The network environment" }, "timestamp": { "type": "string", "format": "date-time", "description": "ISO timestamp of the response" }, "requestId": { "type": "string", "format": "uuid", "description": "Unique identifier for the request" }, "ignoredChainCount": { "type": "integer", "minimum": 0, "description": "Number of chains ignored due to configuration issues" }, "validChainCount": { "type": "integer", "minimum": 0, "description": "Number of valid chains in the response" }, "searchQuery": { "type": "string", "description": "The search query that was used (only present when search parameter was provided)" }, "searchType": { "$ref": "#/components/schemas/SearchType", "description": "The detected type of search query (only present when search parameter was provided)" } } }, "SearchType": { "type": "string", "enum": ["selector", "chainId", "internalId", "displayName"], "description": "The detected type of search query. 'selector' for CCIP selectors (>17 digits), 'chainId' for chain IDs (≤17 digits or Solana base58), 'internalId' for kebab-case identifiers, 'displayName' for fuzzy text search." }, "FeeTokenEnriched": { "type": "object", "required": ["symbol", "name", "address", "decimals"], "properties": { "symbol": { "type": "string", "description": "Token symbol (e.g., LINK, WETH)" }, "name": { "type": "string", "description": "Token name (e.g., Chainlink, Wrapped Ether)" }, "address": { "type": "string", "description": "Token contract address on this chain" }, "decimals": { "type": "integer", "minimum": 0, "maximum": 18, "description": "Number of decimals for the token" } } }, "ChainDetails": { "type": "object", "required": [ "chainId", "displayName", "selector", "internalId", "feeTokens", "router", "rmn", "chainType", "chainFamily", "supported" ], "properties": { "chainId": { "oneOf": [{ "type": "integer" }, { "type": "string" }], "description": "Identifier of the chain (numeric for EVM chains, string for Solana/Aptos chains)" }, "displayName": { "type": "string", "description": "Human-readable name of the chain. For supported chains, this comes from configuration. For unsupported chains, it is derived from the internalId." }, "selector": { "type": "string", "description": "CCIP chain selector" }, "internalId": { "type": "string", "description": "Internal identifier for the chain" }, "feeTokens": { "oneOf": [ { "type": "array", "items": { "type": "string" }, "description": "List of supported fee token symbols (when enrichFeeTokens=false)" }, { "type": "array", "items": { "$ref": "#/components/schemas/FeeTokenEnriched" }, "description": "Detailed fee token information (when enrichFeeTokens=true)" } ], "description": "Fee tokens - either as string symbols or enriched objects with addresses. Empty array for unsupported chains." }, "router": { "type": "string", "description": "CCIP Router contract address. Empty string for unsupported chains." }, "rmn": { "type": "string", "description": "Risk Management Network contract address. Empty string for unsupported chains." }, "chainType": { "type": "string", "enum": ["evm", "solana", "aptos", "sui", "canton", "ton", "tron", "stellar", "starknet"], "description": "Type of blockchain" }, "chainFamily": { "type": "string", "enum": ["evm", "solana", "aptos", "sui", "tron", "canton", "ton", "stellar", "starknet"], "description": "Blockchain family grouping" }, "supported": { "type": "boolean", "description": "Whether this chain is fully supported with complete configuration. Unsupported chains have minimal details (empty router, rmn, feeTokens)." }, "registryModule": { "type": "string", "description": "Registry Module contract address (EVM chains only)" }, "tokenAdminRegistry": { "type": "string", "description": "Token Admin Registry contract address (EVM and Aptos chains)" }, "tokenPoolFactory": { "type": "string", "description": "Token Pool Factory contract address (EVM chains only)" }, "feeQuoter": { "type": "string", "description": "Fee Quoter address (Solana chains only)" }, "mcms": { "type": "string", "description": "MCMS (Multi-Chain Management Service) address (Aptos chains only)" } } }, "ChainConfigError": { "type": "object", "required": ["chainId", "networkId", "reason", "missingFields"], "properties": { "chainId": { "type": "integer", "description": "Chain ID of the failed configuration" }, "networkId": { "type": "string", "description": "Network identifier of the failed configuration" }, "reason": { "type": "string", "description": "Reason for the configuration failure" }, "missingFields": { "type": "array", "items": { "type": "string" }, "description": "List of missing required fields" } } }, "ChainApiResponse": { "type": "object", "required": ["metadata", "data", "ignored"], "properties": { "metadata": { "$ref": "#/components/schemas/ChainMetadata" }, "data": { "type": "object", "properties": { "evm": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/ChainDetails" }, "description": "EVM chain details keyed by the specified output key" }, "solana": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/ChainDetails" }, "description": "Solana chain details keyed by the specified output key" }, "aptos": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/ChainDetails" }, "description": "Aptos chain details keyed by the specified output key" }, "sui": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/ChainDetails" }, "description": "Sui chain details keyed by the specified output key" }, "tron": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/ChainDetails" }, "description": "Tron chain details keyed by the specified output key" }, "canton": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/ChainDetails" }, "description": "Canton chain details keyed by the specified output key" }, "ton": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/ChainDetails" }, "description": "TON chain details keyed by the specified output key" }, "stellar": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/ChainDetails" }, "description": "Stellar chain details keyed by the specified output key" }, "starknet": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/ChainDetails" }, "description": "Starknet chain details keyed by the specified output key" } }, "description": "Chain details grouped by chain family" }, "ignored": { "type": "array", "items": { "$ref": "#/components/schemas/ChainConfigError" }, "description": "List of chains that could not be configured" } } }, "LaneMetadata": { "type": "object", "required": ["environment", "timestamp", "requestId", "ignoredLaneCount", "validLaneCount"], "properties": { "environment": { "type": "string", "enum": ["mainnet", "testnet"], "description": "The network environment" }, "timestamp": { "type": "string", "format": "date-time", "description": "ISO timestamp of the response" }, "requestId": { "type": "string", "format": "uuid", "description": "Unique identifier for the request" }, "ignoredLaneCount": { "type": "integer", "minimum": 0, "description": "Number of lanes ignored due to configuration issues" }, "validLaneCount": { "type": "integer", "minimum": 0, "description": "Number of valid lanes in the response" } } }, "ChainInfo": { "type": "object", "description": "Chain information used in lane endpoints. Note: chainType and chainFamily are intentionally excluded from this schema for API responses.", "required": ["chainId", "displayName", "selector", "internalId"], "properties": { "chainId": { "oneOf": [{ "type": "integer" }, { "type": "string" }], "description": "Identifier of the chain (numeric for EVM chains, string for Solana/Aptos chains)" }, "displayName": { "type": "string", "description": "Human-readable name of the chain" }, "selector": { "type": "string", "description": "CCIP chain selector as a string" }, "internalId": { "type": "string", "description": "Internal identifier used in configuration" } } }, "LaneDetails": { "type": "object", "required": ["sourceChain", "destinationChain", "onRamp", "offRamp", "supportedTokens"], "properties": { "sourceChain": { "$ref": "#/components/schemas/ChainInfo" }, "destinationChain": { "$ref": "#/components/schemas/ChainInfo" }, "onRamp": { "type": "object", "required": ["address", "version"], "properties": { "address": { "type": "string", "description": "OnRamp contract address" }, "version": { "type": "string", "pattern": "^\\d+\\.\\d+\\.\\d+$", "description": "Normalized semantic version of the OnRamp contract" }, "enforceOutOfOrder": { "type": "boolean", "description": "Whether the OnRamp enforces out-of-order execution" } } }, "offRamp": { "type": "object", "required": ["address", "version"], "properties": { "address": { "type": "string", "description": "OffRamp contract address" }, "version": { "type": "string", "pattern": "^\\d+\\.\\d+\\.\\d+$", "description": "Normalized semantic version of the OffRamp contract" } } }, "supportedTokens": { "type": "array", "items": { "type": "string" }, "description": "List of supported token keys (e.g., LINK, CCIP-BnM, USDC)" } } }, "LaneConfigError": { "type": "object", "required": ["sourceChain", "destinationChain", "reason", "missingFields"], "properties": { "sourceChain": { "type": "string", "description": "Source chain identifier that failed configuration" }, "destinationChain": { "type": "string", "description": "Destination chain identifier that failed configuration" }, "reason": { "type": "string", "description": "Human-readable reason for the configuration failure" }, "missingFields": { "type": "array", "items": { "type": "string" }, "description": "List of missing or invalid configuration fields" } } }, "LaneApiResponse": { "type": "object", "required": ["metadata", "data", "ignored"], "properties": { "metadata": { "$ref": "#/components/schemas/LaneMetadata" }, "data": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/LaneDetails" }, "description": "Lane data organized by dynamic lane keys (e.g., '1_to_56', 'ethereum-mainnet_to_polygon-mainnet')" }, "ignored": { "type": "array", "items": { "$ref": "#/components/schemas/LaneConfigError" }, "description": "List of lanes that could not be configured" } } }, "ErrorResponse": { "type": "object", "required": ["error", "message"], "properties": { "error": { "type": "string", "description": "Error type identifier" }, "message": { "type": "string", "description": "Human-readable error message" }, "requestId": { "type": "string", "format": "uuid", "description": "Unique identifier for the request, useful for debugging and support" } } }, "TokenMetadata": { "type": "object", "required": ["environment", "timestamp", "requestId", "ignoredTokenCount", "validTokenCount"], "properties": { "environment": { "type": "string", "enum": ["mainnet", "testnet"], "description": "The network environment" }, "timestamp": { "type": "string", "format": "date-time", "description": "ISO timestamp of the response" }, "requestId": { "type": "string", "format": "uuid", "description": "Unique identifier for the request" }, "ignoredTokenCount": { "type": "integer", "minimum": 0, "description": "Number of tokens ignored due to configuration issues" }, "validTokenCount": { "type": "integer", "minimum": 0, "description": "Number of valid tokens in the response" } } }, "TokenChainInfo": { "type": "object", "required": ["chainId", "chainName", "tokenAddress", "decimals", "poolType", "poolAddress"], "properties": { "chainId": { "oneOf": [{ "type": "integer" }, { "type": "string" }], "description": "Identifier of the chain (numeric for EVM chains, string for Solana/Aptos chains)" }, "chainName": { "type": "string", "description": "Human-readable name of the chain" }, "tokenAddress": { "type": "string", "description": "Token contract address on this chain" }, "decimals": { "type": "integer", "minimum": 0, "maximum": 18, "description": "Number of decimals used for the token" }, "poolType": { "type": "string", "enum": ["lockRelease", "burnMint", "usdc", "feeTokenOnly"], "description": "Type of pool for this token" }, "poolAddress": { "type": "string", "description": "Token pool contract address (if applicable)" } } }, "TokenChainData": { "type": "object", "required": ["chainId", "chainName", "tokenAddress", "decimals", "poolType", "poolAddress"], "properties": { "chainId": { "oneOf": [{ "type": "integer" }, { "type": "string" }], "description": "Identifier of the chain (numeric for EVM chains, string for Solana/Aptos chains)" }, "chainName": { "type": "string", "description": "Human-readable name of the chain" }, "tokenAddress": { "type": "string", "description": "Token contract address on this chain" }, "decimals": { "type": "integer", "minimum": 0, "maximum": 18, "description": "Number of decimals used for the token" }, "poolType": { "type": "string", "enum": ["lockRelease", "burnMint", "usdc", "feeTokenOnly"], "description": "Type of pool for this token" }, "poolAddress": { "type": "string", "description": "Token pool contract address (if applicable)" }, "name": { "type": "string", "description": "Name of the token" }, "symbol": { "type": "string", "description": "Symbol of the token" }, "destinations": { "type": "array", "items": { "type": "string" }, "description": "Destination chains this token can be sent to" } } }, "TokenDetails": { "type": "object", "required": ["symbol", "lanes", "chains"], "properties": { "symbol": { "type": "string", "description": "Token symbol identifier" }, "lanes": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "string" } }, "description": "Available token lanes: source chain to array of destination chains" }, "chains": { "type": "array", "items": { "$ref": "#/components/schemas/TokenChainInfo" }, "description": "Detailed information about the token on each chain" } } }, "TokenConfigError": { "type": "object", "required": ["symbol", "reason", "missingFields"], "properties": { "symbol": { "type": "string", "description": "Token symbol" }, "reason": { "type": "string", "description": "Reason for the configuration error" }, "missingFields": { "type": "array", "items": { "type": "string" }, "description": "List of missing required fields" } } }, "TokenApiResponse": { "type": "object", "required": ["metadata", "data", "ignored"], "properties": { "metadata": { "$ref": "#/components/schemas/TokenMetadata" }, "data": { "type": "object", "additionalProperties": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/TokenChainData" }, "description": "Map of chain IDs/selectors to chain-specific token details" }, "description": "Token data indexed by token symbol and then by chain ID/selector" }, "ignored": { "type": "array", "items": { "$ref": "#/components/schemas/TokenConfigError" }, "description": "List of tokens that were ignored due to configuration issues" } } } } } }