---
title: "Deploy the caller's Polymarket deposit wallet and set its trading approvals"
method: POST
path: "/exchanges/polymarket/deposit-wallet/onboard"
tags: ["Deposit wallet"]
---

# Deploy the caller's Polymarket deposit wallet and set its trading approvals

`POST /exchanges/polymarket/deposit-wallet/onboard`

## Request

- Base URL: `https://execution.kairos.trade`
- URL: `https://execution.kairos.trade/exchanges/polymarket/deposit-wallet/onboard`
- Auth: API key in header `X-Client-Id` and API key in header `X-Api-Key` and API key in header `X-Api-Secret`

Creates the user's **deposit wallet** — a per-user ERC-1967 proxy on Polygon, deployed through Polymarket's relayer at a deterministic CREATE2 address derived from the owner EOA. A new setup can submit a deployment transaction, then a signed batch setting the CTF/collateral approvals the venue needs; retries can reuse completed state.
**Idempotent on the deployment leg.** Re-submitting for an already-deployed owner is treated as a no-op success and comes back with `deploy_tx_id: null`.
**It does not move user funds** — it deploys a contract and grants approvals. The approval batch is signed server-side under the user's delegated key; the batch deadline window is one hour, and each relayer transaction is waited on for up to 120 s.
A successful response means any approval batch submitted by this call has confirmed. `batch_tx_id` is its relayer transaction id, `already-complete` for a saved onboarding checkpoint, `reconciled` when a pending approval was found complete on-chain, or an empty string when this request submitted no batch. The special values are not relayer transaction ids.
**Auth & scope.** Requires `trade:execute` for `polymarket`, identity ownership, and the mutation gate.

## Request body

- OrderDepositWalletIdentityRequest: The common identity body shared by the deposit-wallet endpoints. All three fields are checked against the authenticated caller and can only ever CONFIRM authority, never grant it — omitting them is not an option here, but supplying someone else's is a `403`.
  - `user_id` string, uuid, required
  - `turnkey_org_id` string, required
  - `owner_address` string, required: The owner EOA. The deposit-wallet address itself is resolved server-side from `UserIdentity`, never taken from the body.

## Response `200`

Wallet deployed (or already present) and approvals submitted.

- OrderDepositWalletOnboardResponse: Response for `POST /exchanges/polymarket/deposit-wallet/onboard`.
  - `deposit_wallet_address` string, required: The deterministic (CREATE2) ERC-1967 proxy address for this owner.
  - `deploy_tx_id` string, nullable: Relayer transaction id for the proxy deployment. `null` when the wallet was already deployed — the relayer is idempotent and that case is treated as success.
  - `batch_tx_id` string, required: Relayer transaction id for a confirmed trading-approval batch. `already-complete` means a saved onboarding checkpoint was reused; `reconciled` means a pending approval was found complete on-chain. An empty string means this request submitted no batch (approvals already present or optional approvals skipped). The markers and empty string are not relayer transaction ids.
  - `success` boolean, required

## Other responses

- `400`: `ValidationInvalidOrder` — `user_id` is not a valid UUID.
- `401`: No valid credential presented — missing/invalid API-key headers or an invalid/expired session token.
- `403`: `AuthInsufficientScope` — "This API key lacks the trade:execute scope"; or `AuthIdentityMismatch` — a `user_id` / `turnkey_org_id` in the body that is not the authenticated account (omit them to avoid this). Note that the provider-access check on this endpoint returns a GENERIC body (see the description of `OrderErrorResponse`).
- `500`: `DatabaseError` — ownership could not be verified; or `InternalError` — the relayer client is unavailable or the onboarding itself failed. The underlying relayer reason is logged server-side and NOT returned.
- `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)
