Skip to main content
GET
/
v1
/
account
/
profile-analysis
Full profile analysis for LLM/MCP consumption
curl --request GET \
  --url https://api.polysimulator.com/v1/account/profile-analysis \
  --header 'X-API-Key: <api-key>'
{
  "analysis_generated_at": "<string>",
  "profile": {
    "user_id": 123,
    "username": "<string>",
    "display_name": "<string>",
    "bio": "<string>",
    "avatar_url": "<string>",
    "auth_provider": "<string>",
    "account_created_at": "<string>",
    "account_age_days": 123,
    "api_key_tier": "free",
    "profile_visibility": "public"
  },
  "balance": {
    "ui_balance": "<string>",
    "api_balance": "<string>",
    "starting_ui_balance": "<string>",
    "starting_api_balance": "<string>",
    "ui_pnl": "<string>",
    "api_pnl": "<string>",
    "ui_pnl_percentage": "<string>",
    "api_pnl_percentage": "<string>",
    "total_portfolio_value": "<string>",
    "unrealized_pnl": "<string>",
    "realized_pnl": "<string>",
    "currency": "USD"
  },
  "open_positions": [
    {
      "position_id": 123,
      "market_id": "<string>",
      "outcome": "<string>",
      "quantity": "<string>",
      "avg_entry_price": "<string>",
      "cost_basis": "<string>",
      "status": "<string>",
      "market_question": "<string>",
      "market_category": "<string>",
      "current_price": "<string>",
      "market_value": "<string>",
      "unrealized_pnl": "<string>",
      "unrealized_pnl_percentage": "<string>",
      "weight_percentage": "<string>"
    }
  ],
  "trading_stats": {
    "total_trades": 0,
    "total_buys": 0,
    "total_sells": 0,
    "buy_sell_ratio": "<string>",
    "total_volume": "0.00",
    "avg_trade_size": "0.00",
    "median_trade_size": "<string>",
    "largest_trade": "<string>",
    "smallest_trade": "<string>",
    "total_fees_paid": "0.00",
    "win_rate": "<string>",
    "total_wins": 0,
    "total_losses": 0,
    "best_trade_pnl": "<string>",
    "worst_trade_pnl": "<string>",
    "avg_win_pnl": "<string>",
    "avg_loss_pnl": "<string>",
    "profit_factor": "<string>",
    "first_trade_at": "<string>",
    "last_trade_at": "<string>",
    "active_trading_days": 0,
    "avg_trades_per_day": "<string>",
    "unique_markets_traded": 0
  },
  "risk_metrics": {
    "open_position_count": 0,
    "largest_position_weight": "<string>",
    "largest_position_market": "<string>",
    "top_3_concentration": "<string>",
    "portfolio_diversity_score": "<string>",
    "avg_position_size": "<string>",
    "cash_percentage": "<string>",
    "invested_percentage": "<string>",
    "max_drawdown_7d": "<string>",
    "max_drawdown_30d": "<string>"
  },
  "equity_timeline": {
    "return_7d": "<string>",
    "return_30d": "<string>",
    "return_all_time": "<string>",
    "peak_value": "<string>",
    "peak_date": "<string>",
    "trough_value": "<string>",
    "trough_date": "<string>",
    "current_value": "<string>",
    "snapshots_available": 0,
    "latest_snapshot_at": "<string>"
  },
  "category_exposure": [
    {
      "category": "<string>",
      "position_count": 123,
      "total_value": "<string>",
      "weight_percentage": "<string>"
    }
  ],
  "recent_trades": [
    {
      "order_id": 123,
      "market_id": "<string>",
      "side": "<string>",
      "outcome": "<string>",
      "price": "<string>",
      "quantity": "<string>",
      "notional": "<string>",
      "market_question": "<string>",
      "filled_at": "<string>"
    }
  ],
  "natural_language_summary": "<string>",
  "analysis_version": "1.0.0"
}

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

recent_trades
integer
default:20

Number of recent trades to include

Required range: 1 <= x <= 100
equity_days
integer
default:90

Days of equity history to analyze

Required range: 1 <= x <= 365
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

Comprehensive profile analysis payload for LLM consumption.

analysis_generated_at
string
required
profile
ProfileMetadata · object
required
balance
BalanceSummary · object
required
open_positions
PositionDetail · object[]
required
trading_stats
TradingStatistics · object
required
risk_metrics
RiskMetrics · object
required
equity_timeline
EquityTimelineSummary · object
required
category_exposure
CategoryExposure · object[]
required
recent_trades
RecentTrade · object[]
required
natural_language_summary
string
required

Pre-computed human-readable summary of the profile for LLM context

analysis_version
string
default:1.0.0