---
title: Supported Markets
description: Market coverage, supported intervals and canonical-symbol rules, including gold spot from 5m.
---

# Supported Markets

The API supports **13 venues**, including gold spot, through a single set of endpoints. Query `/api/markets` for current availability. Canonical symbols are all-uppercase with no separators.

## Overview

| Asset class | Venue | Symbols | Supported intervals |
| --- | --- | --- | --- |
| Crypto | `binance:spot` | 70 | `1m` `5m` `15m` `1h` `4h` `1d` |
| Crypto / stock and other perpetuals | `binance:perp` | Query discovery endpoint | `1m` `5m` `15m` `1h` `4h` `1d` |
|  | `bybit:spot` | 70 | `1m` `5m` `15m` `1h` `4h` `1d` |
|  | `bybit:perp` | 70 | `1m` `5m` `15m` `1h` `4h` `1d` |
|  | `okx:spot` | 70 | `1m` `5m` `15m` `1h` `4h` `1d` |
|  | `okx:perp` | 50 | `1m` `5m` `15m` `1h` `4h` `1d` |
|  | `hyperliquid:perp` | Query discovery endpoint | `1m` `5m` `15m` `1h` `4h` `1d` |
| A-shares | `stock:cn` | 32 | `1m` `5m` `15m` `30m` `1h` `1d` |
| Hong Kong | `stock:hk` | 20 | `1h` `1d` |
| US stocks | `stock:us` | 37 | `1h` `1d` |
| Forex | `forex:spot` | 10 | `1h` `1d` |
| Commodity futures | `commodity:futures` | 7 | `1h` `1d` |
| Gold spot | `commodity:spot` | 1 | `5m` `15m` `30m` `1h` `4h` `1d` |

::: tip Query the live list
Symbol lists may change (we add hot tickers and remove illiquid ones). **Before integrating, query the discovery endpoints**:

```bash
# All venues + WS health
curl -H "Authorization: Bearer mq_xxx" https://api.mobiusquant.ai/api/markets

# All symbols on a single venue
curl -H "Authorization: Bearer mq_xxx" \
     https://api.mobiusquant.ai/api/markets/binance/perp/symbols
```
:::

## Historical time windows {#historical-windows}

For subscribed Binance, Bybit, OKX and Hyperliquid instruments, including Binance stock perpetuals,
`GET /api/klines`, `POST /api/indicators` and `POST /api/chart` automatically retrieve available
history when `startTime` or `endTime` is supplied. No new parameter or preliminary Kline request
is required. Requests without time bounds retain latest-data behavior. Stock spot, forex,
commodity futures and gold spot retain their existing history limitations.

Use this body with either POST endpoint, assuming the symbol is subscribed and the history exists:

```json
{
  "exchange": "binance", "market": "perp", "symbol": "SNDKUSDT", "interval": "5m",
  "startTime": 1791849600000, "endTime": 1791936000000, "limit": 300,
  "signals": true,
  "calc": [{"name": "cvd", "id": "cvd"}, {"name": "hmm_regime", "id": "hmm"}]
}
```

- Bounds are inclusive candle opening timestamps in milliseconds. Large ranges select the most recent `limit` interval slots at the end of the range. Missing slots are not fabricated, so fewer candles may be returned.
- An end-only query selects a window ending at that bound. A start-only query selects the most recent window through the present, not forward pagination from the start. Supply both bounds for historical review.
- Warmup does not consume visible `limit`. Existing endpoint output caps still apply; use a common permitted limit when comparing endpoints. Parameter and output-size combinations requiring more than 6,000 history input bars return 400.
- The legacy GET `extend_history` flag remains accepted but is unnecessary for time-window queries. **Do not add it to either POST body**; unknown fields return 422.
- Chart and numeric results use consistent calculation history for a fixed closed window. Features and objects come from the same calculation. Use `include:["calculation"]` for actual input ranges. Revisions and forming-candle updates can still change results between requests.
- Insufficient history retains native null/status semantics. The API does not substitute latest candles or stock-spot history, and cannot reconstruct historical intrabar features that later disappeared.

Errors retain the `{"detail":"..."}` body. The `X-Kline-Error-Code` response header distinguishes:

| HTTP | Code | Action |
| --- | --- | --- |
| 404 | `symbol_not_subscribed` | Check the subscribed symbol list |
| 404 | `history_not_available` | No candles are available in the selected window |
| 503 | `history_preparing` | Retry the same request after `Retry-After` |
| 503 | `history_busy` | Respect `Retry-After` and reduce concurrent windows |
| 503 | `history_upstream_unavailable` | The data source is temporarily unavailable; respect `Retry-After` |

