Fees (preview)

Open a settlement for a wallet's unpaid fees on one venue

Preview: available on staging (https://staging-execution.kairos.trade); not yet released in production, where trade plans — the only source of this fee debt — return 503.

Freezes the wallet's whole current debt on venue into one settlement and returns the wallet request that pays it. If a settlement is already open for the wallet and asset, that settlement is returned instead (exactly one is ever open).

Paying.

  • Polymarket: walletRequest.kind is signature — an eth_signTypedData_v4 for a deposit-wallet batch holding one pUSD transfer to treasury. The wallet pays no gas. Sign within 30 minutes (expiresAt) and post the signature to /answer.
  • Predict.fun: walletRequest.kind is transaction — an eth_sendTransaction on BNB Chain (0x38) transferring exactly amountRaw USDT to treasury. The wallet pays the BNB gas. Send it unchanged and on its own (a different amount, or any other USDT outflow in the same transaction, fails the settlement without credit), then post the hash to /answer. No deadline.

Then poll GET /v3/fees/settlements/{id} until confirmed. Fees booked after the settlement opened stay owed; check GET /v3/fees again after it confirms.

post/v3/fees/settlements

Request

  • Base URL
    https://execution.kairos.trade
  • Auth
    • API key in header X-Kairos-Partner-Id and API key in header Authorization
    • or API key in header X-Client-Id and API key in header X-Api-Key and API key in header X-Api-Secret and API key in header Authorization
    • or API key in header X-Client-Id and API key in header X-Api-Key and API key in header X-Api-Secret
    • or API key in header X-Kairos-Partner-Id and API key in header X-Client-Id and API key in header X-Api-Key and API key in header X-Api-Secret
    • or API key in header X-Kairos-Partner-Id and HTTP bearer

Request body

walletstring required

EVM address, 0x + 40 hex.

venue'polymarket' | 'predictfun' required

Example request

{
  "wallet": "0x8ba1f109551bd432803012645ac136ddd64dba72"
}

Response

The open settlement, with walletRequest while it awaits the wallet.

idstring uuid required
venue'polymarket' | 'predictfun' required
status'awaiting_signature' | 'submitted' | 'confirmed' | 'failed' | 'expired' required

awaiting_signature → submitted → confirmed. Terminal: confirmed and failed. expired is final unless it is a Predict.fun settlement whose reported transaction lands within 7 days of expiring: GET /v3/fees or POST /v3/fees/settlements then credits it and it becomes confirmed (GET /v3/fees/settlements/{id} does not re-check an expired settlement).

holdingWalletstring required

Address the fee is paid from — Polymarket's trading wallet, or the wallet itself on Predict.fun.

assetKeystring required
chainIdstring required

Chain id as a decimal string (walletRequest.chainId is hex).

tokenstring required

Fee token (pUSD on Polygon, USDT on BNB Chain).

treasurystring required

The payee address.

decimalsinteger required

Token decimals (6 for pUSD, 18 for BNB Chain USDT).

amountRawstring required

Amount to pay, integer string in token base units.

transactionHashstring nullable required

The payment transaction, once known.

expiresAtstring date-time nullable required

Polymarket — sign before this (30 minutes after opening). null on Predict.fun.

failurestring nullable required

Why the settlement failed or expired. Kept when a late Predict.fun payment later confirms an expired settlement.

Example response

{
  "id": "4e1d2c3b-5a6f-4b7c-8d9e-0f1a2b3c4d5e",
  "venue": "polymarket",
  "status": "awaiting_signature",
  "holdingWallet": "0x2f9c4b8e1d7a6c5b4a3f2e1d0c9b8a7f6e5d4c3b",
  "assetKey": "evm:137:0xc011a7e12a19f7b1f670d46f03b03f3342e82dfb",
  "chainId": "137",
  "token": "0xc011a7e12a19f7b1f670d46f03b03f3342e82dfb",
  "treasury": "0x3333333333333333333333333333333333333333",
  "decimals": 6,
  "amountRaw": "12500000",
  "transactionHash": null,
  "expiresAt": "2026-10-28T12:30:00Z",
  "failure": null,
  "walletRequest": {
    "kind": "signature",
    "chainId": "0x89",
    "request": {
      "method": "eth_signTypedData_v4",
      "params": [
        "0x8ba1f109551bd432803012645ac136ddd64dba72",
        "{\"types\":{\"EIP712Domain\":[…],\"Batch\":[{\"name\":\"wallet\",\"type\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"deadline\",\"type\":\"uint256\"},{\"name\":\"calls\",\"type\":\"Call[]\"}],\"Call\":[…]},\"domain\":{\"name\":\"DepositWallet\",\"version\":\"1\",\"chainId\":\"137\",\"verifyingContract\":\"0x2f9c…4c3b\"},\"primaryType\":\"Batch\",\"message\":{…}}"
      ]
    }
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.