Overview
Live market stream
Payload fields: action, market, symbols.
REST / WebSocket endpoints
Connect via WebSocket, send a subscribe payload, and receive live market updates.
Updated: 2026-09-12
Live market stream
Payload fields: action, market, symbols.
| Field | Type | Required | Description |
|---|---|---|---|
action | string | Yes | First message must be subscribe |
market | string | Yes | Market channel |
symbols | string[] | Yes | Symbols to subscribe; capped by plan |
| Field | Type | Description |
|---|---|---|
succ | boolean | Whether the request succeeded |
data | object | array | Business payload (see fields below) |
msg | string | Human-readable error message on failure (optional) |
code | string | Machine-readable error code (optional) |
X-Request-Id | header | Request trace ID (response header, not in JSON body) |
X-API-Key | header | API key; Authorization: Bearer is also accepted |
| Field | Type | Description |
|---|---|---|
type=subscribed | object | Ack with market and symbols |
type=tick | object | Live tick |
tick.symbol / last / at | mixed | Symbol, last, RFC3339 time |
tick.bid / ask / volume | number | Book and volume |
tick.change / changePercent / high / low | number | Change and range |
type=error | object | Error frame: msg + code |
| code | HTTP | Description |
|---|---|---|
INVALID_REQUEST | 400 | Missing or invalid parameters (e.g. interval) |
INVALID_SYMBOL | 400 | Invalid symbol format |
UNKNOWN_SYMBOL | 400 | Unrecognized symbol (multi-market quote) |
NO_SUBSCRIPTION | 403 | No active subscription |
SUBSCRIPTION_EXPIRED | 403 | Subscription expired |
MARKET_NOT_ENABLED | 403 | Market not enabled on current plan |
API_KEY_SCOPE_DENIED | 403 | API key scope denied |
IP_DENIED / GEO_DENIED | 403 | IP or geo policy denied |
DAILY_LIMIT_EXCEEDED | 429 | Daily quota exceeded |
MONTHLY_LIMIT_EXCEEDED | 429 | Monthly quota exceeded |
RATE_LIMIT_EXCEEDED | 429 | Per-user RPM exceeded |
KEY_RATE_LIMIT_EXCEEDED | 429 | Per-key RPM exceeded |
UPSTREAM_UNAVAILABLE | 502 | Upstream market source unavailable |
RATE_LIMIT_UNAVAILABLE | 503 | Rate-limit infrastructure unavailable |
WS_CONN_LIMIT | WS | WebSocket connection cap reached |
wss://api.tiqex.io/api/v1/market/stream
{ "action": "subscribe", "market": "crypto", "symbols": ["BTCUSDT"] }import asyncio
import websockets
import json
async def main():
uri = "wss://api.tiqex.io/api/v1/market/stream"
async with websockets.connect(uri) as ws:
await ws.send(json.dumps({
"action": "subscribe",
"market": "crypto",
"symbols": ["BTCUSDT"]
}))
print(await ws.recv())
asyncio.run(main())const ws = new WebSocket("wss://api.tiqex.io/api/v1/market/stream");
ws.onopen = () => {
ws.send(JSON.stringify({
action: "subscribe",
market: "crypto",
symbols: ["BTCUSDT"]
}));
};
ws.onmessage = (ev) => console.log(ev.data);