Other service 503 and API 429 responses retain their existing handling. Source-side rate limiting
may appear as a historical-source 503. An unavailable window does not prove delisting; do not
silently replace the request with latest data.

## Canonical symbol rules

| Venue | Form | Examples |
| --- | --- | --- |
| Crypto | `{BASE}{QUOTE}` | `BTCUSDT`, `BTCUSDC`, `1000PEPEUSDT` |
| Binance stock perpetuals | Full contract symbol on `binance:perp` | `TSLAUSDT`, `NVDAUSDT` |
| `stock:cn` | 6-digit bare code (no `sh` / `sz` / `.SS` suffix) | `600519`, `000333`, `300750` |
| `stock:hk` | 5-digit with leading zero | `00700`, `09988` |
| `stock:us` | Bare ticker | `AAPL`, `NVDA`, `TSLA` |
| `forex:spot` | 6-letter concatenation | `EURUSD`, `USDJPY`, `GBPUSD` |
| `commodity:futures` | Futures canonical code | `XAUF`, `XAGF`, `WTIUSD` |
| `commodity:spot` | Gold spot canonical code | `XAUUSD` |

Send the **canonical** value in API requests. The native examples below are not valid request symbols:

| Native | Canonical |
| --- | --- |
| `BTC-USDT-SWAP` (OKX perp) | `BTCUSDT` |
| `BTCPERP` (Bybit USDC perp) | `BTCUSDC` |
| `kPEPE` (Hyperliquid) | `1000PEPEUSDC` |
| `1000PEPEUSDT` (Binance memecoin) | `1000PEPEUSDT` (already canonical) |
| `00700.HK` | `00700` |
| `600519.SS` | `600519` |
| `GC=F` (Gold futures) | `XAUF` on `commodity:futures` |

**Rule of thumb**: all uppercase, no separators, `perp` vs `spot` is encoded in the **venue** (not in the symbol).

## Binance stock perpetuals {#binance-stock-perp}

Use `exchange="binance"`, `market="perp"` and the full contract symbol, for example `TSLAUSDT`. This is not stock spot on `stock:us`; do not send bare `TSLA` or `market="stock"`. This capability covers Binance only, not stock contracts on other exchanges.

**Discover before querying.** `/api/markets/binance/perp/symbols` lists only contracts subscribed by this service. An exchange listing does not imply an active service subscription. The default response is unchanged; add `include_meta=true` for instrument classification:

```bash
curl 'https://api.mobiusquant.ai/api/markets/binance/perp/symbols?include_meta=true'
```

Example when TSLA is subscribed (one symbol shown):

```json
{
  "exchange": "binance",
  "market": "perp",
  "symbols": ["TSLAUSDT"],
  "count": 1,
  "symbol_meta": {
    "TSLAUSDT": {"instrument_type": "equity_perpetual", "underlying_symbol": "TSLA", "quote_asset": "USDT", "status": "trading"}
  },
  "metadata_status": "ready",
  "metadata_updated_at_ms": 1791936000000
}
```

| Field | Meaning |
| --- | --- |
| `symbol_meta[symbol].instrument_type` | `equity_perpetual` identifies a verified stock perpetual. Other values: `crypto_perpetual`, `commodity_perpetual`, `forex_perpetual`, `pre_ipo_perpetual`, `unclassified_tradfi_perpetual`, `unknown`. Unreviewed equity-class instruments and ETFs must not be treated as verified stocks |
| `underlying_symbol` | Verified stock ticker such as `TSLA`; `null` for other types or unknown identity |
| `quote_asset` | Quote asset; supported stock contracts use `USDT`. `null` when unknown |
| `status` | `trading`, `pending` (not yet listed), `paused`, `ended`, or `unknown` |
| `metadata_status` | `ready`, `stale` (expired or refresh failed), or `unavailable` (no usable directory yet). This is not candle readiness; stale metadata is not a current tradability guarantee |
| `metadata_updated_at_ms` | Last successful directory update in milliseconds; `null` when unknown |

`include_meta=true` currently supports only `binance:perp`; other venues return `400`. Metadata covers subscribed symbols only and adds no Kline or indicator numeric columns. The existing venue-level `asset_class=crypto` label does not classify each underlying instrument; use `instrument_type` instead.

