Skip to main content
GET
/
v1
/
account
/
portfolio
Get Portfolio
curl --request GET \
  --url https://api.polysimulator.com/v1/account/portfolio \
  --header 'X-API-Key: <api-key>'
{
  "balance": {
    "balance": "<string>",
    "currency": "<string>",
    "unrealized_pnl": "<string>",
    "total_value": "<string>",
    "starting_balance": "<string>"
  },
  "positions": [
    {
      "id": 123,
      "market_id": "<string>",
      "outcome": "<string>",
      "quantity": "<string>",
      "avg_entry_price": "<string>",
      "status": "<string>",
      "current_price": "<string>",
      "unrealized_pnl": "<string>",
      "market_value": "<string>",
      "market_question": "<string>"
    }
  ],
  "total_trades": 123,
  "win_rate": "<string>"
}

Authorizations

X-API-Key
string
header
required

Issue from /v1/keys (or admin-issued for enterprise tier).

Headers

X-API-Key
string | null

Your PolySimulator API key

POLY_API_KEY
string | null

Polymarket-CLOB-compat alias for X-API-Key (underscore form). SDK clients ported from Polymarket can authenticate without changing header names. X-API-Key takes precedence when both are provided.

Poly-API-Key
string | null

PM-CLOB-compat dashed-form alias for X-API-Key. Same value semantics as POLY_API_KEY but with HTTP-conventional dash separators. Audit P1 (staging audit 2026-05-16 0817 PR #1296): the per-tier middleware accepts both spellings but the auth dependency originally only matched the underscore form — now both work end-to-end.

authorization
string | null

PM-CLOB-compat: Authorization: Bearer ps_live_... (or ps_test_...) is accepted as an alias for X-API-Key so py-clob-client and other ported SDKs authenticate without header name changes. Bearer JWTs are NOT accepted here — use the dashboard-auth endpoints for those.

Query Parameters

wallet_id
string | null

Wallet scope: an integer wallet id you own (404 WALLET_NOT_FOUND otherwise; MAIN/API wallet ids fold in legacy rows recorded before per-wallet attribution, matching /portfolio), 'all' (every wallet you own, including UI MAIN/SANDBOX wallets), or 'api' (your API wallet — includes legacy pre-attribution rows). Keywords are case-insensitive; any other value returns 422 VALIDATION_FAILED. Default (omitted) = 'api' since 2026-06-10, matching /balance, /portfolio and /equity; before 2026-06-10 the default was all-wallets — pass wallet_id=all to keep the old behaviour.

Response

Successful Response

balance
BalanceResponse · object
required
positions
PositionResponse · object[]
required
total_trades
integer
required
win_rate
string | null