Skip to main content
GET
Get a single order by internal id

Authorizations

X-Client-Id
string
header
required

Credential client id (kairos_ck_...). Must be sent together with X-Api-Key and X-Api-Secret.

X-Api-Key
string
header
required

64-char hex API key.

X-Api-Secret
string
header
required

64-char hex API secret.

Path Parameters

order_id
string<uuid>
required

Internal Kairos order id (the order_id returned by POST /orders or POST /v2/orders/submit).

Response

The order, including raw and metadata.

Exchange-agnostic order record.

id
string<uuid>
required

Internal Kairos order id.

user_id
string
required

Owning user's id.

exchange_id
string
required

Venue identifier (e.g. polymarket, kalshi, predictfun, hyperliquid).

Example:

"polymarket"

market_id
string
required

Market/contract identifier on the venue (condition id for Polymarket; numeric HIP-4 outcome id for Hyperliquid).

side
enum<string>
required

Order/intent side. Lower-case on the wire.

Available options:
buy,
sell
Example:

"buy"

kind
enum<string>
required

Order type. market orders still require a price (the limit you'll cross to); limit orders rest at price until filled or cancelled.

Available options:
market,
limit
Example:

"limit"

quantity
string
required

Order quantity (decimal string, full precision), shares/contracts.

Example:

"100"

time_in_force
enum<string>
required

Time-in-force, always UPPER-CASE on the wire. GTC/GTD are resting (limit-style); FOK/FAK/IOC are immediate taker executions.

Available options:
GTC,
GTD,
FOK,
FAK,
IOC
Example:

"GTC"

filled_quantity
string
required

Cumulative filled quantity (decimal string).

Example:

"0"

status
enum<string>
required

Lifecycle status. partial is the wire spelling of a partially-filled order (NOT partially_filled).

The internal states queued, locked and orphaned are persisted as pending, so an order read back from GET /orders or GET /orders/{order_id} reports pending for all three — they are listed here because they are part of the type and can appear on in-process/streamed values. executing is the exception: once a worker claims the order for submission it is persisted as executing, and read-back endpoints report executing until the venue acknowledges (then live) or the attempt fails. The one place a caller sees queued directly is the status field of a fresh POST /orders response, which is the literal string "queued".

Available options:
pending,
queued,
locked,
executing,
live,
partial,
filled,
cancelled,
expired,
failed,
orphaned
Example:

"live"

created_at
string<date-time>
required
updated_at
string<date-time>
required
gas_sponsored
boolean
required

Whether Kairos sponsored gas for this order (always false on the self-custody external-signing lane).

collateral_mode
enum<string>
required

The collateral mode resolved for this order at submit. Always present; skip for an order that asked for nothing.

Available options:
skip,
check,
fund
Example:

"skip"

shard_funding
boolean
required

Whether the Kalshi shard move was permitted for this order. Always present; true unless the caller opted out.

Example:

true

holding_wallet
string
required

On-chain wallet that holds (or will hold) the resulting shares — the EOA for legacy Polymarket orders, or the Safe deposit-wallet proxy for upgraded/external-signing users. Empty string for non-Polymarket orders.

token_id
string | null

Outcome-token id. Hyperliquid uses a side coin such as #1010 or #1011.

price
string | null

Limit price as a decimal string in [tick, 1] (prediction-market venues).

Example:

"0.52"

price_bps
integer | null

price expressed in basis points (price × 10000), for DB/analytics compatibility.

Example:

5200

post_only
boolean
default:false

Whether this order was submitted maker-only. A post-only order is one the venue was told to REJECT rather than let cross the spread and take liquidity. Always present; false for ordinary orders and for venues with no post-only concept.

Example:

false

expires_at
string<date-time> | null

Expiration timestamp for GTD orders.

avg_fill_price
string | null

Size-weighted average fill price (decimal string, 0..1), null until any fill lands.

avg_fill_price_bps
integer | null

avg_fill_price in basis points.

exchange_order_id
string | null

Venue-assigned order handle. Null until the order reaches the venue.

terminal_fill_verification
object | null

Durable venue-terminal fill barrier. While pending, callers must retain protection even if another status field appears terminal. complete carries the exact venue cumulative that was folded before terminal publication.

locked_by
string | null

Worker id currently holding the execution lock, if any.

lock_expires_at
string<date-time> | null
error_message
string | null

Failure detail when status is failed.

failure
object

Structured failure detail attached to a failed order (GET /orders, GET /orders/{order_id}, and the order_update WebSocket event). OMITTED entirely (not null) when the order has no failure.

classification is the authoritative retry policy: expected_user_rejection is a well-formed request the venue or the user's own inputs rejected — do not retry without changing the order; retryable is a transient condition that may succeed on retry; non_retryable cannot succeed by retrying the same order.

details.actions is a UI affordance only. It is derived from code independently of classification and may include retry (even as primary) on a non_retryable failure, because the suggested buttons target an end user who may be able to change something first. Do NOT build an automatic retry loop from actions; branch on classification. A client that is not rendering buttons can ignore actions entirely.

fee_amount
string | null

Fee charged for this order, decimal string.

fee_currency
string | null
client_order_id
string | null

Caller-supplied idempotency key, if one was provided at submission.

wallet_id
string | null

FK to the user's wallet used for this order.

outcome
string | null

Human-readable outcome label (e.g. "Yes", "No", a team name).

outcome_id
string | null

Outcome id — equals token_id on Polymarket.

trigger_price
string | null

Trigger price for stop-loss/take-profit style orders, decimal string.

trigger_price_bps
integer | null
max_bridge_fee_usdc
string | null

The order's bridge-fee ceiling in USDC, decimal string. Only ever set under collateral_mode=fund.

max_funding_wait_ms
integer | null

The order's funding-wait ceiling in milliseconds. Only ever set under collateral_mode=fund.

gas_amount
string | null

Gas spent, decimal string, if applicable.

maker_address
string | null

On-chain maker/signer address, for Polymarket reconciliation.

tx_hash
string | null

On-chain transaction hash (Polygon), if the fill involved one.

raw
any | null

Full raw venue request/response payload for audit. Present on GET /orders/{order_id}; stripped to null on GET /orders (list responses) to keep list payloads small.

bot_id
string | null

Trading-bot id that placed this order, if any (null for manual/API orders).

source
string | null

Attribution for who initiated the order: manual (web UI), bot, copytrade, api (API-key auth), or fastlane (external-signing lane).

Example:

"api"

metadata
any | null

Exchange-specific metadata (arbitrary JSON). Present on GET /orders/{order_id}; stripped to null on GET /orders.