Skip to main content
Designated market makers quote binary options through a dedicated API at 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
Guarantees
  • 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_ms the levels stop trading and are removed (cancelled, reason expired), even if your process is gone.
  • Cancel on disconnect. Through the lease, above.
  • Your fills are tagged with the quote_seq of 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).