https://auth.ocx.global/binary/mm. Access is by an API key issued by OCX, sent on every request as x-api-key. The key is bound to a market-making account whose binary cash is pre-funded; quoting does not use your wallet. Quota: 1,200 requests a minute per key.
Quotes are Up prices in cents, 1–99. A bid buys Up; an ask sells Up, which is the same as buying Down at
100 − price. Reference prices are integer ticks with 3 decimals (7751.375 → 7751375). Times are epoch milliseconds.Session and lease
1
Open
POST /session { "lease_ms": 2000 } → { session_id, lease_ms, max_quote_ttl_ms: 5000, server_ms }. lease_ms is 500–10,000.2
Keep it alive
POST /heartbeat { "session_id" } within every lease. An accepted quote also counts as a heartbeat.3
Lose it, lose your quotes
If nothing arrives within the lease, OCX cancels every quote on the account (
cancelled, reason lease) and the session is dead: open a new one. A service restart also closes all sessions.4
Close
POST /session/close { "session_id" } cancels your quotes and ends the session.Quote
POST /quote replaces your whole ladder on one window.
string
required
Unique per request. A retry with the same id returns the original receipt with
"replay": true; the same id with another window or sequence is refused (409).string
required
A live session.
string
required
The window, e.g.
SPX-15M-20261029-0930. It must be open and before its cutoff.number
required
Positive, and strictly greater than the last accepted for this session and window (
409 STALE_QUOTE_SEQ).number
required
Server-side expiry, in the future and at most 5,000 ms ahead.
array
required
[{ "price_cents", "quantity" }], at most 5 levels a side, best first, distinct, not crossed. Empty arrays pull the ladder.cURL
Receipt
- Atomic. The previous ladder comes off and the new one goes on in one transaction. A refused quote leaves the previous ladder untouched.
- Fills before the receipt. A ladder that crosses resting orders trades immediately. Those fills, and everything before them, are in the event stream at or below the receipt’s
event_seq. - Server-side expiry. At
valid_until_msthe levels stop trading and are removed (cancelled, reasonexpired), even if your process is gone. - Cancel on disconnect. Through the lease, above.
- Your fills are tagged with the
quote_seqof the ladder they came from.
POST /cancel { "cid"? } pulls one window, or every window.
Event stream
GET /events?after={event_seq}&limit=500 → { events: [{ event_seq, server_ms, event: { type, … } }], watermark }. Poll with after = the last watermark. event_seq order is commit order, without gaps.
listed, activated and settled are public to every key; the rest are your account’s.
Reference, windows, snapshot
Errors
{ "message" } with 400 (invalid request), 401 (unknown key), 403 (account not set up for quoting), 409 (window not open, stale quote_seq, session expired, request_id reused) or 429 (quota).