Available Now

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.

Back to Web3 Overview

Get Your API Key

Start building in under 5 minutes

99.999%
Uptime
<50ms
Latency
100+
Chains

No credit card required. Free tier includes 300M compute units/month.

Trusted by developers building:

DeFiNFTsPaymentsGamingAI Agents

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.

TokenVault.sol
// 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

Ethereum
Polygon
Arbitrum
Optimism
Base
BNB Chain
Avalanche
Fantom
zkSync
Linea

Start Building with Token API

Get your free API key and ship your first request in under 5 minutes. No credit card required.