- Intervals: `1m / 5m / 15m / 1h / 4h / 1d`. Query `/api/intervals?exchange=binance&market=perp` for enabled intervals and response caps.
- OHLC uses contract trade prices. `volume/quote_volume` use upstream contract volume/notional, not cash-stock volume. These are not index-price or mark-price candles. There is no split/dividend adjustment or stitching with cash-stock history.
- Cash-stock trading calendars do not stop the perpetual feed. Weekends and cash-market closures do not by themselves imply a contract trading halt. Distinguish trading status from candle freshness.
- `startTime/endTime` still filter candle opening times in milliseconds. All three market-data endpoints automatically retrieve available history; see [historical windows](#historical-windows). They cannot create pre-listing data, fabricate gaps, or raise per-request caps.
- Reuse `/api/klines`, `/api/indicators` and `/api/chart` after subscription. Unsubscribed symbols return `404`; preparing data returns `503`. Respect `Retry-After`.
- Indicator and feature history, interval and continuity requirements still apply. CVD is an OHLCV-based estimate, not trade-by-trade aggressor volume. HMM supports `5m / 15m / 1h / 4h / 1d`, not `1m`. Newly listed contracts may have insufficient history; `null` is not a negative feature result.
- Set `signals:true` for native features; optionally add `include_forming:true` to evaluate the unclosed final candle. Intrabar conditions can disappear. See [feature signals](/signals#forming) for classification and confirmation times.

The examples below assume TSLAUSDT is subscribed:

```bash
curl 'https://api.mobiusquant.ai/api/klines?exchange=binance&market=perp&symbol=TSLAUSDT&interval=5m&limit=100'

# Values and native features. Change the path to /api/chart for plotting.
curl -X POST 'https://api.mobiusquant.ai/api/indicators' \
  -H 'content-type: application/json' \
  -d '{"exchange":"binance","market":"perp","symbol":"TSLAUSDT","interval":"5m","limit":100,"signals":true,"include_forming":true,"calc":[{"name":"macd"},{"name":"rsi"},{"name":"cvd"},{"name":"hmm_regime"}]}'
```

## Hyperliquid native perpetuals {#hyperliquid-perp}

Use `exchange="hyperliquid"`, `market="perp"`. Coverage is limited to the default USDC perpetual market; Hyperliquid spot and HIP-3 contracts are not supported.

- Send canonical symbols such as `BTCUSDC`, `ETHUSDC`, or `HYPEUSDC`. `1000PEPEUSDC` maps to native `kPEPE`. Do not send `BTC`, `BTCUSDT`, `kPEPE`, or DEX-prefixed names.
- `/api/markets/hyperliquid/perp/symbols` lists contracts subscribed by this service, not every contract listed on the exchange. Unsubscribed contracts are not available for Kline queries or indicator calculations.
- Supported intervals are `1m / 5m / 15m / 1h / 4h / 1d`. Query `/api/intervals?exchange=hyperliquid&market=perp` for enabled intervals and request limits.
- `volume` is the exchange-provided base-asset volume. `quote_volume` is estimated as `volume × close`, not an exact sum of traded notional. Prices and volumes use the contract's units; a `1000`-prefixed contract must not be treated as a single-token quote.
- `startTime/endTime` filter candle opening times in milliseconds, inclusive, without an additional history flag. The source only exposes its most recent 5,000 candles. Arbitrary historical dates are not guaranteed, and history access does not increase the endpoint's request allowance.
- Use the same indicator, chart and feature-signal endpoints as for other supported crypto venues. HMM does not support `1m`. CVD remains an OHLCV-based delta estimate, not trade-by-trade aggressor volume.
- The forming candle can change. Read `true/false/null` according to the [feature-signal guide](/signals); insufficient history is not equivalent to a feature being absent.

```bash
# Discover subscribed symbols and enabled intervals.
curl 'https://api.mobiusquant.ai/api/markets/hyperliquid/perp/symbols'
curl 'https://api.mobiusquant.ai/api/intervals?exchange=hyperliquid&market=perp'

# Latest 100 BTC perpetual 5m candles.
curl 'https://api.mobiusquant.ai/api/klines?exchange=hyperliquid&market=perp&symbol=BTCUSDC&interval=5m&limit=100'

# MACD, RSI and CVD with native features. Use /api/chart for a chart response.
curl -X POST 'https://api.mobiusquant.ai/api/indicators' \
  -H 'content-type: application/json' \
  -d '{"exchange":"hyperliquid","market":"perp","symbol":"BTCUSDC","interval":"5m","limit":100,"signals":true,"calc":[{"name":"macd"},{"name":"rsi"},{"name":"cvd"}]}'
```

## Gold spot {#gold-spot}

Use `exchange=commodity`, `market=spot`, `symbol=XAUUSD`. This is distinct from gold futures (`commodity:futures / XAUF`). Do not send `XAU/USD`, `GC=F`, or use `forex:spot` for gold spot.

- Supported intervals: **`5m`, `15m`, `30m`, `1h`, `4h`, `1d`**. The minimum is **5m**; gold spot `1m` requests return **400**, including Kline, indicator, chart and playbook requests.
- Quotes update every **5 minutes**, not tick-by-tick. A current candle can still change before it closes.
- Each supported interval returns up to **1000 bars**. Query `/api/intervals?exchange=commodity&market=spot` for the venue-specific limits; the unfiltered endpoint describes crypto.
- Reuse `/api/klines`, `/api/indicators` and `/api/chart`. EMA, RSI, MACD and other price-based indicators are supported. A custom price-only playbook can use `/api/analyze`.
- Prices are indicative mid-prices, not executable broker quotes. No actual trading volume is available: the two volume fields are `0` placeholders, with `data_meta.volume_type="unavailable"`. Volume-dependent indicators such as CVD, VWAP and OBV return **400**; the existing CVD-based `market-pulse` playbook is not suitable for gold spot.
- Inspect `data_meta.ready`, `stale`, `last_sync_ms`, `data_as_of_ms` and `last_bar_complete`. Data not ready returns **503**. Data older than 15 minutes is marked stale; latest-data queries are refused after 1 hour. Bounded historical queries can still return available history.
- OHLCV timestamps are Unix **milliseconds**; chart `time` is in **seconds**. Daily candles open at 07:00 Australia/Sydney; 4h boundaries follow that local session clock, including daylight-saving changes.

```bash
# Check health before requesting data.
curl 'https://api.mobiusquant.ai/api/health'

# Latest 100 gold spot 5m candles.
curl 'https://api.mobiusquant.ai/api/klines?exchange=commodity&market=spot&symbol=XAUUSD&interval=5m&limit=100'

# EMA and RSI on gold spot 5m candles.
curl -X POST 'https://api.mobiusquant.ai/api/indicators?explain=false' \
  -H 'content-type: application/json' \
  -d '{"exchange":"commodity","market":"spot","symbol":"XAUUSD","interval":"5m","limit":100,"calc":[{"name":"ema","params":{"period":20}},{"name":"rsi","params":{"period":14}}]}'
```

## Natural-name lookup

The engine ships with a built-in natural-language → canonical mapping. Users say "Bitcoin" or "Tencent" — the engine resolves to `BTCUSDT` or `00700`:

```bash
curl -H "Authorization: Bearer mq_xxx" \
     "https://api.mobiusquant.ai/api/symbols/search?q=bitcoin"
# → [{ "canonical": "BTCUSDT", "exchange": "binance", "market": "perp", ... }]
```

The search endpoint also has a smartbox fallback — it can discover ANY A-share, HK, or US stock beyond the curated list. When gold spot is enabled, "黄金" resolves to `commodity:spot / XAUUSD`; gold futures remain `commodity:futures / XAUF`.

Full mapping: `GET /api/symbols/builtin`.

## Symbol lists per venue

For symbol examples including Chinese company names, see the [Chinese reference](/zh/markets). Confirm current availability with `/api/markets/{exchange}/{market}/symbols`.

## Companion endpoints

| Method | Path | Purpose |
| --- | --- | --- |
| GET | `/api/markets` | All venues + WS health |
| GET | `/api/markets/{exchange}/{market}/symbols` | Symbols on one venue |
| GET | `/api/intervals` | Supported intervals and maximum returned bars |
| GET | `/api/klines` | Raw OHLCV |
| GET | `/api/symbols/builtin` | Natural-name → canonical mapping table |
| GET | `/api/symbols/search?q=` | Fuzzy natural-language search (with smartbox fallback) |
| GET | `/api/health` | Per-venue status (`ok` / `degraded` / `dead` / `starting`) |
| GET | `/api/derivatives/funding-rates` | Funding rate history (Binance / Bybit / OKX) |
| GET | `/api/derivatives/open-interest` | Open interest history (Binance) |
| GET | `/api/derivatives/long-short-ratio` | Top trader long/short ratio (Binance) |
| GET | `/api/derivatives/taker-ratio` | Taker buy/sell ratio (Binance) |
| GET | `/api/sentiment/fear-greed` | Crypto Fear & Greed Index |

Full field-level reference: [API Documentation](https://api.mobiusquant.ai/docs). See also [Derivatives & Sentiment](/derivatives) for detailed endpoint documentation.
