Source: https://databento.com/docs/schemas/mbp-10


# Market by price (MBP-10)

**MBP-10 (market by price)** provides every order book event across the top ten price levels, keyed by price. This includes every trade and changes to aggregate market depth, alongside total size and order count at the top ten price levels.

This is often called "L2 data".

Databento groups this under [market depth](https://databento.com/docs/schemas/whats-a-schema.md#supported-schemas-and-their-fields) (L2).

### Fields (`mbp-10`)

| Field | Type | Description |
| `ts_recv` | uint64\_t | The capture-server-received timestamp expressed as the number of nanoseconds since the UNIX epoch. See [ts_recv](https://databento.com/docs/conventions/common-fields-enums-types.md#ts-recv). |
| `ts_event` | uint64\_t | The matching-engine-received timestamp expressed as the number of nanoseconds since the UNIX epoch. See [ts_event](https://databento.com/docs/conventions/common-fields-enums-types.md#ts-event). |
| `rtype` | uint8\_t | A sentinel value indicating the record type. Always 10 in the MBP-10 schema. See [Rtype](https://databento.com/docs/conventions/common-fields-enums-types.md#rtype). |
| `publisher_id` | uint16\_t | The publisher ID assigned by Databento, which denotes the dataset and venue. See [Publishers](https://databento.com/docs/conventions/common-fields-enums-types.md#publishers-datasets-and-venues). |
| `instrument_id` | uint32\_t | The numeric instrument ID. See [Instrument identifiers](https://databento.com/docs/conventions/common-fields-enums-types.md#instrument-identifiers). |
| `action` | char | The event action. Can be **A**dd, **C**ancel, **M**odify, clea**R** book, or **T**rade. See [Action](https://databento.com/docs/conventions/common-fields-enums-types.md#action). |
| `side` | char | The side that initiates the event. Can be **A**sk for a sell order (or sell aggressor in a trade), **B**id for a buy order (or buy aggressor in a trade), or **N**one where no side is specified. See [Side](https://databento.com/docs/conventions/common-fields-enums-types.md#side). |
| `depth` | uint8\_t | The book level where the update event occurred. |
| `price` | int64\_t | The order price where every 1 unit corresponds to 1e-9, i.e. 1/1,000,000,000 or 0.000000001. See [Prices](https://databento.com/docs/conventions/common-fields-enums-types.md#prices). |
| `size` | uint32\_t | The order quantity. |
| `flags` | uint8\_t | A bit field indicating event end, message characteristics, and data quality. See [Flags](https://databento.com/docs/conventions/common-fields-enums-types.md#flags). |
| `ts_in_delta` | int32\_t | The matching-engine-sending timestamp expressed as the number of nanoseconds before `ts_recv`. See [ts_in_delta](https://databento.com/docs/conventions/common-fields-enums-types.md#ts-in-delta). |
| `sequence` | uint32\_t | The message sequence number assigned at the venue. |
| `bid_px_N` | int64\_t | The bid price at level N (top level if N = 00) where every 1 unit corresponds to 1e-9, i.e. 1/1,000,000,000 or 0.000000001. See [Prices](https://databento.com/docs/conventions/common-fields-enums-types.md#prices). |
| `ask_px_N` | int64\_t | The ask price at level N (top level if N = 00) where every 1 unit corresponds to 1e-9, i.e. 1/1,000,000,000 or 0.000000001. See [Prices](https://databento.com/docs/conventions/common-fields-enums-types.md#prices). |
| `bid_sz_N` | uint32\_t | The bid size at level N (top level if N = 00). |
| `ask_sz_N` | uint32\_t | The ask size at level N (top level if N = 00). |
| `bid_ct_N` | uint32\_t | The bid order count at level N (top level if N = 00). |
| `ask_ct_N` | uint32\_t | The ask order count at level N (top level if N = 00). |

### Implementation differences between clients and encodings

Bid and ask depth messages (fields starting with `bid_` and `ask_`) are structured differently in the **C++ and Rust clients**, **the Python record interface**, and **JSON data**. Instead of using the `_N` suffix, they're stored in an array of structures named levels, with the top-of-book at index `0`.

For example, in C++, `levels[5].bid_px` corresponds to `bid_px_05` in the Python DataFrame API and CSV format.

> **See also**
>
> It is possible to construct MBP-10 yourself from MBO data if you want more price levels or prefer to reduce your bandwidth use. Learn how to construct a limit order book from MBO data from our [limit order book construction](https://databento.com/docs/examples/order-book/limit-order-book.md) tutorial.
