---
title: "Provision Polymarket CLOB credentials and set on-chain approvals"
method: POST
path: "/exchanges/polymarket/enable-trading"
tags: ["Onboarding"]
---

# Provision Polymarket CLOB credentials and set on-chain approvals

`POST /exchanges/polymarket/enable-trading`

## Request

- Base URL: `https://execution.kairos.trade`
- URL: `https://execution.kairos.trade/exchanges/polymarket/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`

The one-time onboarding step for Polymarket. In a single call the server derives CLOB API credentials for your wallet (signing the ClobAuth EIP-712 message with your delegated key), encrypts and stores them, and sets the token approvals the venue needs. Until this succeeds, `POST /orders` on `polymarket` will fail.
**Credentials are never returned.** The derived API key/secret/passphrase are stored server-side only — deliberately kept out of HTTP responses so they cannot leak through logs, proxies or browser devtools.
Legacy-EOA users get gas sponsorship plus approvals here. Deposit-wallet users had their approvals set by the onboarding batch (`POST /exchanges/polymarket/deposit-wallet/onboard`), so the approval legs are skipped and the `*_tx_hash` fields are omitted.
**Auth & scope.** Requires `trade:execute` for `polymarket`, wallet ownership, and the mutation gate — this provisions signing credentials and is in the same risk class as order submission.

## Request body

- OrderPolymarketEnableTradingRequest
  - `wallet_address` string, required: The wallet to enable. Must be a wallet owned by the authenticated caller.

## Response `200`

Credentials provisioned and approvals set.

- OrderPolymarketEnableTradingResponse
  - `success` boolean, required
  - `message` string, required
  - `usdc_tx_hash` string: OMITTED entirely (not null) when no USDC approval was needed.
  - `ctf_tx_hash` string: OMITTED entirely (not null) when no CTF approval was needed.

## Other responses

- `400`: `ValidationInvalidOrder` — `wallet_address` is not a valid address, or the authenticated user id is not a UUID.
- `401`: No valid credential presented — missing/invalid API-key headers or an invalid/expired session token.
- `403`: `AuthCredentialsInvalid` — "This API key lacks the trade:execute scope"; `AuthInsufficientScope` / API-key access to `polymarket` disabled; or `AuthTurnkeyWalletNotFound` — "Wallet not found or does not belong to you".
- `500`: Database read failed, credential derivation against Polymarket failed, or the approval transactions failed.
- `503`: API-key access to `polymarket` 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)
