Token API
ERC-20 token data, balances & prices
Comprehensive token data API for all EVM chains. Get real-time balances, historical prices, token metadata, and ownership across 100+ networks with a single API call.
Multi-chain Balances
Query token balances across all EVM chains in one request.
Real-time Prices
Live token prices from multiple DEXs and aggregators.
Token Metadata
Name, symbol, decimals, logos, and contract info.
Historical Data
Price history, balance snapshots, and transfer history.
Get Your API Key
Start building in under 5 minutes
No credit card required. Free tier includes 300M compute units/month.
Trusted by developers building:
Key Capabilities
Everything you need, nothing you don't.
Multi-chain Balances
Query token balances across all EVM chains in one request.
Real-time Prices
Live token prices from multiple DEXs and aggregators.
Token Metadata
Name, symbol, decimals, logos, and contract info.
Historical Data
Price history, balance snapshots, and transfer history.
Token Discovery
Search and discover tokens by name, symbol, or address.
Spam Detection
Automatic filtering of spam tokens and scam contracts.
Fast Response
Sub-100ms response times with global CDN caching.
100+ Chains
Support for Ethereum, Polygon, Arbitrum, Base, and more.
Webhook Updates
Get notified on balance changes and transfers.
Simple to Integrate
Get started with just a few lines of code. SDKs for every language.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@hanzo/tokens/ITokenRegistry.sol";
contract MultiTokenVault {
using SafeERC20 for IERC20;
ITokenRegistry public registry;
mapping(address => mapping(address => uint256)) public balances;
constructor(address _registry) {
registry = ITokenRegistry(_registry);
}
// Deposit any registered token
function deposit(address token, uint256 amount) external {
require(registry.isVerified(token), "Token not verified");
require(!registry.isSpam(token), "Spam token");
IERC20(token).safeTransferFrom(msg.sender, address(this), amount);
balances[msg.sender][token] += amount;
}
// Get token metadata from registry
function getTokenInfo(address token) external view returns (
string memory name,
string memory symbol,
uint8 decimals,
uint256 price
) {
return registry.getTokenInfo(token);
}
// Batch check balances across tokens
function getPortfolioValue(address user, address[] calldata tokens)
external view returns (uint256 totalValue)
{
for (uint i = 0; i < tokens.length; i++) {
(,,, uint256 price) = registry.getTokenInfo(tokens[i]);
totalValue += balances[user][tokens[i]] * price / 1e18;
}
}
}Built For
Portfolio Trackers
Build multi-chain portfolio apps with real-time valuations.
Wallet Applications
Display token balances and transaction history.
DeFi Dashboards
Track positions, yields, and token performance.
Trading Bots
Real-time price feeds for automated trading strategies.
Supported Chains
Start Building with Token API
Get your free API key and ship your first request in under 5 minutes. No credit card required.