Skip to main content
Every record Polaris returns — whether from a query method or a snapshot file — uses the same standard event envelope.

Structure

An envelope has two core parts:
  • type: the event kind, such as trade, intent, bar, orderbook, or datapoint.
  • data: the typed payload for that kind. Each data schema page describes the fields under data for its event type.
Identifier fields carry source and market, with an optional instrument when a normalized market contains multiple exact contracts. For options, market is the normalized underlying such as BTC, while instrument is the venue-native contract such as BTC-29MAR24-50000-C. Every option_ticker event requires a non-empty instrument. The canonical IDs from Catalog are the values you pass to requests.

Timestamps and sequence numbers

Event time follows one of two models depending on the schema version:
  • Legacy records use a timestamp field.
  • Schema v2 records replace timestamp with collector and exchange fields:
Use collector_timestamp for historical filters, buckets, and replay timing. Treat exchange_timestamp as provenance: it can be null or regress relative to collector order. Iterate rows in the order returned by the SDK. Each v2 snapshot starts with a metadata record containing data.schema_version: "v2". SDK readers consume this record; it is not returned from event, replay, trade, or order-book methods.

Match the event version

Check for collector_timestamp to tell v2 from legacy, then read the version-specific fields.

Payload shapes