Skip to main content
POST /api/v1/builder/onboard Onboard an existing end-user to an exchange. Thin wrapper around the trader onboard endpoint with builder ownership verification. There are three credential strategies for your end-users:
StrategyWhen to useHow
ManagedUser doesn’t have a wallet — Parsec creates onemode: "managed"
SelfUser has exchange API keys — Parsec stores themmode: "self"
Per-requestUser manages their own keys — nothing storedSkip onboard, pass X-Exchange-Credentials per-request

Parameters

customer_id
string
required
The end-user’s Parsec customer UUID (must be owned by this builder).
exchange
string
required
polymarket or kalshi.
mode
string
required
managed or self.

Managed mode fields

Used when mode: "managed" — Parsec creates a wallet and derives exchange credentials on behalf of the user. Two mutually exclusive paths:
  • No external wallet: wallet_type: "eoa" (default) — Parsec creates an embedded EOA.
  • External wallet: wallet_type: "safe" + eoa_address — Parsec creates a Safe owned by the external address.
wallet_type
string
default:"eoa"
eoa (default) — creates an embedded EOA wallet. safe — creates a Safe wallet (requires eoa_address).
eoa_address
string
External wallet address (42-char hex, 0x-prefixed). Required when wallet_type: "safe". Must not be provided when wallet_type: "eoa".
chain_id
number
default:"137"
Chain ID for Safe wallet creation. Defaults to Polygon (137). Only used with wallet_type: "safe".

Self mode fields — Polymarket

Used when mode: "self" and exchange: "polymarket" — you provide the user’s existing CLOB credentials.
clob_api_key
string
required
CLOB API key.
clob_api_secret
string
required
CLOB API secret.
clob_api_passphrase
string
required
CLOB API passphrase.
private_key
string
Ethereum private key (0x-prefixed hex) for order signing. Optional — without it, only read operations (balance, positions) work.

Self mode fields — Kalshi

Used when mode: "self" and exchange: "kalshi" — you provide the user’s API key and RSA private key.
api_key_id
string
required
Kalshi API key ID.
private_key
string
required
RSA private key in PEM format.

Response

customer_id
string
Parsec customer UUID.
exchange
string
Exchange that was onboarded.
mode
string
managed or self.
status
string
"complete" on success.
eoa_address
string | null
EOA wallet address. For managed EOA mode, this is the Parsec-created embedded wallet. For managed Safe mode, this is the external wallet address that owns the Safe.
safe_address
string | null
Safe wallet address. Present only when wallet_type: "safe".
linked_exchanges
string[]
Exchanges the user is onboarded to after this call.
steps_completed
string[]
Steps completed during this call. Possible values:
  • wallet_eoa_created — Managed EOA: embedded wallet created
  • external_eoa_provided — Managed Safe: external wallet address accepted
  • wallet_safe_created — Managed Safe: Safe wallet created
  • exchange_linked — Managed: CLOB credentials derived + approvals set
  • credentials_validated — Self Kalshi: PEM key validated
  • credentials_stored — Self: credentials stored
wallet
object | null
Wallet info. Present if user has a wallet.
fee_escrow_enabled
boolean
Whether fee escrow is active.
fee_bps
number | null
Fee basis points (builder-level setting).
affiliate_address
string | null
Fee recipient address (builder-level setting).
curl -X POST "https://api.parsecapi.com/api/v1/builder/onboard" \
  -H "X-API-Key: pk_live_YOUR_BUILDER_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "exchange": "polymarket",
    "mode": "managed"
  }'
{
  "customer_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "exchange": "polymarket",
  "mode": "managed",
  "status": "complete",
  "eoa_address": "0x1234567890abcdef1234567890abcdef12345678",
  "safe_address": null,
  "linked_exchanges": ["polymarket"],
  "steps_completed": ["wallet_eoa_created", "exchange_linked"],
  "wallet": {
    "eoa_address": "0x1234567890abcdef1234567890abcdef12345678",
    "privy_wallet_id": "wallet_abc123",
    "wallet_type": "eoa",
    "chain_id": 137,
    "created_at": "2026-02-27T12:00:00Z"
  },
  "fee_escrow_enabled": false
}