POST /order, so you can mix execution policies or token IDs while saving round trips.
KUEST_ADDRESS, KUEST_SIGNATURE, KUEST_TIMESTAMP, KUEST_API_KEY, and KUEST_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 KUEST_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 KUEST_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 KUEST_ADDRESS header. |
orderType | string | Yes | Time-in-force policy for the order (FOK, FAK, GTC, GTD). |
postOnly | boolean | No | When true, the order must rest on the book (GTC/GTD only). |
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.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 KUEST_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. |
Checksummed wallet address performing the request.
API key obtained from the L1 derivation endpoint.
64 character hexadecimal passphrase associated with the API key.
Millisecond epoch timestamp (string) used for freshness checks.
Hex-encoded HMAC-SHA256 signature built from the L2 signing string.
1 - 15 elementsBatch order placement results
Indicates whether the order was accepted.
Human-readable status for the placement.
ULID of the submitted order when accepted.
Settlement hashes for immediate matches (empty if none).
Machine-readable error code when placement fails.