Use FIX 4.4 over TLS 1.2 or 1.3, with certificate verification enabled. Choose the FIX host and port for your network in the Networks table. Use credentials and market ids from that same network.
MainNet is market data only: logon, Security List and market data requests are supported, but every order message is refused with orders_blocked. Development and TestNet have order entry enabled. A listed endpoint does not mean MainNet is open for trading.

Logon and session recovery

Use an API key with the trade permission. Your SenderCompID must be the key’s id and must be accepted for that venue’s FIX session. See API keys for key authorization and scope rules. Persist sequence numbers across logons, logouts and disconnects. Do not request a reset at logon: 141=Y disconnects the session without changing the stored counters. If a sequence gap occurs, the venue requests the missing messages before processing a message above the expected sequence. Send heartbeats at the negotiated interval and support resend recovery. Order entry opens a few seconds after Logon, once the venue has connected the session’s execution updates. A New Order Single sent before that is refused with a BusinessMessageReject (j) whose Text (58) is stream_unavailable; nothing is placed, so wait and send it again.

Discover symbols and market data

Request the Security List with SecurityListRequest (x). The SecurityList (y) response contains each listed market’s Symbol (55) and SecurityDesc (107). Use the market ids returned by that network’s list or its public GET /v1/markets catalog as symbols. MarketDataRequest (V) supports snapshots (263=0), snapshots with updates (263=1) and unsubscribe (263=2). Request top of book (264=1) and bid (269=0), offer (269=1) or trade (269=2) entries for symbols from the list. Snapshots arrive as W, updates as X, and a refused market data request as Y with a reason in Text (58).

Submit and cancel orders

On a network with order entry enabled, send NewOrderSingle (D) to place an order and OrderCancelRequest (F) to cancel an order placed by that FIX session. For a limit order, send OrdType (40) as 2, TimeInForce (59) as 1 (GTC) and ExecInst (18) as 6 (post-only). Include a unique ClOrdID (11), the network’s Symbol (55), Side (54, 1 for buy or 2 for sell), OrderQty (38) and Price (44). If Account (1) is present, it must match the key’s account. Read ExecutionReports (8) for accepted orders, fills and definitive order refusals. A refused cancel arrives as OrderCancelReject (9). Check Text (58) on refusals; BusinessMessageReject (j) can also report a blocked or uncertain request.
outcome_pending means the result is unknown. Keep the original ClOrdID and fields when reconciling it; do not submit the same intent under a new identity. An accepted order or fill report does not establish settlement finality.