---
title: "Provision CLOB credentials for an imported Polymarket wallet"
method: POST
path: "/exchanges/polymarket/enable-imported-trading"
tags: ["Onboarding"]
---

# Provision CLOB credentials for an imported Polymarket wallet

`POST /exchanges/polymarket/enable-imported-trading`

## Request

- Base URL: `https://execution.kairos.trade`
- URL: `https://execution.kairos.trade/exchanges/polymarket/enable-imported-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 equivalent of `POST /exchanges/polymarket/enable-trading` for a wallet imported from polymarket.com. Derives and stores CLOB credentials against the imported EOA. No approval legs run — an imported wallet already carries its on-chain approvals from its prior polymarket.com activity.
Neither `wallet_address` nor `turnkey_org_id` is trusted input: both are checked against the authenticated caller before anything is minted, so a stolen session cannot provision credentials against a wallet or sub-org it has no relationship to.
**Rate limited** at 5 requests/minute per user (`CLOB_PROVISIONING_RATE_LIMIT_PER_MIN`, bucket `clob-provisioning`), fail-closed — each allowed call makes a real CLOB round-trip and writes a credential row. The `429` carries `error_details.code = VALIDATION_INVALID_ORDER` with the message `Too many import attempts — please wait a moment and try again`.
**Auth & scope.** Requires `trade:execute` for `polymarket` and the mutation gate.

## Request body

- OrderPolymarketEnableImportedTradingRequest: Body for `POST /exchanges/polymarket/enable-imported-trading`. Neither field is trusted — both are checked against the authenticated caller before any credential is minted.
  - `wallet_address` string, required: The imported Polymarket EOA. Must already live in the caller's Turnkey sub-org.
  - `turnkey_org_id` string, required: Sub-org id holding the imported key. Must equal the caller's own org.

## Response `200`

Imported-wallet credentials provisioned.

- OrderPolymarketEnableImportedTradingResponse
  - `success` boolean, required
  - `wallet_address` string, required

## Other responses

- `400`: Malformed wallet address or user id.
- `401`: No valid credential presented — missing/invalid API-key headers or an invalid/expired session token.
- `403`: Missing `trade:execute` scope, API-key access to `polymarket` disabled, the supplied `turnkey_org_id` is not the caller's org, or the wallet is not the caller's.
- `429`: CLOB-provisioning rate limit exceeded (or its Redis was unreachable — fails closed). No `Retry-After` header.
- `500`: Credential derivation or persistence 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)
