January 29, 2026

Does CoinAPI Stream True Level 3 (Market-By-Order) Data? WebSocket vs WebSocket DS Explained

featured image

If you’ve ever tried to build a serious trading engine or market microstructure model, you’ve probably hit the same wall: “Is this really Level 3 data, or just dressed-up Level 2?”

In crypto, the difference matters. A lot. Level 3 (Market-By-Order) is the raw material for queue position modeling, order flow analysis, and realistic execution simulations. But not every “order book stream” is actually L3.

This article clarifies exactly how CoinAPI delivers Level 3 data, when it’s available, and which WebSocket feed you need to use.

Before talking about APIs, it’s worth being precise about definitions.

Level 2 (Market-By-Price) is aggregated.

You see total size at each price level. You don’t see individual orders.

Typical fields look like:

  • price
  • size
  • side

That’s fine for many use cases. It’s also what most “normalized” order book feeds provide.

Level 3 (Market-By-Order) is different.

You see every order, tracked individually.

Each update corresponds to an actual order being added, matched, reduced, or removed — and it comes with an order_id.

Typical fields include:

  • order_id
  • price
  • size
  • update_type (ADD, SUB, MATCH, DELETE)
  • side

No order_id means no Level 3. It’s that simple.

Further reading:

CoinAPI has more than one real-time streaming interface. Most confusion starts here.

These are normalized, multi-venue feeds.

What you get:

  • Consistent schemas across hundreds of exchanges
  • Level 2 order books (price-level)
  • Trades, quotes, depth updates

What you don’t get:

  • Continuous order-by-order semantics
  • Exchange-native order lifecycle events

These feeds are great for:

  • Cross-exchange analytics
  • Arbitrage detection
  • Market depth monitoring

They are not designed for true Market-By-Order consumption.

This is where Level 3 actually lives.

WebSocket DS connects directly to individual exchanges. When an exchange publishes native L3 data, CoinAPI can stream it as-is, without collapsing it into Level 2.

One important constraint:

Level 3 only exists where the exchange itself exposes it.

CoinAPI doesn’t invent L3. It passes it through when it’s real.

Further reading:

Right now, true Level 3 (Market-By-Order) streaming via CoinAPI WebSocket DS is available for:

  • Coinbase
  • Bitso

For these venues:

  • Messages include order_id
  • Updates follow ADD / SUB / MATCH / DELETE semantics
  • You’re seeing the exchange’s real order lifecycle

This is not reconstructed data. It’s not inferred. It’s a direct stream.

For other exchanges:

  • If the venue doesn’t publish L3, CoinAPI can’t synthesize it
  • WebSocket DS still gives you the best possible L2 feed

That’s an honest constraint, not a limitation hidden in the fine print.

Further reading:

Don’t rely on documentation alone. Check a message.

Ask three questions:

  • Is there an order_id field?
  • Are updates expressed as ADD, SUB, MATCH, DELETE?
  • Does volume change per order, not just per price?

Example (simplified):

time_exchange: 2025-02-14T13:30:03.585Z

is_buy: true

update_type: ADD

entry_px: 43125.50

entry_sx: 0.75

order_id: a8f3c91d

If order_id is present → Level 3.

If it’s missing or empty → Level 2.

No ambiguity here.

This question comes up a lot, and the answer is mostly physics.

  • Order ID formats differ
  • Matching engines behave differently
  • Queue priority rules aren’t portable
  • Some venues only partially expose L3

Normalizing Level 3 would mean stripping away the very details that make it useful. At that point, you’re back to Level 2 with extra steps.

That’s why CoinAPI keeps L3 exchange-native and exposes it only through WebSocket DS.

Further reading:

Use WebSocket DS if:

  • You need true Market-By-Order data
  • You care about execution realism
  • You model queue position or order flow
  • You trade on Coinbase or Bitso and L3 is a requirement

Stick with standard WebSocket if:

  • You want consistency across many exchanges
  • You’re building analytics, dashboards, or signals
  • Level 2 depth is good enough

Different tools. Different jobs.

Assuming “full depth” means Level 3

It doesn’t. Always check for order_id.

Expecting L3 from exchanges that don’t publish it

No data provider can create Market-By-Order data out of thin air.

Mixing normalized and direct feeds

If part of your system assumes L3 semantics and another part doesn’t, bugs will follow.

CoinAPI does stream true Level 3 (Market-By-Order) data, but only where it exists, and only through WebSocket DS.

If you need order-by-order updates with real order IDs, WebSocket DS is the right interface, and Coinbase and Bitso are the venues to look at today.

And if you’re ever unsure what you’re receiving, don’t overthink it.

Just check for order_id.

background

Stay up-to-date with the latest CoinApi News.

By subscribing to our newsletter, you accept our website terms and privacy policy.

Recent Articles

Crypto API made simple: Try now or speak to our sales team