Messages
WebSockets
Charting WebSocket
Real-time WebSocket API for TradingView chart data. Stream live quotes and trades for equities and options. Connect, authenticate, then subscribe to symbols.
WSS
What this stream is for. This WebSocket is a charting-specific feed designed to plug straight into the TradingView Charting Library or any chart widget that follows the TradingView data shape. If you’re rendering candlestick or line charts in your app and need them to update in real time, use this feed. If you need full market depth, Greeks, or T&S, use the Market Data WebSocket instead.
Key Features
Key Features
Connect Then Authenticate
Open a WebSocket to the endpoint, then send a request to POST /auth with your token. Subscribe only after authSuccess.
Real-Time Quotes
Stream live bid/ask, last price, OHLC, volume, and change for charting.
Real-Time Trades
Receive last-trade updates (price, size, timestamp) for tape and chart integration.
Subscribed Quotes
Subscribe to one or more symbols; receive event messages with quote and trade data for each subscribed symbol.
TradingView Format
Quote and trade payloads use TradingView-friendly field names for easy integration.
Equities & Options
Support for stock tickers and OSI option symbols.
Keep-Alive
Ping/pong for connection health; optional correlation ID for pong.
Connection Details
Connection Details
Endpoint
Connect to the WebSocket at/v1/charts/ws.Production: wss://api.aries.com/v1/charts/wsStaging:
wss://api.aries.com/v1/charts/wsHealth check: GET /tv/health (HTTP)Authentication
Authentication is required. Use an OAuth2 access token (e.g. fromPOST /v1/oauth2/token). After the connection is open, send a request message with method POST, path /auth, and body { "token": "<your_access_token>" }. Wait for a response with action authSuccess before sending subscribe messages. If the server returns authRequired or error, authentication failed (e.g. invalid or expired token).This WebSocket follows a TradingView-compatible message format. All request/response messages use the shared envelope:
type, id, payload (with method, path, body for requests).Supported Symbols
Supported Symbols
Equities
Standard stock ticker symbols (e.g.,AAPL, MSFT, GOOGL, TSLA). Use them exactly as a brokerage screen would display them.Options
Option contracts use OSI (Options Symbology Initiative) symbols. Format:ROOT + YYMMDD + C/P + strike-in-cents (e.g., AAPL240119C00150000 is the AAPL Jan-19-2024 $150 Call).Message Envelope
Message Envelope
Every message you send or receive uses the same outer JSON shape:
| Field | Type | Required | What to put here |
|---|---|---|---|
type | string | Yes | What kind of message this is. Sent by you: request (RPC-style call, e.g. auth), subscribe, unsubscribe, ping. Sent by the server: event (streaming push), response (reply to your request), pong (reply to your ping). |
id | string | No | A correlation ID you choose, like "sub-aapl-1". The server echoes it back in the matching response/event so you can pair them up. |
timestamp | string | No | RFC3339 timestamp (e.g. 2026-05-13T10:30:00Z). Optional on client messages; the server fills it in on outbound messages. |
payload | object | Yes | The actual body of the message. Shape depends on type — see the sections below. |
Data Types
Data Types
The subscription
payload.type controls what kind of data the server streams back:quotes(default) — Bid/ask, last price, OHLC, volume, change, change percent, exchange, and description. This is what most chart widgets need for the price/quote display.bars— Time-series bar/candle data. Usetype: "bars"in the subscribe payload when this is supported, primarily for incremental chart updates.
Use Cases
Use Cases
Live Chart Updates
Display real-time price movements on interactive charts.
TradingView Widgets
Feed real-time data into TradingView charting library or embedded widgets.
Quote Displays
Show last price, bid/ask, and volume in chart widgets (after authenticating).
Technical Analysis
Provide data for indicators and overlays in charting tools.
Connection
Connect to the Charting WebSocket the same way you would the Market Data WebSocket: establish the connection, then authenticate, then subscribe to symbols to receive real-time quotes and trades.Connect to the endpoint
Open a secure WebSocket connection to:Authenticate
Immediately after the connection is open, send one request message to authenticate. Do not send subscribe messages until you receive a successful auth response. Send the following auth message:type: "response", with payload.action: "authSuccess", optional payload.id (echoed from request), payload.timestamp (Unix milliseconds), and payload.data.expiresIn (session expiry in milliseconds).
Server responds (failure): payload.action: "authRequired" or payload.action: "error" with payload.error (e.g. “token is required”, “authentication failed”). Reconnect or send a new auth request with a valid token.
Subscribe to symbols
After authSuccess, send subscribe messages to start receiving quote and trade event messages for the requested symbols. See Subscribing to Chart Data below.Subscribing to Chart Data
After you have connected and authenticated, you can subscribe to real-time quotes (and trades) for one or more symbols. Each subscription uses a subscribe message; the server then sends event messages containing quote/trade data for those symbols.Basic subscription structure
Send a subscribe message withtype fixed as "subscribe", any id you want (used to correlate the server’s responses), and a payload describing what you want to receive:
| Payload field | Type | Required | What to enter |
|---|---|---|---|
type | string | Yes | "quotes" for real-time price ticks (the common case), or "bars" for time-series candle/bar data. |
symbol | string | Yes | The instrument identifier — a stock ticker like "AAPL", or an OSI option symbol like "AAPL240119C00150000". |
symbolType | string | No | "symbol" (default — for equities/indices) or "option" when subscribing to an option contract. |
Subscription examples
Single symbol (quotes)
Single symbol (quotes)
Subscribe to real-time quotes for one equity:You will receive event messages with
payload.type: "quotes" and payload.symbol: "AAPL" containing payload.data.quote and payload.data.trade.Multiple symbols (quotes)
Multiple symbols (quotes)
Subscribe to quotes for several symbols by sending one subscribe message per symbol (each with its own Second symbol:Third symbol:The server sends event messages for each subscribed symbol; use
id if needed):First symbol:payload.symbol to route updates.Option contract (quotes)
Option contract (quotes)
For option contracts, use the OSI symbol:
Another equity (quotes)
Another equity (quotes)
Connection Flow
Authenticate
Send a request message:
type: "request", payload: { "method": "POST", "path": "/auth", "body": { "token": "<access_token>" } }. Wait for a response with payload.action: "authSuccess".Client → Server Messages
Subscribe
Providepayload.type and payload.symbol; the full message is built as:
Unsubscribe
Stop receiving updates for a symbol. Providepayload.type and payload.symbol (must match the subscription).
Ping
Keep-alive; server responds with pong. Optionalid is echoed in the pong.
Server → Client Messages
Event (quote/trade update)
Server pushes quote and/or trade data for subscribed symbols.The field names below (
ch, chp, lp, n, v, etc.) are TradingView’s short-form keys. They look cryptic but they’re standardized — the TradingView Charting Library expects exactly these names. Do not rename them in your handler if you’re piping data into a TradingView widget.payload fields:
| Field | Type | Description |
|---|---|---|
type | string | Always "quotes" for quote/trade events. |
symbol | string | The symbol this event is about (e.g. AAPL). Match against your active subscriptions. |
data | object | The quote and trade payload (see below). |
timestamp | integer | When the event was emitted, in Unix milliseconds. |
payload.data fields:
| Field | Type | Description |
|---|---|---|
quote | object | Quote data. Contains s (status string, usually "ok"), n (the symbol), and v (the actual quote values — see next table). |
trade | object | Trade data (see below). Omitted if there’s no recent trade to report. |
isDelayed | boolean | false = real-time market data, true = the feed is delayed (typically 15 min). Show users a “delayed” badge when this is true. |
payload.data.quote.v fields — these are the values the chart actually plots. All numbers and all optional (only changed fields may be present in an update):
| Field | Type | What it represents |
|---|---|---|
ch | number | Change — net price change from previous close (today’s last price − yesterday’s close). Drives the +/− indicator on a chart. |
chp | number | Change percent — ch expressed as a percent of previous close. |
short_name | string | Display ticker, e.g. "AAPL". |
exchange | string | Primary listing exchange, e.g. "NASDAQ". |
description | string | Human-readable name, e.g. "Apple Inc." — what to show as the chart title. |
lp | number | Last price — most recent trade price. The number on the big “current price” label. |
ask | number | Best ask (the lowest price someone is willing to sell at). |
bid | number | Best bid (the highest price someone is willing to pay). |
open_price | number | Today’s opening price (first trade of the session). |
high_price | number | Today’s highest price so far. |
low_price | number | Today’s lowest price so far. |
prev_close_price | number | Yesterday’s closing price — the baseline for calculating today’s change. |
volume | number | Cumulative number of shares traded today. |
payload.data.trade fields — emitted whenever a new print appears on the tape:
| Field | Type | What it represents |
|---|---|---|
s | string | Status — "ok" when the trade is valid. |
t | integer | Trade timestamp in Unix seconds (note: trade t is seconds, but the outer payload.timestamp is milliseconds). |
lp | number | Last trade price — the price the trade printed at. |
v | integer | Trade size (number of shares/contracts). |
Response (auth or error)
Auth success:type: "response", payload.action: "authSuccess", optional payload.id (echoed request ID), payload.timestamp (Unix milliseconds), payload.data.expiresIn (session expiry in milliseconds).
Error (e.g. invalid subscribe): type: "response", payload.error with message.
Pong
Reply to ping.Quick Start Example
Connect, authenticate, then subscribe to quotes (same pattern as the Market Data WebSocket):Support
Need help with the Charting WebSocket?Email Support
API Status
Messages