Getting started
Sign in, create or select a desk, inspect model bundles, compare prices and preview the intended order. The selected desk and its authority context travel with each account-scoped request.
Use the terminal
The terminal guides account selection, catalogue search, bundle construction, price comparison, and order preview. API integrations should reproduce the same sequence rather than guessing an instrument symbol or fee.
Establish a session
Registration creates a user but does not sign it in. Sign in separately to establish the browser session:
<span><span style="color: var(--shiki-token-keyword)">POST</span><span style="color: var(--shiki-color-text)"> /api/v1/auth/register</span></span>
<span><span style="color: var(--shiki-token-string-expression)">Content-Type</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">application/json</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">{</span><span style="color: var(--shiki-token-keyword)">"email"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-token-string-expression)">"trader@example.com"</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-token-keyword)">"display_name"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-token-string-expression)">"Example Trader"</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-token-keyword)">"password"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-token-string-expression)">"…"</span><span style="color: var(--shiki-color-text)">}</span></span>
<span></span>
<span><span style="color: var(--shiki-token-keyword)">POST</span><span style="color: var(--shiki-color-text)"> /api/v1/auth/login</span></span>
<span><span style="color: var(--shiki-token-string-expression)">Content-Type</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">application/json</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">{</span><span style="color: var(--shiki-token-keyword)">"email"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-token-string-expression)">"trader@example.com"</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-token-keyword)">"password"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-token-string-expression)">"…"</span><span style="color: var(--shiki-color-text)">}</span></span>
<span></span>
Browser clients include credentials on subsequent requests. GET /api/v1/auth/me returns the user and every desk membership available to that session.
Register or select a desk
Register a desk with POST /api/v1/accounts or select an account_id returned by /auth/me. A new desk response carries trading_state: "TRADING_DISABLED", credit_limit_usd: "0", and the creator's OWNER membership. Supplying a positive credit amount returns 403 credit-approval-required; the participant account route cannot grant credit or activate the desk.
Desk-scoped requests carry:
<span><span style="color: var(--shiki-token-string-expression)">x-mm-account-id</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">00000000-0000-0000-0000-000000000000</span></span>
<span></span>
The supported desk roles are BUYER, SELLER, and BROKER. Reading or registering accounts requires the session but does not use the desk header.
Inspect and prepare
- Read models, providers, and instruments through the public catalogue routes.
- Quote a workload with
POST /calculator/quoteor normalized weights withPOST /bundles/quote. - Select an active orderable bundle instrument.
- Call
POST /orders/previewwith the intended order fields.
A priceable Spot product that is not already listed can be submitted through POST /bundles with a reason and optional idempotency_key. A first valid submission returns 409 product-approval-required with approval_request_id and remains inactive until an attributed venue decision. Forward product submission returns 409 forward-listing-unavailable.
Act when enabled
An order, RFQ mutation, quote acceptance, or product request opens exposure. It requires an OWNER or TRADER membership, an ACTIVE desk with positive venue-set credit, open venue and desk controls, and an open instrument control when a symbol is involved.
When those conditions hold, mint one non-empty client_order_id for direct
REST/FIX placement, submit the intended instruction to POST /orders, and keep
that identity for an unchanged retry. Voice placement may derive its identity
from the session. 409 account-trading-unavailable or
409 trading-control-active means no new exposure was accepted. Cancellation
and fixed-window evidence remain available to an eligible trading membership
while those controls are closed.
All routes in those steps are relative to /api/v1. Preserve exact decimal strings and use size_tokens for spot or size_mft for forward instruments. A retry conflict names the existing account order to reconcile rather than replaying its result. Continue with Orders and matching and the API surface.