1. Getting Started
Real-Time Data Delivery Overview
This page describes real-time data delivery over WebSocket, NATS, MQTT, or direct publishing to a client-managed message broker.
Data Delivery Options
Data can be delivered through a server connection or by publishing to a client-managed broker:
Connect to InsightSentry Servers
Connect to an InsightSentry endpoint using one of the supported protocols.
- WebSocket - WebSocket stream
- NATS - NATS subject subscription
- MQTT - MQTT topic subscription
Direct Publishing to Your System
Data can also be published directly to a client-managed message broker. The client is responsible for hosting and maintaining that broker.
- NATS
- Redis Pub/Sub
- Redis Streams
Direct Publishing Requirements
Direct publishing requires the following:
- You must provide and host your own message broker (NATS, Redis Pub/Sub, or Redis Streams)
- InsightSentry does not host message broker infrastructure for this option
- InsightSentry servers publish data directly to your system
- Provide connection details and credentials
- The broker must be reachable from InsightSentry servers
Best-Effort Delivery
All real-time data delivery is best-effort. Due to network conditions on either side, delivery of every individual trade is not guaranteed.
To backfill missing data, use the REST API for recent trade and bar data.
Delivery Method Summary
Connect to Our Servers
Connect by WebSocket, NATS, or MQTT and receive data from an InsightSentry server
Direct Publishing
InsightSentry publishes directly to your NATS, Redis Pub/Sub, or Redis Streams broker for distribution to multiple consumers
2. Response Data Formats
Real-time data responses use short field names to reduce payload size.
This section covers the base real-time data types: quote, bar, and trade data.
When an identifier is included, E identifies stocks, F identifies futures, C identifies currencies, and T identifies ETFs.
Quote Data Format
Quote messages contain current pricing and volume information.
| Field | Description |
|---|---|
| c | Symbol identifier |
| p | Identifier |
| t | Message type marker, always quote |
| ss | Session status |
| v | Trading volume |
| a | Ask price |
| b | Bid price |
| as | Size of ask orders |
| bs | Size of bid orders |
Example Quote Response:
{
"c": "NASDAQ:AAPL",
"p": "E",
"t": "quote",
"ss": "OPEN",
"v": 533779.0,
"a": 243.09,
"b": 243.08,
"as": 520.0,
"bs": 430.0
}Bar Data Format
Bar data messages use t: "bar" at the top level and contain OHLCV entries in the s array.
| Field | Description |
|---|---|
| c | Symbol identifier |
| p | Identifier |
| t | Message type marker, always bar |
| be | Bar end timestamp |
| lu | Last update timestamp |
| bt | Bar interval type |
| s | Array of bar entries |
Bar entries in the s array contain these fields:
| Field | Description |
|---|---|
| t | Bar timestamp |
| o | Opening price |
| h | Highest price |
| l | Lowest price |
| c | Closing price |
| v | Trading volume |
Example Bar Response:
{
"c": "NASDAQ:AAPL",
"p": "E",
"t": "bar",
"be": 1733432399.0,
"lu": 1733432399820,
"bt": "1m",
"s": [
{
"t": 1733432340.0,
"o": 242.89,
"h": 243.09,
"l": 242.82,
"c": 243.08,
"v": 533779.0
}
]
}Trade Data Format
Trade data messages use p for the identifier and t: "trade" at the top level, then contain per-trade entries in the s array.
Per-trade entries in the s array contain these fields:
| Field | Description |
|---|---|
| t | Trade timestamp |
| c | Trade price |
| v | Trade volume (shares/contracts) |
| s | Trade direction (`buy` or `sell`) |
Example Trade Response:
{
"c": "NASDAQ:AAPL",
"p": "E",
"t": "trade",
"bt": "1T",
"be": 1749462520.0,
"lu": 1749462520177,
"s": [
{
"t": 1749462520.177003,
"c": 242.89,
"v": 200.0,
"s": "buy"
}
]
}3. SIP Feed
This feed requires separate enablement. If included in your delivery, it is sent separately from the base real-time feed.
| Data Type | Symbol Format | Additional Fields |
|---|---|---|
| Quotes | SIP:AAPL | p, t, bx, ax |
| Trades | SIP:AAPL | p, s[].i, s[].x, s[].z, s[].tc, s[].e, s[].oi, s[].op, s[].os, s[].oc, s[].cm |
| Bars | SIP:AAPL | p, bt, s[].n |
| Trading Status | SIP:AAPL | p, ts, sc, sm, rc, rm, z |
Quote Data Format
Quotes use the SIP: symbol prefix, include t: "quote", include p: "S", provide the quote timestamp as ts, and include the bid and ask exchange labels.
| Field | Description |
|---|---|
| c | SIP-prefixed symbol identifier |
| p | Feed identifier, always S |
| t | Message type marker, always quote |
| ts | Quote timestamp in Unix seconds with millisecond precision |
| b / bs | Bid price and bid size |
| a / as | Ask price and ask size |
| bx / ax | Bid and ask exchange labels |
Example Quote Response:
{
"c": "SIP:AMD",
"p": "S",
"t": "quote",
"ts": 1614009105.335,
"b": 87.66,
"bs": 1,
"a": 87.68,
"as": 4,
"bx": "MEMX",
"ax": "NASDAQ_OMX"
}Trading Status Format
| Field | Description |
|---|---|
| c | SIP-prefixed symbol identifier |
| p | Feed identifier, always S |
| t | Message type marker, always status |
| ts | Status timestamp in Unix seconds with millisecond precision |
| sc | Status code |
| sm | Status message |
| rc | Reason code |
| rm | Reason message |
| z | Tape code |
Example Trading Status Response:
{
"c": "SIP:IBM",
"p": "S",
"t": "status",
"ts": 1717080600.000,
"sc": "2",
"sm": "Trading Halt",
"rc": "P",
"rm": "News Pending",
"z": "A"
}Trading Status Codes
| Tape | Code | Message |
|---|---|---|
| A / B (CTA) | 2 | Trading Halt |
| A / B (CTA) | 3 | Resume |
| A / B (CTA) | 5 | Price Indication |
| A / B (CTA) | 6 | Trading Range Indication |
| A / B (CTA) | 7 | Market Imbalance Buy |
| A / B (CTA) | 8 | Market Imbalance Sell |
| A / B (CTA) | 9 | Market On Close Imbalance Buy |
| A / B (CTA) | A | Market On Close Imbalance Sell |
| A / B (CTA) | C | No Market Imbalance |
| A / B (CTA) | D | No Market On Close Imbalance |
| A / B (CTA) | E | Short Sale Restriction |
| A / B (CTA) | F | Limit Up-Limit Down |
| C / O (UTP) | H | Trading Halt |
| C / O (UTP) | Q | Quotation Resumption |
| C / O (UTP) | T | Trading Resumption |
| C / O (UTP) | P | Volatility Trading Pause |
Trading Reason Codes
| Tape | Code | Message |
|---|---|---|
| A / B (CTA) | A | Additional Information Requested |
| A / B (CTA) | C | Regulatory Concern |
| A / B (CTA) | D | News Released (formerly News Dissemination) |
| A / B (CTA) | E | Merger Effective |
| A / B (CTA) | F | ETF Component Prices Not Available |
| A / B (CTA) | I | Order Imbalance |
| A / B (CTA) | M | Limit Up-Limit Down (LULD) Trading Pause |
| A / B (CTA) | N | Corporate Action |
| A / B (CTA) | O | New Security Offering |
| A / B (CTA) | P | News Pending |
| A / B (CTA) | V | Intraday Indicative Value Not Available |
| A / B (CTA) | X | Operational |
| A / B (CTA) | Y | Sub-Penny Trading |
| A / B (CTA) | 1 | Market-Wide Circuit Breaker Level 1 – Breached |
| A / B (CTA) | 2 | Market-Wide Circuit Breaker Level 2 – Breached |
| A / B (CTA) | 3 | Market-Wide Circuit Breaker Level 3 – Breached |
| C / O (UTP) | T1 | Halt News Pending |
| C / O (UTP) | T2 | Halt News Dissemination |
| C / O (UTP) | T5 | Single Stock Trading Pause In Affect |
| C / O (UTP) | T6 | Regulatory Halt Extraordinary Market Activity |
| C / O (UTP) | T8 | Halt ETF |
| C / O (UTP) | T12 | Trading Halted; For information requested by NASDAQ |
| C / O (UTP) | H4 | Halt Non Compliance |
| C / O (UTP) | H9 | Halt Filings Not Current |
| C / O (UTP) | H10 | Halt SEC Trading Suspension |
| C / O (UTP) | H11 | Halt Regulatory Concern |
| C / O (UTP) | 01 | Operations Halt, Contact Market Operations |
| C / O (UTP) | IPO1 | IPO Issue not yet Trading |
| C / O (UTP) | M1 | Corporate Action |
| C / O (UTP) | M2 | Quotation Not Available |
| C / O (UTP) | LUDP | Volatility Trading Pause |
| C / O (UTP) | LUDS | Volatility Trading Pause – Straddle Condition |
| C / O (UTP) | MWC1 | Market Wide Circuit Breaker Halt - Level 1 |
| C / O (UTP) | MWC2 | Market Wide Circuit Breaker Halt - Level 2 |
| C / O (UTP) | MWC3 | Market Wide Circuit Breaker Halt - Level 3 |
| C / O (UTP) | MWC0 | Market Wide Circuit Breaker Halt - Carry over from previous day |
| C / O (UTP) | T3 | News and Resumption Times |
| C / O (UTP) | T7 | Single Stock Trading Pause/Quotation-Only Period |
| C / O (UTP) | R4 | Qualifications Issues Reviewed/Resolved; Quotations/Trading to Resume |
| C / O (UTP) | R9 | Filing Requirements Satisfied/Resolved; Quotations/Trading To Resume |
| C / O (UTP) | C3 | Issuer News Not Forthcoming; Quotations/Trading To Resume |
| C / O (UTP) | C4 | Qualifications Halt ended; maint. Req. met; Resume |
| C / O (UTP) | C9 | Qualifications Halt Concluded; Filings Met; Quotes/Trades To Resume |
| C / O (UTP) | C11 | Trade Halt Concluded By Other Regulatory Auth,; Quotes/Trades Resume |
| C / O (UTP) | R1 | New Issue Available |
| C / O (UTP) | R | Issue Available |
| C / O (UTP) | IPOQ | IPO security released for quotation |
| C / O (UTP) | IPOE | IPO security – positioning window extension |
| C / O (UTP) | MWCQ | Market Wide Circuit Breaker Resumption |
Bar Data Format
Bars use p: "S" and t: "bar", contain one OHLCV entry in the s array, and use bt: "1D".
| Field | Description |
|---|---|
| c | SIP-prefixed symbol identifier |
| p | Feed identifier, always S |
| t | Message type marker, always bar |
| bt | Bar interval marker, always 1D |
| s[].t | Bar timestamp in Unix seconds with millisecond precision |
| s[].o / h / l / c | Open, high, low, and close prices |
| s[].v | Accumulated volume |
| s[].n | Accumulated trade count |
Example Bar Response:
{
"c": "SIP:AAPL",
"p": "S",
"t": "bar",
"bt": "1D",
"s": [
{
"t": 1614009104.208,
"o": 126.55,
"h": 127.12,
"l": 125.98,
"c": 126.89,
"v": 1234567,
"n": 4312
}
]
}Trade Data Format
Trade payloads include p: "S" and t: "trade", include the trade in the s array, and use bt: "1T".
Standard trades include a trade id in s[].i. Trade corrections and cancellations use the same payload shape and add s[].e; standard trades omits[].e.
Correction-only fields are s[].oi, s[].op, s[].os, and s[].oc. The s[].e marker appears on correction and cancellation/error payloads. Cancellation/error payloads also include s[].cm as the cancel message: cancel or error.
| Field | Description |
|---|---|
| c | SIP-prefixed symbol identifier |
| p | Feed identifier, always S |
| t | Message type marker, always trade |
| bt | Trade interval marker, always 1T |
| s[].t | Trade timestamp in Unix seconds with millisecond precision |
| s[].i | Trade id |
| s[].c | Trade price |
| s[].v | Trade size |
| s[].x | Trade exchange label |
| s[].z | Tape code |
| s[].tc | Trade condition codes |
| s[].e | Optional trade event marker: correction or cancel |
| s[].oi | Original trade id for corrections |
| s[].op / os / oc | Original price, size, and condition codes for corrections |
| s[].cm | Cancel message: cancel or error |
Example Trade Response:
{
"c": "SIP:AAPL",
"p": "S",
"t": "trade",
"bt": "1T",
"s": [
{
"t": 1614009104.208,
"i": 96921,
"c": 126.55,
"v": 1,
"x": "FINRA_ADF",
"z": "C",
"tc": ["@", "I"]
}
]
}Example Trade Correction Response:
{
"c": "SIP:EEM",
"p": "S",
"t": "trade",
"bt": "1T",
"s": [
{
"t": 1680791106.542,
"i": 52983525034326,
"oi": 52983525033527,
"c": 39.1809,
"v": 440000,
"x": "CHICAGO_STOCK_EXCHANGE",
"e": "correction",
"z": "B",
"tc": [" ", "7"],
"op": 39.1582,
"os": 440000,
"oc": [" ", "7"]
}
]
}Example Trade Cancellation Response:
{
"c": "SIP:AAPL",
"p": "S",
"t": "trade",
"bt": "1T",
"s": [
{
"t": 1614009104.208,
"i": 96921,
"c": 126.55,
"v": 1,
"x": "FINRA_ADF",
"e": "cancel",
"cm": "cancel",
"z": "C"
}
]
}