
Connect to Coinbase via Vezgo API
Accounts
Positions
Transactions
Support for Accounts, Positions and Transactions enabled.
Support for Positions & Balances:
- Spot
- Fiat Wallet
- Crypto Wallets
- Vaults
- Staking
Supported Transaction Types:
- Spot: Deposits/Withdrawals (fiat, exchange, vault & pro), Trades (including advanced), Rewards (staking & inflation), Card spending, Buy/Sell, Interests & Transfers.
Additional Notes:
- The total balance in the account's native currency. | Positions values are in USD.
- Imports the completed transactions.
- The end user must authenticate using the OAuth flow.
Data mapping
A field-level guide to the Vezgo API data for Coinbase — 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 Coinbase |
|---|---|---|
| Account & wallets | account.wallets[] | Coinbase connects via OAuth (no wallet address). A connection holds multiple custodial wallets — one per currency (crypto and fiat), plus vaults — each an entry in account.wallets[] with wallet.id and wallet.name. Key on wallet.id. |
| Balances / positions | account.balances[] | Per-currency balances (crypto and fiat) consolidated across the connection’s wallets, vaults and on-hold balances. Each balance has ticker, amount, decimals and fiat_value — valued in the account's native currency (read the balance's fiat_ticker; often non-USD). Staked balances use asset_type "staked". No ticker_address — exchange holdings are identified by ticker, not an on-chain contract. |
| Transactions | GET /accounts/:id/transactions | Buys, sells and trades, sends/receives, fiat & crypto deposits/withdrawals, and rewards. The two legs of a buy/sell trade are reconciled into one transaction. See "How to read a transaction" below. |
| Assets / securities | balance.ticker | Identified by ticker (e.g. BTC, ETH). Staking / legacy tickers are normalized (e.g. ETH2 → ETH, RNDR → RENDER). No ticker_address — custodial exchange balances are not on-chain tokens. |
| KYC data | GET /accounts/:id/kyc-data | Coinbase exposes KYC (email, name, username, country_code, native currency) via the feature-gated KYC endpoint. Opt-in per team. |
How to read a transaction
Each Coinbase activity maps to a Vezgo transaction. Read the value movement from parts[], and classify with transaction_type / transaction_subtype:
- Value movement — parts[] (direction sent/received, ticker, amount, fiat_value). A buy/sell trade has two parts (the crypto leg + the fiat/quote leg); other activities have one.
- Type — transaction_type (trade / deposit / withdrawal / reward / staking / unstaking) with a finer transaction_subtype (buy, sell, fiat_deposit, transfer_in, transfer_out, onchain_deposit, onchain_withdrawal, vault_deposit, vault_withdrawal, staking_reward, interest_income, …). Some raw types (e.g. pro_withdrawal, exchange_deposit, cardspend, transfer) have no normalized subtype and resolve to transaction_type "other".
- Fees — fees[] (the trade / transaction fee).
- misc.origin_id is the Coinbase transaction id (a reconciled trade uses a combined id); misc.origin_type is Coinbase's raw type. On-chain sends/receives also include transaction_hash and from/to addresses on the part.
// One Vezgo transaction = a Coinbase activity (buy/sell legs reconciled into one)
const id = tx.misc.origin_id; // Coinbase tx id (or combined id for a trade)
const kind = tx.misc.origin_type; // Coinbase raw type (buy, sell, send, fiat_deposit, …)
const type = tx.transaction_type; // trade | deposit | withdrawal | reward | staking | …
const subtype = tx.transaction_subtype; // buy | sell | fiat_deposit | transfer_in | …
const parts = tx.parts ?? []; // trade = 2 legs (crypto + fiat); else 1
const fees = tx.fees ?? []; // e.g. buy/sell fee
if (tx.transaction_hash) { /* on-chain send/receive — parts carry from/to addresses */ }
// Coinbase has no tokenTransfers / nftTransfers / internalTransfers arrays.| Where to read it | Attributes | What it is |
|---|---|---|
tx.parts[] | direction, ticker, amount, fiat_value, from_address, to_address | Value movement. A trade has 2 legs (crypto + fiat); other activities have 1. |
tx.transaction_type · transaction_subtype | trade/deposit/withdrawal/reward/… · buy/sell/fiat_deposit/… | Normalized classification — prefer these over the raw misc.origin_type. |
tx.fees[] | ticker, amount, fiat_value | Transaction / trade fee (e.g. buy or sell fee). |
misc.origin_type is Coinbase's raw activity type. Common values:
- buy
- sell
- trade
- advanced_trade_fill
- send
- fiat_deposit
- fiat_withdrawal
- pro_deposit
- pro_withdrawal
- vault_deposit
- vault_withdrawal
- staking_reward
- interest
Supported
- Crypto and fiat balances across wallets and vaults
- Buys, sells and trades (legs reconciled into one transaction)
- Sends / receives (on-chain and internal transfers)
- Fiat deposits and withdrawals
- Staking rewards, interest, and staking / unstaking
- On-hold balances
- KYC data (feature-gated)
- Fiat valuation for balances and transactions (in the account's native currency)
Notes & limitations
- Balances are the exchange's reported (custodial) holdings — there is no on-chain wallet address.
- Fiat values use the account's native currency (e.g. EUR / GBP / CAD), not necessarily USD — read fiat_ticker rather than assuming USD.
- Vault, on-hold and Advanced-Trade balances are summed into the per-currency balance and can't be separated by source.
- Only completed transactions are imported.
- transaction_hash is present only for on-chain sends/receives.
Try to connect to Coinbase 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