Submits between 1 and 15 orders in a single request.
POST /order, so you can mix execution policies or token IDs while saving round trips.
FORKAST_ADDRESS, FORKAST_SIGNATURE, FORKAST_TIMESTAMP, FORKAST_API_KEY, and FORKAST_PASSPHRASE. Review the flow in the Authentication overview.409 and {"error":"system_paused"}. Books paused individually still return 409 along with {"error":"condition_paused"}. Every entry in the batch must use an owner value that matches FORKAST_ADDRESS; otherwise the API returns 400 with {"error":"owner_address_mismatch"}.status field with the same meanings described in Place single order (live, matched, delayed, or unmatched).
Every array entry mirrors the single-order placement response structure, enabling you to inspect insert success, warnings, and order IDs independently.
Need to check the final state of a submitted order? Call GET /data/order/{id}. To revoke any remaining quantity, use DELETE /order.
POST /order. Provide the owner field alongside orderType and the nested order payload so it matches the FORKAST_ADDRESS header. Key constraints repeated here for convenience:
| Field | Type | Required | Description |
|---|---|---|---|
owner | string | Yes | Polygon address that owns the API key. Must match the FORKAST_ADDRESS header. |
orderType | string | Yes | Time-in-force policy for the order (FOK, FAK, GTC, GTD). |
order | object | Yes | Full order payload identical to the single-order endpoint. |
order.tokenId | string | Yes | Identifier of the token/outcome being traded. |
order.conditionId | string | Yes | Market condition identifier tied to the token. |
order.expiration | string | Conditional | Required for GTD, optional elsewhere. |
order.maker | string | Yes | Address that holds the asset being offered. |
order.signer | string | Yes | Address that signed the order. |
order.taker | string | Yes | Counterparty address (use the zero address for open orders). |
order.makerAmount | string | Yes | Maker quantity with fixed precision. |
order.takerAmount | string | Yes | Taker quantity with fixed precision. |
order.side | string | Yes | Either BUY or SELL. |
order.referrer | string | Yes | Referrer identifier (use the zero address when unused). |
order.affiliate | string|null | No | Affiliate beneficiary address; supply null when unused. |
order.affiliatePercentage | integer|null | No | Affiliate share in basis points. |
order.metadata | object|null | No | Optional JSON metadata stored with the order. |
order.nonce | string | Yes | Monotonic maker nonce. |
order.feeRateBps | string | Yes | Maker fee rate in basis points. |
order.salt | string | Yes | Unique entropy for replay protection. |
order.signatureType | number | Yes | 0 = EOA, 1 = proxy signer, 2 = Gnosis Safe signer. |
order.signature | string | Yes | Hex-encoded signature over the order payload. |
order.metadata remains optional just like the single-order endpoint and can be omitted entirely in batch submissions. order.side must be the uppercase string BUY or SELL, and owner must align with the FORKAST_ADDRESS header.| Type | Partial fills? | Rests on the book? | Auto expiration? |
|---|---|---|---|
| FOK (Fill-Or-Kill) | ❌ No | ❌ No | ✅ Immediately if not 100% filled |
| FAK (Fill-And-Kill / IOC) | ✅ Yes | ❌ No | ✅ Any remaining size cancels right away |
| GTC (Good-Til-Cancelled) | ✅ Yes | ✅ Yes, until cancelled | ❌ No |
| GTD (Good-Til-Date) | ✅ Yes | ✅ Yes, until the given timestamp | ✅ At the specified expiration time |
GTD, remember the one-minute safety buffer: if the order should expire in 90 seconds, set expiration = now + 90 + 60.
errorCode catalog as POST /order. Requests with fewer than 1 or more than 15 entries return HTTP 400 Bad Request without per-order results. When the batch exceeds the limit, the response body includes the message "batch supports at most 15 orders" to clarify the rejection.
| errorCode | success | errorMsg (default) | Notes |
|---|---|---|---|
INVALID_ORDER_MIN_TICK_SIZE | true | order is invalid. Price breaks minimum tick size rules | Price implied by maker/taker amounts is outside the permitted [0, 1_000_000] window. |
INVALID_ORDER_MIN_SIZE | true | order is invalid. Size lower than the minimum | Maker or taker amount is non-positive or below minimum size. |
INVALID_ORDER_DUPLICATED | true | order is invalid. Duplicated. Same order has already been placed, can’t be placed again | Reserved for future duplicate protection. |
INVALID_ORDER_NOT_ENOUGH_BALANCE | true | not enough balance / allowance | Reserved for balance/allowance enforcement. |
INVALID_ORDER_EXPIRATION | true | invalid expiration | Missing, past, or negative expiration. |
INVALID_ORDER_ERROR | true | could not insert order | Generic validation failure. |
EXECUTION_ERROR | true | could not run the execution | Internal engine/database failure while inserting. |
ORDER_DELAYED | false | order match delayed due to market conditions | Reserved for delayed matching path. |
DELAYING_ORDER_ERROR | true | error delaying the order | Reserved for delayed matching errors. |
FOK_ORDER_NOT_FILLED_ERROR | false | order couldn’t be fully filled, FOK orders are fully filled/killed | Returned when a fill-or-kill order cannot fill 100%. |
MARKET_NOT_READY | false | the market is not yet ready to process new orders | Reserved for markets warming up. |
1 - 15 elementsBatch placement results
Indicates whether the order was accepted.
true
Human-readable status for the placement.
""
Settlement hashes for immediate matches (empty if none).
[]Machine-readable error code when placement fails (ex: FOK_ORDER_NOT_FILLED_ERROR, EXECUTION_ERROR).
null
ULID of the submitted order when accepted.
"01JABCD4XY7M5Q1PQW8ZMN9ABC"