To place one or more orders, send aDocumentation Index
Fetch the complete documentation index at: https://docs.4casters.io/llms.txt
Use this file to discover all available pages before exploring further.
placeV3 message over the WebSocket connection. A single request may contain a batch of orders; per-order results come back in a data array, positional with your orders array.
The unique ID of the game.
The amount to risk on the bet.
The market type — one of
moneyline, spread, total, or moneyline1x2. moneyline1x2 is soccer only (three-way money line: home / away / draw).Depends on
type:moneyline,spread— the participant ID you are backing.total—"over"or"under".moneyline1x2—"yes"or"no"on the outcome named bymarket.
Required only for
moneyline1x2. Either "draw" or a participant ID — names the outcome you’re betting yes/no on. For example, side: "yes" + market: "draw" means the match ends in a draw; side: "no" + market: "<homeTeamId>" means the home team does not win.One of
limit, post, postArb, or fillAndKill. See Order types below.The odds in American format (e.g., +150 or -110).
The spread or total number. Required for
spread and total; not used for moneyline or moneyline1x2.A client-defined identifier to help track the order on your side.
Order types
limit
The default order type. Executes against any matching liquidity at your price or better as a taker (with taker commission), and rests any remainder on the book as a maker. A limit order can finish fully matched, fully resting, or partially matched with the remainder resting.
post
Create a resting offer. If the order would match existing liquidity when placed, the server rejects it (typically rejected_order_type_rules, for example "post order cannot have matches").
postArb
Behaves like post, but you may post even when the order would match, only if your American odds are within 1% of the odds on the resting order you would match. If that price difference is more than 1%, the place is rejected.
Examples:
- Best offer +100 and you post +100 —
postis rejected (it would match);postArbcan be allowed. - Best offer +200 —
postArbat +190 is rejected (too far from +200). About +198 is at the edge of the 1% band vs +200. - Best order −200 — the band extends to about −202 on the negative side (same 1% rule).
- With +100 on the book, −101 is the reference limit on the other side for the 1% tolerance (per product rules).
postArb avoids taker fees across a normal trade — you are not charged taker fees on this flow the way you would be if you lifted or hit resting liquidity as a taker.
fillAndKill
Must execute immediately against available size at your price, or the order is rejected. See the Fill And Kill scenarios in the examples below.
Response
The server responds with yourrequestID and a list of per-order results.
Examples
Scenario 1: Match orders with no leftover liquidity
Place 3 orders that all match instantly with available liquidity.Scenario 2: Limit order with leftover liquidity
Place 1 order for 300 that partially matches instantly and leaves the remaining liquidity resting on the orderbook. The response shows a portion matched and a portion left unmatched.Scenario 3: Fill and Kill order with match
A fill-and-kill order with a full match.Scenario 4: Fill and Kill order with no match
A fill-and-kill order with no match. The server responds with anerror and error_type.
Scenario 5: postArb vs post when the book would match
post rejects an order that would match resting liquidity (for example, best offer +100 and you try to post +100). postArb allows that situation when your odds are within 1% of the order you would match — so the same +100 post can succeed as postArb, and you avoid the taker fees you would pay across a normal trade if you took that liquidity as a taker. If your price is too far from the resting quote (e.g. best offer +200 but you send +190), postArb is rejected; a price around +198 is near the limit vs +200. Use "orderType": "postArb" in the order object the same way as limit, post, or fillAndKill.
Scenario 6: moneyline1x2 (soccer three-way)
moneyline1x2 is the soccer three-way market — home / away / draw — placed as a yes/no bet on the outcome named by market. Below, yes on the draw at +250.
side: "no" and set market to the home participant’s ID.
Live delay
Orders placed on a game marked as live follow these rules:- If the order does not match any existing liquidity, it is placed immediately.
- If the order does match existing liquidity, it incurs a delay period before it is executed.
- Different leagues have different live delay periods:
- NFL, UFCMMA, NCAAF — 3 seconds.
- NCAAB, NBA — 5 seconds.
- ATP, WTA — 8 seconds.
- Default — 10 seconds.
- After the delay, the order attempts to execute:
- If the odds improve, it matches instantly.
- If the odds decrease, it does not match.
Error responses
When the server fails to place an individual order, the per-order entry indata[] is returned in this shape:
data array, matching the index of the input order in your orders array.
erroris not standardized; it’s a descriptive string and may vary.error_typeis an enum you can rely on for programmatic handling:validation_error— payload or state failed validation (e.g., missing fields, bad odds/number, invalid side, inactive game).rejected_liability— user/account/liability constraints prevented posting or execution.rejected_order_type_rules— order-type rules forbid execution (e.g.,fillAndKillfound no executable liquidity, so nothing could be filled and the order was rejected;postfound matches when matches are not allowed; orpostArbwas rejected because your American odds differ from the resting order you would match by more than 1%).system_error— transient/internal error; retry may succeed.