PostsCaaS keys
14 min read
Master key versus sub-account key
Two credentials, two jobs. The master key runs the broker. The sub-account key acts as one end user.
On this page
If you're new to Binance Crypto-as-a-Service (CAAS / Link), one mistake shows up constantly:
using the wrong API key for the job.
CAAS is built on a simple account tree:
- Master account = the partner's Binance account (holds the CAAS permission).
- Sub-account = one Binance account per end user (balances, orders, deposit address).
That tree gives you two different credentials, and they are not interchangeable.
Master account API key = "run the broker"#
Use the master key for partner operations — basically everything under /sapi/v1/broker/*:
- Create / manage sub-accounts
- Issue, permission, IP-restrict, and delete sub-account API keys
- Enable Futures on a sub (before you create that sub's key)
- Move funds between master and subs (and, with the right setup, between subs)
- Set revenue-share commission / read rebates
- If you're on Markup: fee groups and markup reporting (also master-only)
Public docs also put external withdrawals on the master key. A sub-account cannot withdraw off-exchange. The usual pattern is: transfer sub → master, then withdraw from master.
Keep the master key on your backend only. It can create and delete accounts.
Sub-account API key = "act as one end user"#
Use the sub key for that one user's day-to-day crypto ops:
- Spot / futures / margin trading (main
/api,/fapi,/dapiAPIs — not the broker API) - Fetch that user's deposit address and deposit history
- Open that user's user data stream (balances, orders, fills)
Important constraints newbies miss:
- KYC first. You cannot create a sub API key until that sub's KYC has passed. Until then the sub is reduce-only (cut positions / withdraw paths as documented) — not a full trading account.
- Enable Futures (or fund margin) before creating the key.
futuresTrade/marginTradeare set at key creation. Create the key too early and Futures simply won't work — you'll need a new key. - No mega-stream. There is no single user-data stream for all your end users. Plan one stream per account per product family. Market data streams are different: public, no API key, one feed can serve everyone.
- Options aren't in the CAAS sub-account permission set (docs: options not available to CAAS sub-accounts).
Mental model in one line#
Master key builds and funds the house. Sub key lives in one room and trades there.
Mixing them is the classic integration bug: calling broker endpoints with a sub key, or trying to trade / pull a deposit address with the master key "for" a user.
Capability matrix#
Public Binance Developer Docs only. A cell says Not stated where those docs are silent. This page does not fill the gap.
Yes means the docs say this key does it. No means the docs say it does not, or that it is the wrong key. N/A means it does not apply to that key's role. Separate means a different credential family, not the master or sub-account CAAS key.
The sections below are the full reading. On a narrow window the five-column tables scroll sideways.
Definitions · FAQ short rule · A. Accounts · B. Sub keys · C. Transfers · D. Deposits and withdrawals · E. Trading · F. Fees · G. KYC SaaS · H. Streams · I. Other · Not stated
How the docs define master vs sub#
| Level | What it is (public docs) |
|---|---|
| Master account | The partner's own Binance account. Holds the CAAS permission and is the parent of every end-user account. |
| Sub-account | One Binance account per end user, created by the partner through the API. Holds the end user's balances and orders. |
| Master account API key | Credential for every /sapi/v1/broker/* call (account creation, transfers, commission) and for withdrawals. Created by the partner in the Binance interface (Binance does not issue it). |
| Sub-account API key | Credential scoped to one sub-account — used for trading and wallet ops on behalf of that one end user (spot/futures trading APIs, deposit address, that account's user data stream). Issued via master → POST /sapi/v1/broker/subAccountApi after KYC pass. |
Architecture, from the integration guide:
Your front end → Your backend → CAAS API (/sapi/v1/broker/*) [master account API key]
└──────────► Trading APIs (/api, /fapi, /dapi) [sub-account API key]
The docs call mixing the two credentials the most common integration mistake.
Short rule from the FAQ#
| You need | Use |
|---|---|
Every /sapi/v1/broker/* call | Master |
| Withdrawals | Master |
| Trading | Sub-account |
| That account's deposit address | Sub-account |
| That account's user data stream | Sub-account |
That is the FAQ's "Which API key do I use for which call?" The rows in A–I are the longer public-docs reading of the same split.
A. Account lifecycle (partner ops)#
| # | Action / capability | Master key | Sub-account key | Source note |
|---|---|---|---|---|
| 1 | Hold CAAS permission / be parent of end-user accounts | Yes (account-level; key used to call broker APIs) | No | Getting started; overview |
| 2 | Query broker info (GET /sapi/v1/broker/info) | Yes | No (broker family = master) | Integration guide §5; FAQ key rule; CAAS APIs |
| 3 | Create sub-account (POST /sapi/v1/broker/subAccount) | Yes | No | Integration guide §6; CAAS APIs, Account |
| 4 | Delete sub-account | Yes (Account area: "create and delete") | No | CAAS APIs, Account |
| 5 | List / query sub-accounts (GET /sapi/v1/broker/subAccount…) | Yes | No | Integration guide signing example; CAAS APIs |
| 6 | Enable Futures wallet on a sub (POST /sapi/v1/broker/subAccount/futures) | Yes | No | Integration guide §6 step 4; FAQ restrictions |
| 7 | Enable Margin wallet via dedicated enable endpoint | N/A — no enable endpoint; margin wallet created by transferring assets in | N/A | Integration guide §6 (warning) |
| 8 | Options trading for CAAS sub-accounts | No — Options are not available to CAAS sub-accounts | No | Integration guide §6 |
B. Sub-account API key management (always master → broker)#
| # | Action / capability | Master key | Sub-account key | Source note |
|---|---|---|---|---|
| 9 | Create sub-account API key (POST /sapi/v1/broker/subAccountApi) | Yes | No | Integration guide §6 step 5; Getting started order |
| 10 | Set creation-time trade flags (canTrade, marginTrade, futuresTrade) | Yes (at create) | No | Integration guide §6; Getting started warning (order of wallet enable vs key create) |
| 11 | Choose HMAC vs Ed25519/RSA (publicKey param) for sub key | Yes | N/A | Integration guide §4, key types |
| 12 | Change sub-key permissions (POST …/subAccountApi/permission) | Yes | No | Integration guide §6 step 6 |
| 13 | Set sub-key IP restrictions (POST …/subAccountApi/ipRestriction v2) | Yes | No | Integration guide §6 step 6 |
| 14 | Enable universal-transfer permission on a sub key (…/permission/universalTransfer) | Yes | No | Integration guide §§6–7 |
| 15 | Delete sub-account API keys | Yes (Account area: "issue and delete") | No | CAAS APIs |
| 16 | Create API key before KYC PASS | Blocked (-9000 KYC not approved) | N/A (key does not exist yet) | Integration guide §6; FAQ; KYC overview |
C. Internal fund movement (master ↔ sub / sub ↔ sub)#
| # | Action / capability | Master key | Sub-account key | Source note |
|---|---|---|---|---|
| 17 | Spot transfer master ↔ sub (POST /sapi/v1/broker/transfer) | Yes | No | Integration guide §7; CAAS APIs, Asset |
| 18 | Futures transfer master ↔ sub (POST /sapi/v1/broker/transfer/futures) | Yes | No | Integration guide §7 |
| 19 | Universal transfer across Spot/USD-M/COIN-M or between two subs (POST /sapi/v1/broker/universalTransfer) | Yes (call); requires universal-transfer permission enabled on the relevant sub key first | Permission flag only — call still master/broker | Integration guide §7 choosing table |
| 20 | Futures account transfer helper (POST /sapi/v1/broker/futures/accountTransfer) | Yes | No | Integration guide §7 |
| 21 | Query transfer history (spot/futures/universal broker GETs) | Yes | No | Integration guide §7 |
| 22 | Query sub spot/margin/futures balance summaries (broker *Summary) | Yes | No (use trading APIs with sub key for that account's own view — see trading) | Integration guide §7; CAAS APIs, Asset |
| 23 | Reach margin wallet via broker transfer fromAccountType/toAccountType | No — only SPOT, USDT_FUTURE, COIN_FUTURE | N/A | Integration guide §7 limits |
| 24 | Transfer into a non-KYC'd sub from master | No (FAQ: master cannot deposit into a non-KYC'd sub) | N/A | FAQ, overview of restrictions |
| 25 | Non-KYC'd sub → master (or → KYC'd sub) withdraw/transfer path | Yes (broker transfers from the sub side as allowed) | N/A | FAQ: a non-KYC'd sub can withdraw to the master or to a KYC'd sub, not to another non-KYC'd sub |
D. External deposits & withdrawals (Wallet /sapi/v1/capital/*)#
| # | Action / capability | Master key | Sub-account key | Source note |
|---|---|---|---|---|
| 26 | Get sub-account deposit address (GET /sapi/v1/capital/deposit/address) | No (use sub key) | Yes | Integration guide §8 table; FAQ |
| 27 | Sub-account deposit history (GET /sapi/v1/capital/deposit/hisrec) | No (table: sub key) | Yes | Integration guide §8 |
| 28 | Read-only sub deposit history from master (GET /sapi/v1/broker/subAccount/depositHist v1/v2) | Yes | No | Integration guide §8 |
| 29 | Submit withdrawal (POST /sapi/v1/capital/withdraw/apply) | Yes | No — "A sub-account cannot withdraw" | Integration guide §8; FAQ |
| 30 | Withdrawal history (GET /sapi/v1/capital/withdraw/history) | Yes | No (table: master) | Integration guide §8 |
| 31 | Per-coin network config (GET /sapi/v1/capital/config/getall) | Yes ("Either") | Yes ("Either") | Integration guide §8 |
| 32 | Off-exchange path pattern | Transfer sub → master (broker), then withdraw with master key | Cannot withdraw externally | Integration guide §8; FAQ |
| 33 | Travel-rule withdrawal (POST /sapi/v1/localentity/withdraw/apply) when the entity requires it | Yes (FAQ migrates from capital withdraw; entity-dependent) | Not stated as sub-capable; sub cannot withdraw generally | FAQ, travel-rule questions |
| 34 | Travel Rule /localentity/broker/* "submit on an end user's behalf" | Partner path exists (docs point to the Travel Rule catalog) | Not stated | Integration guide §8 note; overview Travel Rule row |
E. Trading (main trading APIs — not /broker/*)#
| # | Action / capability | Master key | Sub-account key | Source note |
|---|---|---|---|---|
| 35 | Spot trading (/api/*) for an end user | No (wrong account) | Yes — "main trading APIs, with the sub-account's own API key" | CAAS APIs, "What is not in this API"; overview Spot; integration guide architecture |
| 36 | USD-M futures trading (/fapi/*) for an end user | No | Yes (if the wallet is enabled before key create + futuresTrade) | CAAS APIs; FAQ, "Why does my sub-account key not work for Futures?" |
| 37 | COIN-M futures trading (/dapi/*) for an end user | No | Yes (same pattern) | Overview, Futures; integration guide base URLs |
| 38 | Margin trading for an end user | Not via broker trade APIs | Yes if marginTrade is set at key create and the margin wallet exists | Integration guide §6 |
| 39 | Place trades with the master key "as" the sub | No — docs require the sub's own key for trading | Yes | CAAS APIs; FAQ |
| 40 | Read spot UID for Markup (GET /api/v3/account → uid) | Not stated for master-on-sub | Yes — KYC guide: call with that sub-account's own API key | KYC SaaS integration guide §2 |
F. Fees — revenue share vs Markup#
| # | Action / capability | Master key | Sub-account key | Source note |
|---|---|---|---|---|
| 41 | Set/query revenue-share commission on sub keys (spot/futures/coinFutures broker commission endpoints) | Yes | No | Integration guide §9; CAAS APIs, Fee |
| 42 | Query rebate recent records (spot/futures) | Yes | No | Integration guide §9; FAQ rebates |
| 43 | Markup fee groups and reporting (/sapi/v1/vip/caas/commission/*) | Yes — "must belong to your master account, not to a sub-account" | No | Markup getting started; markup integration guide §1 |
| 44 | Combine revenue share + markup | N/A — mutually exclusive | N/A | Markup overview; FAQ |
| 45 | Markup product scope | Spot order book only (commercial model) | N/A | Markup overview |
G. KYC SaaS (gates key creation)#
| # | Action / capability | Master key | Sub-account key | Source note |
|---|---|---|---|---|
| 46 | Call KYC SaaS APIs (/bapi/ekyc/v2/... on cb.link-kycapi.com) | Separate — Binance-issued bizEntityKey + secret; no X-MBX-APIKEY / CAAS signing | Separate (same) | KYC SaaS integration guide §§3–5; request signing |
| 47 | KYC PASS required before sub API key creation | Gate on broker create (master call blocked until PASS) | N/A | Getting started; integration guide; KYC overview |
| 48 | Un-KYC'd sub capabilities | Reduce-only: cut margin/futures positions and withdraw; cannot create or permission keys; deposits restricted | If a key somehow existed: the same service restrictions apply | Integration guide -9000 message; FAQ, overview of restrictions |
H. Streams & market data#
| # | Action / capability | Master key | Sub-account key | Source note |
|---|---|---|---|---|
| 49 | Aggregated user-data stream across all end users | No — "no single stream… all of your end users" | No | User data streams; FAQ |
| 50 | Open spot / USD-M / COIN-M user data stream for master treasury activity | Yes (master's own key, master's events only) | No | User data streams table |
| 51 | Open user data stream for one end user | No | Yes — that sub's key only | User data streams; integration guide §10 |
| 52 | Market data streams (prices, books, trades) | N/A — no API key | N/A — no API key | Market data streams |
I. Other modules / ops notes#
| # | Action / capability | Master key | Sub-account key | Source note |
|---|---|---|---|---|
| 53 | Institutional Crypto Buy/Sell Open API | Separate developer credentials (client id, sign access token, partner public keys, IP allowlist) — not described as master/sub CAAS keys | Not stated as a sub CAAS key | Institutional Buy/Sell quick start; developer-account application |
| 54 | CAAS / KYC / Markup sandbox | N/A — no separate test environment (verify on production with care); Institutional Buy/Sell has QA | N/A | Integration guide §12; KYC guide |
| 55 | CAAS IP allowlist at onboarding | Not required for CAAS itself | You may still IP-restrict keys you create | Integration guide §2 note |
| 56 | KYC SaaS / Institutional Buy/Sell IP allowlist | Separate modules enforce allowlisting | N/A | Integration guide §2; KYC guide |
| 57 | Keep master key on backend only; narrow sub permissions; rotate/delete | Best practice (master can create and delete accounts) | Best practice | Integration guide §13 |
57 capability rows, numbered 1–57, in sections A–I. The definition table and the FAQ short rule are not part of that count.
What the public docs do not state#
- Full exhaustive permission bit list on a master key for non-broker routes. The docs focus on broker calls, withdrawals, and streams. A general line about "all secure routes" is security text, not a CAAS permission matrix.
- Whether a sub key can call any
/sapi/v1/broker/*endpoint. The docs say broker calls use the master key. They do not publish a negative permission dump. - The exact Travel Rule key for every
/localentity/*path versus every/localentity/broker/*path, beyond "a partner can submit on an end user's behalf" and the FAQ's move of withdrawal tolocalentity/withdraw/apply. - Whether the master key can fetch a sub's deposit address on the capital endpoints. The docs prescribe the sub key for the address and for deposit history. Broker
depositHistis the master read path. - How Institutional Buy/Sell Open API credentials map onto master versus sub CAAS keys. The docs describe a separate developer-account credential exchange.
- The spot FAQ on Ed25519, HMAC, and RSA key types is not a master-versus-sub role matrix. The two topics are orthogonal.
- Generic sub-account product intro pages are not the CAAS broker guide. For Link/CAAS, use the CAAS integration guide and the FAQ.
Tiny checklist#
- Master authenticates to broker info
- Sub created → KYC PASS → wallets enabled → then sub API key
- Sub key: narrow permissions + IP allowlist
- Deposits: sub address · Withdrawals: master (after sub→master transfer)
- Streams: one per account (plus public market data separately)
If you're screening CAAS as a buyer/builder, a structured diligence pass helps before you wire credentials: Getting started with Binance CaaS.
Independent personal project. Based on public Binance Developer Docs only. Not affiliated with Binance.
Sources
Public documentation of a gated product. A link is a pointer to the publisher's own page. It is not an endorsement, a partnership, or a claim that Primer Desk has access to the product.
- CAAS getting started
Public integration order. Extra wallets, including futures, exist before the sub-account key is created.
- CAAS integration guide
Public guide to which key signs broker calls, trading, deposits, withdrawals, and streams.
- CAAS APIs
Public broker API list. Trading for an end user is on the main trading APIs, with that sub-account's own key.
- CAAS overview
Public overview of the account tree: the partner's master account parents every end-user sub-account.
- CAAS FAQ
Public FAQ. The short which-key table is that page's rule. The matrix says where the same docs are silent.
- CAAS user data streams
Public description of per-account streams. There is no single stream for every end user.
- Markup getting started
Public markup setup. Fee groups and markup reporting use the master account.
- Markup overview
Public description of markup versus revenue share. The two do not run together. Markup is the spot order book.