Overview
Continuous futures candles (/tv-futures, futures scope)
Path /api/v1/market/tv-futures/kline with futures entitlement.
REST / WebSocket endpoints
Fetch TV continuous contract candles; requires futures market scope.
Updated: 2026-09-12
Continuous futures candles (/tv-futures, futures scope)
Path /api/v1/market/tv-futures/kline with futures entitlement.
| Field | Type | Required | Description |
|---|---|---|---|
symbol | string | Yes | Symbol (required) |
interval | string | No | Default 1; supports 1/1m, 5, 15, 60/1h, 240/4h, 1d, 1w, 1mo, … |
limit | number | No | Default 300, range 1–5000 |
| 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 |
|---|---|---|
symbol | string | Resolved symbol |
interval | string | Normalized interval |
bars | array | Candle array (see below) |
source | string | Always tradingview |
market | string | Market tag for this path |
bars[].openTime / openTimeMs | string | number | Bar open time |
bars[].closeTime / closeTimeMs | string | number | Bar close time |
bars[].open / high / low / close | number | OHLC |
bars[].volume | number | Volume |
| 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 |
curl https://api.tiqex.io/api/v1/market/tv-futures/kline?symbol=ES1!&interval=1h \
-H "X-API-Key: YOUR_API_KEY"import requests
url = "https://api.tiqex.io/api/v1/market/tv-futures/kline?symbol=ES1!&interval=1h"
headers = {"X-API-Key": "YOUR_API_KEY"}
resp = requests.get(url, headers=headers, timeout=10)
resp.raise_for_status()
print(resp.json())const res = await fetch("https://api.tiqex.io/api/v1/market/tv-futures/kline?symbol=ES1!&interval=1h", {
headers: { "X-API-Key": "YOUR_API_KEY" }
});
if (!res.ok) throw new Error(res.status);
console.log(await res.json());