---
title: "Set the on-chain approvals Predict.fun needs"
method: POST
path: "/exchanges/predictfun/enable-trading"
tags: ["Onboarding"]
---

# Set the on-chain approvals Predict.fun needs

`POST /exchanges/predictfun/enable-trading`

## Request

- Base URL: `https://execution.kairos.trade`
- URL: `https://execution.kairos.trade/exchanges/predictfun/enable-trading`
- Auth: API key in header `X-Client-Id` and API key in header `X-Api-Key` and API key in header `X-Api-Secret`

Predict.fun has no server-side credentials to provision — orders are signed at submission time. This endpoint does the one-time on-chain setup instead: it approves USDT and ConditionalTokens across all four `(yieldBearing × negRisk)` market variants, gas-sponsored on BSC. A wallet must run this once before its first Predict.fun order; the executor does not approve per trade.
**Idempotent.** Variants already approved are no-ops. A wallet that was only partially approved re-submits just the missing variants on the next call, so retrying is safe.
> **Error shape.** This endpoint returns the minimal `{"error": "...", "code": "..."}` body (`OrderSimpleErrorResponse`), NOT the structured `error_details` envelope used by the Polymarket and Opinion equivalents. Codes: `INSUFFICIENT_SCOPE`, `PLATFORM_API_ACCESS_DISABLED`, `RATE_LIMITED`, `INVALID_USER_ID`, `DATABASE_ERROR`.
**Rate limited** at 5 requests/minute per user (bucket `clob-provisioning`, shared with the other heavy-provisioning endpoints), fail-closed, and checked BEFORE the ownership query so a flood cannot load the database. Each allowed call can launch up to 12 sponsored BSC approvals.
**Auth & scope.** Requires `trade:execute` for `predictfun`, wallet ownership, and the mutation gate.

## Request body

- OrderPredictfunEnableTradingRequest
  - `wallet_address` string, required: BSC EOA to enable. Must be owned by the authenticated caller.

## Response `200`

Approvals set (or already present).

- OrderPredictfunEnableTradingResponse
  - `success` boolean, required
  - `message` string, required
  - `tx_hashes` object, required: Per-variant approval transaction hashes, keyed by variant label (e.g. `plain-binary`, `yield-negrisk`). A variant already approved is a no-op and contributes no entry.

## Other responses

- `400`: `INVALID_USER_ID`.
- `401`: No valid credential presented — missing/invalid API-key headers or an invalid/expired session token.
- `403`: `INSUFFICIENT_SCOPE` ("This API key lacks the trade:execute scope"), `PLATFORM_API_ACCESS_DISABLED`, or the wallet is not owned by the caller.
- `429`: `RATE_LIMITED` — "Too many enable-trading attempts — please wait a moment and try again". No `Retry-After` header.
- `500`: `DATABASE_ERROR`, or an approval transaction failed.
- `503`: API-key access to `predictfun` could not be checked (fails closed).

---

[API](https://skmtc.dev/kairos/apis/kairos-order-execution-api.md) - [All operations](https://skmtc.dev/kairos/apis/kairos-order-execution-api/llms.txt) - [OpenAPI document](https://skmtc.dev/kairos/apis/kairos-order-execution-api/revisions/9ba7d463d505?raw)
