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/ngnandUSD/NGNare 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/askare indicative. They are not a lock-in price — pass an amount toPOST /v1/quotesto 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.