Skip to main content
POST

Authorizations

X-Kairos-Partner-Id
string
header
required

Wallet API partner id, issued by Kairos together with the partner's base URL. Identifies the partner (tenant) on every /v3 call; sent instead of an API key. Letters, digits and ._:-, at most 64 characters, case-insensitive. A partner id issued for an individual account cannot be sent this way — that account sends its API key triple instead.

Headers

X-Kairos-Wallet-Api
enum<string>
required

Wallet API contract version. Send 2 — the multi-venue contract this reference documents. Without the header (or with any other value) /v3/actions and /v3/wallets/* serve the original Polymarket-only contract, which ignores venue prefixes, expiresAt and setup.venues, omits chainId, venue and fallbackRequests from steps, refuses orders on a wallet that is not set up (409), and returns snake_case order and position rows.

Available options:
2

Body

application/json

Body of POST /v3/actions. camelCase only — unknown fields, including snake_case spellings, are ignored without error.

wallet
string
required

EVM address, 0x + 40 hex.

Pattern: ^0x[0-9a-fA-F]{40}$
Example:

"0x8ba1f109551bd432803012645ac136ddd64dba72"

action
object
required

The action to run, tagged by type.

Response

The action's first step. Usually needs_signature; done when nothing needs signing (a wallet already set up, or a clientOrderId that already names this exact order).

The current step of an action. Every response from /v3/actions and /v3/actions/{id} is one of these.

id
string<uuid>
required

Action id. One id for the whole action, across venues.

type
enum<string>
required
Available options:
setup,
order,
cancel,
login
status
enum<string>
required

needs_signature — run request and answer; working — poll; done — read result; failed — read error and errorCode.

Available options:
needs_signature,
working,
done,
failed
request
object | null
required

What the wallet must run. Non-null only while needs_signature.

Example:
description
string | null
required

Text to show with the wallet prompt (e.g. Confirm this Hyperliquid order), or progress text while working.

chainId
string | null
required

EIP-155 chain id (hex) the wallet must be on to answer — 0x89 Polygon, 0x38 BNB Chain, 0xa4b1 Arbitrum One (0x66eee Arbitrum Sepolia on Hyperliquid testnet). null for personal_sign and when nothing is asked.

Example:

"0x38"

venue
enum<string> | null
required

Venue of the current prompt; null when finished and on cancels.

Available options:
polymarket,
predictfun,
hyperliquid
result
object
required

Outcome on done (and the provisional outcome of a held order). Shape depends on type.

Example:
error
string | null
required

Why the action failed; non-null on failed.

fallbackRequests
object[]

Present with wallet_sendCalls requests only — the same calls as individual eth_sendTransaction requests, for wallets without EIP-5792. Send them in order and answer with {"result": ["0xhash", …]}.

expiresAtMs
integer<int64>

Last accepted millisecond (Unix ms) for answering this prompt. Answers after it fail the action with SIGNATURE_EXPIRED.

Example:

1793130772999

holdUntilMs
integer<int64>

On a working order the venue is still matching — poll again after this time (Unix ms). result then holds a provisional outcome with final: false.

errorCode
enum<string>

Machine-readable reason on a failed step; the key is omitted when the failure has no code. Codes may be added; treat an unknown code as a failure whose order was not placed.

Available options:
NO_MATCH,
VENUE_REJECTED,
ORDER_OUTCOME_UNKNOWN,
CANCEL_OUTCOME_UNKNOWN,
SIGNATURE_EXPIRED,
CLIENT_ORDER_ID_CONFLICT,
HYPERLIQUID_AGENT_MISSING