Retrieve a list of all blockchain networks supported by Octav, including chain metadata, icons, and explorer URLs. Results are sorted alphabetically by name.
Tip: Use this endpoint to discover valid chainKey values for other endpoints like Protocols . The chain list is cached for 24 hours — newly added chains may take up to 24h to appear.
Endpoint
GET https://api.octav.fi/v1/chains
No parameters required.
Response
Returns an array of supported chain objects.
Chain Fields
Blockchain network ID (e.g. "1" for Ethereum mainnet)
Short identifier used in API requests (e.g. "ethereum", "solana", "arbitrum")
Human-readable chain name (e.g. "Ethereum", "Solana")
Native token symbol (e.g. "ETH", "SOL")
Hex color code for UI display (e.g. "#627EEA")
Block explorer URL template for tokens
Block explorer URL template for transactions
Block explorer URL template for addresses
blockscoutExplorerAddressUrl
Blockscout explorer URL for addresses (null if unavailable)
blockscoutExplorerTokenUrl
Blockscout explorer URL for tokens (null if unavailable)
blockscoutExplorerTransactionUrl
Blockscout explorer URL for transactions (null if unavailable)
Whether portfolio tracking is supported on this chain
Whether transaction history is supported on this chain
Example Request
cURL
JavaScript
Python
TypeScript
curl "https://api.octav.fi/v1/chains" \
-H "Authorization: Bearer YOUR_API_KEY"
Example Response
[
{
"chainId" : "1" ,
"key" : "ethereum" ,
"name" : "Ethereum" ,
"symbol" : "ETH" ,
"color" : "#627EEA" ,
"imgSmall" : "https://images.octav.fi/chains/ethereum_icon.svg" ,
"imgLarge" : "https://images.octav.fi/chains/ethereum_icon.svg" ,
"explorerTokenUrl" : "https://etherscan.io/token/" ,
"explorerTransactionUrl" : "https://etherscan.io/tx/" ,
"explorerAddressUrl" : "https://etherscan.io/address/" ,
"blockscoutExplorerAddressUrl" : null ,
"blockscoutExplorerTokenUrl" : null ,
"blockscoutExplorerTransactionUrl" : null ,
"isPortfolioSupported" : true ,
"isTransactionsSupported" : true
},
{
"chainId" : "42161" ,
"key" : "arbitrum" ,
"name" : "Arbitrum" ,
"symbol" : "ETH" ,
"color" : "#28A0F0" ,
"imgSmall" : "https://images.octav.fi/chains/arbitrum_icon.svg" ,
"imgLarge" : "https://images.octav.fi/chains/arbitrum_icon.svg" ,
"explorerTokenUrl" : "https://arbiscan.io/token/" ,
"explorerTransactionUrl" : "https://arbiscan.io/tx/" ,
"explorerAddressUrl" : "https://arbiscan.io/address/" ,
"blockscoutExplorerAddressUrl" : null ,
"blockscoutExplorerTokenUrl" : null ,
"blockscoutExplorerTransactionUrl" : null ,
"isPortfolioSupported" : true ,
"isTransactionsSupported" : true
}
]
Use Cases
Build Chain Selector
Discover Chain Keys
Explorer Links
Populate a chain dropdown in your UI: const response = await fetch ( 'https://api.octav.fi/v1/chains' , {
headers: { 'Authorization' : `Bearer ${ apiKey } ` }
});
const chains = await response . json ();
// Filter to chains with portfolio support
const portfolioChains = chains . filter ( c => c . isPortfolioSupported );
// Build selector options
const options = portfolioChains . map ( chain => ({
value: chain . key ,
label: chain . name ,
icon: chain . imgSmall ,
color: chain . color
}));
Look up valid chain keys for use with other endpoints: const response = await fetch ( 'https://api.octav.fi/v1/chains' , {
headers: { 'Authorization' : `Bearer ${ apiKey } ` }
});
const chains = await response . json ();
// Get all valid chain keys
const chainKeys = chains . map ( c => c . key );
console . log ( 'Valid chain keys:' , chainKeys . join ( ', ' ));
// Check if a chain key is valid before querying protocols
function isValidChain ( key ) {
return chainKeys . includes ( key );
}
Generate block explorer links for addresses and transactions: const response = await fetch ( 'https://api.octav.fi/v1/chains' , {
headers: { 'Authorization' : `Bearer ${ apiKey } ` }
});
const chains = await response . json ();
const chainMap = Object . fromEntries ( chains . map ( c => [ c . key , c ]));
function getExplorerUrl ( chainKey , type , hash ) {
const chain = chainMap [ chainKey ];
if ( ! chain ) return null ;
switch ( type ) {
case 'address' : return chain . explorerAddressUrl + hash ;
case 'tx' : return chain . explorerTransactionUrl + hash ;
case 'token' : return chain . explorerTokenUrl + hash ;
}
}
// Example
const url = getExplorerUrl ( 'ethereum' , 'address' , '0x6426af...' );
// => "https://etherscan.io/address/0x6426af..."
Error Responses
Authentication failed. {
"error" : "Unauthorized" ,
"message" : "Invalid API key"
}
Solution: Check your API key in the Authorization header
Rate limit exceeded. {
"error" : "Rate limit exceeded" ,
"message" : "You have exceeded your rate limit" ,
"retry_after" : 60
}
Solution: Wait for the specified time or implement retry logic