stream= query parameters to the connection
URL. You can combine as many as you like — including public and private together
— so a client needs one connection, not several.
Channel reference
{market} is a market id; {period} a k-line period; {symbol} a Coinbase
product id.
Authenticating a private connection
The upgrade request is HMAC-signed like any otherGET, so the signed path
must include the full ?stream=… query string:
Underlying price feed
?stream=crypto.{symbol} republishes the venue a candle-direction market
settles against, so the line a member watches and the price they are paid on
cannot diverge.
Throttled to roughly one message per second, newest-wins.
bucket_open is for drawing. Settlement reads the authoritative closed candle — see How markets are resolved.Private streams
Order — every create, partial fill, full fill, cancel, and rejection:sellable_qty is what you can offer right now — qty less anything already
committed to a resting sell. realized_pnl banks at the moment you exit, so it
moves on a sale rather than waiting for the market to resolve.
Reading the tape
Each fill on{market}.trades carries taker_side: the outcome the aggressor
bought, meaning the side that crossed the spread and paid the taker fee. It is
"yes", "no", or "".
Without it a tape is only a list of prices. Direction inferred from the price
moving says nothing about the many fills that print at the same price as the one
before them, and a buy and a sell print identically.
The same field, under the same rule, is on the REST tape at
GET /public/markets/{market}/contracts/recent.
Related
Authentication
Signing the private upgrade request.
API overview
Base URLs and conventions.
Recurring markets
What the crypto feed is for, and what settles a window.
Fees
Why a resting order locks more than its stake.