Subscribing

Once connected, subscribe to the pairs you want. You receive an acknowledgement, an optional snapshot, and then update frames as prices move.

Subscribe

{
  "method": "subscribe",
  "params": {
    "channel": "ticker",
    "symbol": ["USD/NGN", "BTC/USD"],
    "snapshot": true
  },
  "req_id": 1
}
Field Type Required Description
method string Yes "subscribe"
params.channel string Yes "ticker"
params.symbol string[] Yes One or more BASE/QUOTE pairs (see Supported pairs). Case-insensitive.
params.snapshot boolean No Send the current price immediately after subscribing. Default true.
req_id integer No Echoed back on the ack so you can correlate the response.

Symbols are normalized to uppercase, so usd/ngn and USD/NGN are equivalent.

Acknowledgement

{
  "method": "subscribe",
  "result": { "channel": "ticker", "symbol": ["USD/NGN", "BTC/USD"], "snapshot": true },
  "success": true,
  "req_id": 1
}

result.symbol lists the symbols that were accepted. Any unsupported symbol produces a separate unknown_symbol error (see Errors & Limits); the rest still succeed.

Snapshot

If snapshot was true, the current price for each accepted pair arrives in one frame:

{
  "channel": "ticker",
  "type": "snapshot",
  "data": [
    { "symbol": "USD/NGN", "bid": 1683.42, "ask": 1700.10, "server_time": "2026-05-25T13:28:53.194Z" },
    { "symbol": "BTC/USD", "bid": 76635.35498, "ask": 77871.48996, "server_time": "2026-05-25T13:28:53.249Z" }
  ]
}

Update

Prices are re-checked roughly every 10 seconds and a frame is sent only when bid/ask changes (you won't receive a frame for an unchanged price). Active pairs update more often as the market moves:

{
  "channel": "ticker",
  "type": "update",
  "data": [
    { "symbol": "BTC/USD", "bid": 76651.62430, "ask": 77888.02169, "server_time": "2026-05-25T13:29:40.021Z" }
  ]
}
Field Type Description
symbol string The pair, canonical BASE/QUOTE
bid number Price to sell BASE, in QUOTE — includes your account's pricing
ask number Price to buy BASE, in QUOTE — includes your account's pricing
server_time string When the gateway sent the frame (ISO 8601)

bid/ask are indicative. They are not a lock-in price — pass an amount to POST /v1/quotes to get an executable rate.

Unsubscribe

{
  "method": "unsubscribe",
  "params": { "channel": "ticker", "symbol": ["BTC/USD"] },
  "req_id": 2
}

Acknowledgement:

{
  "method": "unsubscribe",
  "result": { "channel": "ticker", "symbol": ["BTC/USD"] },
  "success": true,
  "req_id": 2
}

You stop receiving update frames for the unsubscribed pairs. Other subscriptions are unaffected.