
Connect to KuCoin via Vezgo API
Accounts
Positions
Transactions
Support for Accounts, Positions and Transactions enabled.
Support for Positions & Balances:
- Spot
- Earn
- Staking
Supported Transaction Types:
- Spot: Trades, Deposits, Withdrawals, Convert, Transfers between accounts, Staking Profits, EARN (Profits), EARN (Subscription), Convert to KCS, KCS Pay Fees & Refunded Fees.
Additional Notes:
- Retrieve last 1 year of transaction history.
- We're working actively on enriching the supported transaction types.
Data mapping
A field-level guide to the Vezgo API data for KuCoin — 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 KuCoin |
|---|---|---|
| Account & wallet | account.wallets[] | KuCoin connects with an API key + secret + API passphrase (no OAuth, no wallet address); a read-only key is recommended, and on clients with read-only enforcement enabled a write/trade/withdraw-capable key is rejected at connect time. A connection is a single custodial account, surfaced as one entry in account.wallets[] (key on wallet.id). There is no balance reconciliation. |
| Balances / positions | account.balances[] | Per-asset balances on the KuCoin account. Each balance has ticker, amount, decimals and fiat_value (USD). asset_type is "crypto" for coins; the USD balance surfaces as a separate "cash" balance (ticker USD). Non-USD fiat may surface as "cash_equivalent", though some fiat tickers are classified upstream as "crypto". Staking / Earn positions are not surfaced as balances — staking appears only in transactions. No ticker_address — exchange holdings are identified by ticker. |
| Transactions | GET /accounts/:id/transactions | Deposits, withdrawals, spot trades, account transfers, converts, and staking / Earn activity (subscriptions, redemptions and rewards). A trade, convert, or staking move carries its two legs as parts. See "How to read a transaction" below. |
| Assets / securities | balance.ticker | Identified by ticker (e.g. BTC, ETH). No ticker_address — custodial exchange balances are not on-chain tokens. |
How to read a transaction
Each KuCoin 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, provider_ticker, amount, fiat_value in USD). A trade / convert has two parts (the received leg + the sent leg, and a fee leg when charged); a staking subscription / redemption has two legs (the asset and its staked counterpart); deposits, withdrawals, transfers and rewards have one part.
- Type — transaction_type (trade / deposit / withdrawal / staking / unstaking / reward / other) with transaction_subtype: transfer_in on an account transfer (transfers are surfaced as deposit / transfer_in) and refund on a refunded fee (typed other). Trades, deposits, withdrawals, staking, unstaking and rewards carry no subtype.
- Staking — a staking subscription (staking) or redemption (unstaking) is a two-leg move where the staked leg carries provider_ticker with a .staked suffix (e.g. ticker ETH, provider_ticker ETH.staked).
- Counterparty — a deposit carries the on-chain from_address (where the coins came from) and a withdrawal carries the to_address (the destination); trades and ledger entries carry no address.
- Fees — fees[] (the trade / network / withdrawal fee): the native fee asset and amount, with fiat_value in USD.
- misc.origin_id is KuCoin's id for the activity (the wallet transaction id for a deposit / withdrawal, the trade id for a trade, or the ledger id). misc.origin_type is KuCoin's raw type (deposit, withdrawal, trade, Transfer, Convert, staking, unstaking, reward, …); spot trades also carry misc.origin_pair (e.g. BTC-USDT), misc.order_id and misc.order_type (converts and ledger-sourced trades may omit some of these). There is no separate transaction_hash field — for a deposit / withdrawal the wallet transaction id is surfaced as misc.origin_id.
// One Vezgo transaction = a KuCoin activity (a trade / convert / staking move carries its two legs as parts)
const id = tx.misc.origin_id; // KuCoin id: wallet tx id (deposit/withdrawal), trade id, or ledger id
const kind = tx.misc.origin_type; // raw KuCoin type: deposit | withdrawal | trade | Transfer | Convert | staking | unstaking | reward
const pair = tx.misc.origin_pair; // e.g. "BTC-USDT" on a spot trade (else undefined)
const type = tx.transaction_type; // trade | deposit | withdrawal | staking | unstaking | reward | other
const subtype = tx.transaction_subtype; // transfer_in | refund | (else none)
const parts = tx.parts ?? []; // trade/convert/staking = 2 legs; deposit/withdrawal/transfer/reward = 1
const fees = tx.fees ?? []; // trade / network / withdrawal fee (native asset + USD)
// Deposits expose from_address, withdrawals expose to_address (on parts[]).
// transaction_hash is null — the wallet tx id is in misc.origin_id for deposits/withdrawals.
// Staking legs carry provider_ticker with a .staked suffix (e.g. ETH.staked).
// No tokenTransfers / nftTransfers / internalTransfers arrays (exchange, not on-chain).| Where to read it | Attributes | What it is |
|---|---|---|
tx.parts[] | direction, ticker, provider_ticker, amount, fiat_value, from_address, to_address | Value movement. A trade / convert / staking move has 2 legs; deposits, withdrawals, transfers and rewards have 1. A staking leg's provider_ticker carries a .staked suffix. A deposit carries from_address and a withdrawal carries to_address; trades / ledger entries carry no address. |
tx.transaction_type · transaction_subtype | trade/deposit/withdrawal/staking/unstaking/reward/other · transfer_in, refund | Normalized classification — prefer these over the raw misc.origin_type. An account transfer is surfaced as deposit with a transfer_in subtype; a refunded fee is typed other with a refund subtype. Trades, deposits, withdrawals, staking, unstaking and rewards carry no subtype. |
tx.fees[] | ticker, amount, fiat_value | Trade / network / withdrawal fee — the native fee asset and amount, with fiat_value in USD. |
tx.misc | origin_id, origin_type, origin_pair, order_id, order_type | origin_id is the wallet tx id (deposit / withdrawal), trade id, or ledger id (there is no separate transaction_hash). Spot trades also carry origin_pair (e.g. BTC-USDT), order_id and order_type; converts and ledger-sourced trades may omit some of these. |
misc.origin_type is KuCoin's raw transaction type. Always classify off transaction_type. Common values:
- deposit
- withdrawal
- trade
- Transfer
- Convert
- staking
- unstaking
- reward
Supported
- Crypto balances, plus the USD cash balance and other fiat
- Deposits and withdrawals, with the on-chain counterparty address (from / to)
- Spot trades and converts (each carries its two legs as parts)
- Staking / Earn: subscriptions (staking), redemptions (unstaking) and rewards
- Account transfers (surfaced as deposit / transfer_in)
- Native fee asset + USD fee reporting
- USD fiat valuation for balances and transactions
Notes & limitations
- Balances are the exchange's reported (custodial) holdings — there is no on-chain wallet address, and staking / Earn positions are not surfaced as balances (staking appears only in transactions).
- USD is the valuation currency; the USD balance is typed asset_type "cash", and non-USD fiat may be typed "cash_equivalent" (some fiat tickers are classified upstream as "crypto").
- There is no transaction_hash field — for a deposit / withdrawal the wallet transaction id is surfaced as misc.origin_id. Deposits carry from_address and withdrawals carry to_address.
- Transaction history covers roughly the last year on the first sync, then syncs incrementally from the last fetch.
- A read-only key is recommended; on clients with read-only enforcement enabled, write/trade/withdraw-capable keys are rejected at connect time.
- When a USD rate is unavailable, a part's fiat_value falls back to the raw token amount (rather than a USD value).
Try to connect to KuCoin 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