
Connect to Base via Vezgo API
Accounts
Positions
Transactions
Support for Accounts, Positions, Transactions and Nfts enabled.
Support of native, tokens, NFT positions and transactions.
Import up to 15,000 transactions.
Scam tokens are filtered.
Data mapping
A field-level guide to the Vezgo API data for Base — what each attribute means and where to read it — so you can map it into your own system.
| Data | Where to read it | Source on Base |
|---|---|---|
| Account & wallet | account.wallets[].address | The connected Base address (0x…). One address is one account; wallet.address is the stable identity reused across syncs and reconnects. |
| Balances / positions | account.balances[] | Native ETH, ERC-20 tokens and NFTs from the live on-chain snapshot. Each balance has ticker, amount, decimals and fiat_value (USD); ERC-20 add ticker_address; NFTs add asset_type "nft" (when sync_nfts is on). |
| Transactions | GET /accounts/:id/transactions | Native, ERC-20, NFT and internal transfers plus swaps, consolidated per on-chain hash. See "How to read a transaction" below. |
| Assets / securities | balance.ticker · balance.ticker_address | Native ETH uses ticker ETH. ERC-20 assets are keyed by ticker_address (contract address) so the same symbol on different chains stays distinct. |
How to read a transaction
Vezgo consolidates every movement that shares one on-chain transaction hash (misc.origin_id) into a single Vezgo transaction. Read the native movement from the transaction itself, and the token / NFT / internal movements from misc:
- Native ETH transfer — on the transaction itself: parts[] (ticker "ETH", amount, fiat_value, from/to) and gas in fees[] (always ETH).
- ERC-20 token transfers — misc.tokenTransfers[].
- NFT transfers — misc.nftTransfers[].
- Internal (contract-triggered) ETH transfers — misc.internalTransfers[] (also flagged by misc.hasInternalTransaction).
// One Vezgo transaction = all movements sharing one hash (tx.misc.origin_id)
const hash = tx.misc.origin_id; // on-chain transaction hash
const kind = tx.misc.origin_type; // chain-level category (see list below)
const native = tx.parts?.[0]; // native ETH transfer (ticker "ETH")
const gas = tx.fees?.[0]; // gas fee, always in ETH
const tokenTransfers = tx.misc.tokenTransfers ?? []; // ERC-20 movements
const nftTransfers = tx.misc.nftTransfers ?? []; // NFT movements
const internal = tx.misc.internalTransfers ?? []; // internal ETH transfers
if (tx.misc.isSwap) { /* DEX swap — tokenTransfers usually holds both legs */ }
if (tx.misc.failed) { /* reverted: ignore parts + all *Transfers (they may still be present); only gas (fees[]) was spent */ }| Where to read it | Attributes | What it is |
|---|---|---|
tx.parts[0] | direction, ticker ("ETH"), amount, fiat_value, from_address, to_address | Native ETH transfer. |
tx.fees[0] | ticker ("ETH"), amount, fiat_value | Gas / network fee — always paid in ETH. |
tx.misc.tokenTransfers[] | direction, ticker, token_name, amount, fiat_value, token_address, possible_spam, verified_contract | ERC-20 token movements. amount is negative when sent. |
tx.misc.nftTransfers[] | direction, token_address, contract_type, amount, from_address, to_address, possible_spam, verified_collection | NFT (ERC-721 / ERC-1155) movements. |
tx.misc.internalTransfers[] | direction, amount, token_symbol ("ETH"), fiat_value, from_address, to_address | Native ETH transfers triggered inside a contract call. |
misc.origin_type is the upstream chain-data provider's category, passed through best-effort — treat it as open-ended (not a fixed set); when no category is available it falls back to lowercase deposit / withdrawal / unknown. Common values:
- Send
- Receive
- NFT Send
- NFT Receive
- Token Send
- Token Receive
- Deposit
- Withdraw
- Token Swap
- Airdrop
- Mint
- Burn
- NFT Purchase
- NFT Sale
- Borrow
- Approve
- Revoke
- Contract Interaction
Supported
- Native ETH balances and transfers
- ERC-20 token balances and transfers
- NFTs (ERC-721 / ERC-1155) — when sync_nfts is enabled
- Internal transactions
- DEX swaps
- Gas / network fees (reported in ETH)
- USD fiat valuation for balances and transactions
Notes & limitations
- ERC-20 and NFT balances reflect the current on-chain snapshot.
- Spam tokens are filtered out of balances on chains that maintain a curated token list (e.g. Ethereum, BNB Chain, Polygon, Avalanche, Fantom, Cronos); on others (e.g. Arbitrum, Base, Optimism) possible_spam balances may appear. A balance's fiat_value can be null for unverified or unpriced tokens (balances may carry misc.is_verified_contract).
- possible_spam / verified_contract are transaction tokenTransfers fields, not balance fields.
- On a failed transaction (misc.failed), the tokenTransfers / nftTransfers / internalTransfers arrays may still be present but did not execute — count only the gas fee.
- A few Arbitrum integrations use an alternative data source with a different shape: movements are not consolidated into misc.tokenTransfers / nftTransfers / internalTransfers; origin_type is limited to deposit / withdrawal / unknown; one on-chain hash (misc.origin_id) can map to multiple Vezgo transactions (not a unique key there); parts[0] may be an ERC-20/NFT movement rather than the native asset; and fees[0].ticker may be a token symbol. Handle these gracefully on that path.
Try to connect to Base in our Demo Sandbox
Open DemoLet's get you started
To get your API Keys, sign up on the portal or reach out to the team at sales@vezgo.com