{"openapi":"3.1.0","info":{"title":"Polyman Agent API","version":"1.0.0","description":"Agent trading infrastructure for Polymarket prediction markets: markets, whale signals, trader intelligence and live prices. Authenticate with 'Authorization: Bearer pm_...' — create keys at https://www.polyman.fun (Portfolio → Developer). Prices are 0-1 probability scale. Errors are machine-readable: {\"error\": {\"code\", \"message\", \"retryable\"}}."},"servers":[{"url":"https://api.polyman.fun"}],"paths":{"/v1/markets":{"get":{"tags":["Polyman Agent API"],"summary":"List active prediction markets","description":"Active Polymarket markets with parsed outcomes, prices (0-1 scale), volume, liquidity and end dates. Filter with `category` (politics|sports|crypto|finance|culture|weather), sort with `sort=volume|ending_soon`. Data is cached ~60s server-side.","operationId":"v1_list_markets_v1_markets_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Category slug: politics, sports, crypto, finance, culture, weather","title":"Category"},"description":"Category slug: politics, sports, crypto, finance, culture, weather"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"volume | ending_soon","default":"volume","title":"Sort"},"description":"volume | ending_soon"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/markets/{slug}":{"get":{"tags":["Polyman Agent API"],"summary":"Get one market by slug","description":"Full market detail by Polymarket slug: question, conditionId, parsed outcomes with clobTokenIds and prices (0-1 scale), volume, liquidity, end date. Slug is the canonical lookup key (conditionId lookups are unreliable on Gamma).","operationId":"v1_get_market_v1_markets__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/signals":{"get":{"tags":["Polyman Agent API"],"summary":"List whale signals (the trending feed)","description":"Pre-built whale/trending signals from top Polymarket traders, rebuilt every 60s from realtime fill data. Each signal: trader_address, trader_name, ai_score, market_question, market_id (the conditionId — pass it as condition_id when placing orders), token_id, outcome, entry_value and position_value in USD, entry/current prices (0-1 scale), trending_score 0-100, and category. Only profitable positions >= $500 appear.","operationId":"v1_list_signals_v1_signals_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"politics | sports | crypto | finance | culture","title":"Category"},"description":"politics | sports | crypto | finance | culture"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/traders":{"get":{"tags":["Polyman Agent API"],"summary":"List top traders with AI scores and category grades","description":"Pre-built trader leaderboard (rebuilt every 2h). Each trader: address, name, avatar, rank, pnl (USD), volume, win_rate, ai_score (0-100), ai_decision (TRADE|CAUTION|AVOID), category_scores/best_category grades. `period` = DAY|WEEK|MONTH|ALL (also accepts 1D|1W|1M).","operationId":"v1_list_traders_v1_traders_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"DAY | WEEK | MONTH | ALL","default":"MONTH","title":"Period"},"description":"DAY | WEEK | MONTH | ALL"},{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"overall | politics | sports | crypto | finance | culture","default":"overall","title":"Category"},"description":"overall | politics | sports | crypto | finance | culture"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/traders/{address}":{"get":{"tags":["Polyman Agent API"],"summary":"Get one trader profile","description":"Full trader profile by proxy-wallet address (0x...): period PnL (scraped from Polymarket, matches their profile display), win rate, AI score breakdown, category grades, open + closed positions. `period` = DAY|WEEK|MONTH|ALL. Cached ~5min server-side.","operationId":"v1_get_trader_v1_traders__address__get","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string","title":"Address"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"DAY | WEEK | MONTH | ALL","default":"MONTH","title":"Period"},"description":"DAY | WEEK | MONTH | ALL"},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/prices":{"get":{"tags":["Polyman Agent API"],"summary":"Batch live midpoint prices","description":"CLOB midpoint prices for up to 100 outcome token IDs (comma-separated `token_ids`). Returns {prices: {token_id: price}} with prices on the 0-1 probability scale (multiply by 100 for cents). ~1s server cache.","operationId":"v1_get_prices_v1_prices_get","parameters":[{"name":"token_ids","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated CLOB token IDs (max 100)","title":"Token Ids"},"description":"Comma-separated CLOB token IDs (max 100)"},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/me":{"get":{"tags":["Polyman Agent API"],"summary":"Key metadata, scopes, caps and remaining budget","description":"Introspection for the calling API key: scopes, per-order and daily caps, today's spend and remaining budget (USD), and rate limits. Agents should call this once at startup to self-configure.","operationId":"v1_me_v1_me_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/orders/preview":{"post":{"tags":["Polyman Agent API"],"summary":"Preview an order (no execution)","description":"3-layer price estimate for a BUY: best-ask for orders <= $25, full orderbook walk above, midpoint fallback. Returns estimated shares, avg fill price (0-1), slippage % and unfilled amount. Requires only the read scope.","operationId":"v1_preview_order_v1_orders_preview_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/orders":{"post":{"tags":["Polyman Agent API"],"summary":"Place a BUY order (simulate-by-default)","description":"Places a builder-attributed market BUY on Polymarket. SIMULATES by default — returns an order-shaped receipt with simulated=true; pass simulate=false to execute live (requires the trade scope, enforces this key's per-order and daily caps server-side first). idempotency_key is required: replaying the same key returns the stored response and never double-executes. SELL orders use /v1/orders/sell. Rate limit: 20/min/key.","operationId":"v1_place_order_v1_orders_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentOrderRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/orders/sell":{"post":{"tags":["Polyman Agent API"],"summary":"Sell a position (simulate-by-default)","description":"Sells shares of an open position. SIMULATES by default (estimated proceeds at the current best bid); pass simulate=false to execute live (trade scope). Provide shares, or sell_all=true to close the whole position (share count is read from the Polymarket Data API). Sells reduce exposure so they don't consume the daily spend cap, but they are idempotent and rate-limited (20/min/key) like buys.","operationId":"v1_sell_order_v1_orders_sell_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSellRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/portfolio":{"get":{"tags":["Polyman Agent API"],"summary":"The key owner's portfolio","description":"Cash balance, total position value and open positions for the account that owns this key — sourced from the Polymarket Data API and on-chain reads (never local bookkeeping).","operationId":"v1_portfolio_v1_portfolio_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/positions":{"get":{"tags":["Polyman Agent API"],"summary":"The key owner's open positions","description":"Open positions for the account that owns this key, from the Polymarket Data API: token_id, outcome, shares, avg entry price, current price (0-1), current value and PnL in USD.","operationId":"v1_positions_v1_positions_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AffiliateCreate":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"our_fee_rate":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Our Fee Rate","default":0.01},"commission_rate":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Commission Rate","default":0.4},"payout_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payout Address"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Id"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"status":{"type":"string","title":"Status","default":"active"}},"type":"object","required":["name"],"title":"AffiliateCreate"},"AffiliateUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"our_fee_rate":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Our Fee Rate"},"commission_rate":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Commission Rate"},"payout_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payout Address"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Id"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"AffiliateUpdate"},"AgentOrderRequest":{"properties":{"token_id":{"type":"string","title":"Token Id"},"condition_id":{"type":"string","title":"Condition Id"},"side":{"type":"string","title":"Side","default":"BUY"},"amount_usd":{"type":"number","title":"Amount Usd"},"outcome_index":{"type":"integer","title":"Outcome Index","default":0},"outcome":{"type":"string","title":"Outcome","default":""},"market_question":{"type":"string","title":"Market Question","default":""},"simulate":{"type":"boolean","title":"Simulate","default":true},"idempotency_key":{"type":"string","title":"Idempotency Key"}},"type":"object","required":["token_id","condition_id","amount_usd","idempotency_key"],"title":"AgentOrderRequest"},"AgentSellRequest":{"properties":{"token_id":{"type":"string","title":"Token Id"},"condition_id":{"type":"string","title":"Condition Id"},"shares":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Shares"},"sell_all":{"type":"boolean","title":"Sell All","default":false},"simulate":{"type":"boolean","title":"Simulate","default":true},"idempotency_key":{"type":"string","title":"Idempotency Key"}},"type":"object","required":["token_id","condition_id","idempotency_key"],"title":"AgentSellRequest"},"AttributeUsers":{"properties":{"user_ids":{"items":{"type":"integer"},"type":"array","minItems":1,"title":"User Ids"}},"type":"object","required":["user_ids"],"title":"AttributeUsers"},"AutoSellRequest":{"properties":{"token_id":{"type":"string","title":"Token Id"},"leader_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Leader Address"},"condition_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Condition Id"},"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["token_id","enabled"],"title":"AutoSellRequest"},"AvatarUpdate":{"properties":{"avatar_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Id"},"avatar_bg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Bg"}},"type":"object","title":"AvatarUpdate"},"BulkMigrateRequest":{"properties":{"user_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"User Ids","description":"If omitted, migrates all eligible users"},"dry_run":{"type":"boolean","title":"Dry Run","default":false},"max_concurrent":{"type":"integer","title":"Max Concurrent","description":"Cap parallel migrations (relayer rate limits)","default":3}},"type":"object","title":"BulkMigrateRequest"},"CancelLimitRequest":{"properties":{"clob_order_id":{"type":"string","title":"Clob Order Id"}},"type":"object","required":["clob_order_id"],"title":"CancelLimitRequest"},"ClaimFailedRequest":{"properties":{"order_id_db":{"type":"integer","title":"Order Id Db"},"error":{"type":"string","title":"Error"},"tx_hash":{"type":"string","title":"Tx Hash","default":""}},"type":"object","required":["order_id_db","error"],"title":"ClaimFailedRequest"},"ClaimRequest":{"properties":{"condition_id":{"type":"string","title":"Condition Id"},"token_id":{"type":"string","title":"Token Id","default":""},"proceeds":{"type":"number","title":"Proceeds","default":0.0},"tx_hash":{"type":"string","title":"Tx Hash","default":""},"market_title":{"type":"string","title":"Market Title","default":""},"outcome":{"type":"string","title":"Outcome","default":""},"order_id_db":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order Id Db"}},"type":"object","required":["condition_id"],"title":"ClaimRequest"},"CreateKeyRequest":{"properties":{"name":{"type":"string","title":"Name"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes","default":["read"]},"max_order_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Order Usd"},"daily_cap_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Daily Cap Usd"},"market_allow":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Market Allow"},"totp_code":{"type":"string","title":"Totp Code","default":""}},"type":"object","required":["name"],"title":"CreateKeyRequest"},"CreateSessionRequest":{"properties":{"amount_usd":{"type":"number","title":"Amount Usd"},"source_chain":{"type":"string","title":"Source Chain","default":"polygon"},"asset":{"type":"string","title":"Asset","default":"USDC"}},"type":"object","required":["amount_usd"],"title":"CreateSessionRequest"},"CreateSessionResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"destination_address":{"type":"string","title":"Destination Address"},"amount_usd":{"type":"number","title":"Amount Usd"},"source_chain":{"type":"string","title":"Source Chain"},"asset":{"type":"string","title":"Asset"},"status":{"type":"string","title":"Status"}},"type":"object","required":["session_id","destination_address","amount_usd","source_chain","asset","status"],"title":"CreateSessionResponse"},"CreditRequest":{"properties":{"amount":{"type":"number","title":"Amount","default":1000.0}},"type":"object","title":"CreditRequest"},"DeriveClobCredsRequest":{"properties":{"privy_token":{"type":"string","title":"Privy Token","default":""}},"type":"object","title":"DeriveClobCredsRequest"},"DevLoginRequest":{"properties":{"user_id":{"type":"integer","title":"User Id","default":999999999},"first_name":{"type":"string","title":"First Name","default":"Dev"}},"type":"object","title":"DevLoginRequest"},"ExecuteRequest":{"properties":{"market_id":{"type":"string","title":"Market Id"},"market_question":{"type":"string","title":"Market Question","default":""},"market_category":{"type":"string","title":"Market Category","default":"general"},"outcome":{"type":"string","title":"Outcome"},"amount":{"type":"number","title":"Amount"},"order_type":{"type":"string","title":"Order Type","default":"market"},"limit_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Limit Price"},"token_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Id"},"condition_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Condition Id"},"neg_risk":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Neg Risk"},"tick_size":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tick Size"},"entry_point":{"type":"string","title":"Entry Point","default":"unknown"},"is_copy_trade":{"type":"boolean","title":"Is Copy Trade","default":false},"copied_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Copied From"},"privy_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privy Token"},"client_signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Signature"},"order_salt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Salt"},"signed_maker_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Maker Amount"},"signed_taker_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Taker Amount"},"signed_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Signed Price"}},"type":"object","required":["market_id","outcome","amount"],"title":"ExecuteRequest"},"ExportKeyRequest":{"properties":{"confirmation":{"type":"string","title":"Confirmation"},"totp_code":{"type":"string","title":"Totp Code","default":""},"privy_token":{"type":"string","title":"Privy Token","default":""}},"type":"object","required":["confirmation"],"title":"ExportKeyRequest"},"FeeCollectedRequest":{"properties":{"order_id":{"type":"integer","title":"Order Id"},"tx_hash":{"type":"string","title":"Tx Hash"}},"type":"object","required":["order_id","tx_hash"],"title":"FeeCollectedRequest"},"FollowRequest":{"properties":{"trader_address":{"type":"string","title":"Trader Address"},"allocation_pct":{"type":"number","title":"Allocation Pct","default":25.0},"execution_mode":{"type":"string","title":"Execution Mode","default":"proportional"},"fixed_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fixed Amount"},"slippage_guard":{"type":"boolean","title":"Slippage Guard","default":false},"slippage_threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Slippage Threshold"},"leader_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Leader Name"},"take_profit_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Take Profit Pct"},"stop_loss_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Stop Loss Pct"},"auto_pause_profit_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Auto Pause Profit Usd"},"auto_pause_loss_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Auto Pause Loss Usd"},"is_paper":{"type":"boolean","title":"Is Paper","default":false}},"type":"object","required":["trader_address"],"title":"FollowRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InitRequest":{"properties":{"initData":{"type":"string","title":"Initdata","default":""},"utm_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Source"},"utm_medium":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Medium"},"utm_campaign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Campaign"},"utm_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Content"}},"type":"object","title":"InitRequest"},"OneSignalSubRequest":{"properties":{"subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Id"}},"type":"object","title":"OneSignalSubRequest"},"PrefUpdate":{"properties":{"group_key":{"type":"string","title":"Group Key"},"channel":{"type":"string","title":"Channel"},"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["group_key","channel","enabled"],"title":"PrefUpdate"},"PreviewRequest":{"properties":{"market_id":{"type":"string","title":"Market Id"},"outcome":{"type":"string","title":"Outcome"},"amount":{"type":"number","title":"Amount"},"token_id":{"type":"string","title":"Token Id","default":""},"order_type":{"type":"string","title":"Order Type","default":"market"},"limit_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Limit Price"}},"type":"object","required":["market_id","outcome","amount"],"title":"PreviewRequest"},"PricesRequest":{"properties":{"token_ids":{"items":{"type":"string"},"type":"array","title":"Token Ids"}},"type":"object","required":["token_ids"],"title":"PricesRequest"},"PrivyAuthRequest":{"properties":{"privy_token":{"type":"string","title":"Privy Token"},"eoa_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eoa Address"},"safe_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Safe Address"},"safe_deployed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Safe Deployed"},"privy_wallet_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privy Wallet Id"},"referral_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referral Code"},"affiliate_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Affiliate Code"},"utm_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Source"},"utm_medium":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Medium"},"utm_campaign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Campaign"},"utm_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Content"},"app_surface":{"anyOf":[{"type":"string","enum":["telegram_mini_app","browser"]},{"type":"null"}],"title":"App Surface"}},"type":"object","required":["privy_token"],"title":"PrivyAuthRequest"},"ProviderQuote":{"properties":{"provider":{"type":"string","title":"Provider"},"label":{"type":"string","title":"Label"},"crypto_amount":{"type":"number","title":"Crypto Amount"},"crypto_currency":{"type":"string","title":"Crypto Currency"},"fee_usd":{"type":"number","title":"Fee Usd"},"fee_pct":{"type":"number","title":"Fee Pct"},"source":{"type":"string","title":"Source"}},"type":"object","required":["provider","label","crypto_amount","crypto_currency","fee_usd","fee_pct","source"],"title":"ProviderQuote"},"QuoteResponse":{"properties":{"amount_usd":{"type":"number","title":"Amount Usd"},"currency":{"type":"string","title":"Currency"},"providers":{"items":{"$ref":"#/components/schemas/ProviderQuote"},"type":"array","title":"Providers"},"best_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Best Provider"},"swapped_enabled":{"type":"boolean","title":"Swapped Enabled"}},"type":"object","required":["amount_usd","currency","providers","swapped_enabled"],"title":"QuoteResponse"},"RecordFailedTradeRequest":{"properties":{"market_id":{"type":"string","title":"Market Id"},"market_question":{"type":"string","title":"Market Question","default":""},"market_slug":{"type":"string","title":"Market Slug","default":""},"market_category":{"type":"string","title":"Market Category","default":"general"},"outcome":{"type":"string","title":"Outcome","default":"YES"},"amount":{"type":"number","title":"Amount"},"token_id":{"type":"string","title":"Token Id","default":""},"side":{"type":"string","title":"Side","default":"BUY"},"order_type":{"type":"string","title":"Order Type","default":"market"},"entry_point":{"type":"string","title":"Entry Point","default":"quick_buy"},"failure_reason":{"type":"string","title":"Failure Reason","default":""},"clob_status":{"type":"string","title":"Clob Status","default":""},"clob_response_raw":{"type":"string","title":"Clob Response Raw","default":""}},"type":"object","required":["market_id","amount"],"title":"RecordFailedTradeRequest","description":"Record a trade ATTEMPT that failed on the client before reaching the\nmatcher (CLOB returned unmatched, network blip, signer error, etc).\nWithout this we have zero observability into frontend trade failures —\nthe user sees \"Trade Failed\" but nothing lands in the backoffice."},"RecordLimitRequest":{"properties":{"market_id":{"type":"string","title":"Market Id","default":""},"market_question":{"type":"string","title":"Market Question","default":""},"market_slug":{"type":"string","title":"Market Slug","default":""},"market_category":{"type":"string","title":"Market Category","default":"general"},"outcome":{"type":"string","title":"Outcome","default":""},"token_id":{"type":"string","title":"Token Id"},"price":{"type":"number","title":"Price"},"size":{"type":"number","title":"Size"},"side":{"type":"string","title":"Side","default":"BUY"},"order_type":{"type":"string","title":"Order Type","default":"GTC"},"expiration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expiration"},"clob_order_id":{"type":"string","title":"Clob Order Id"},"status":{"type":"string","title":"Status","default":"live"},"neg_risk":{"type":"boolean","title":"Neg Risk","default":true}},"type":"object","required":["token_id","price","size","clob_order_id"],"title":"RecordLimitRequest"},"RecordSellRequest":{"properties":{"token_id":{"type":"string","title":"Token Id"},"condition_id":{"type":"string","title":"Condition Id"},"market_question":{"type":"string","title":"Market Question","default":""},"market_slug":{"type":"string","title":"Market Slug","default":""},"market_category":{"type":"string","title":"Market Category","default":"general"},"outcome":{"type":"string","title":"Outcome","default":""},"shares":{"type":"number","title":"Shares"},"proceeds":{"type":"number","title":"Proceeds"},"avg_price":{"type":"number","title":"Avg Price"},"clob_order_id":{"type":"string","title":"Clob Order Id","default":""},"builder_attributed":{"type":"boolean","title":"Builder Attributed","default":false}},"type":"object","required":["token_id","condition_id","shares","proceeds","avg_price"],"title":"RecordSellRequest"},"RecordTradeRequest":{"properties":{"market_id":{"type":"string","title":"Market Id"},"market_question":{"type":"string","title":"Market Question","default":""},"market_slug":{"type":"string","title":"Market Slug","default":""},"market_category":{"type":"string","title":"Market Category","default":"general"},"outcome":{"type":"string","title":"Outcome"},"amount":{"type":"number","title":"Amount"},"token_id":{"type":"string","title":"Token Id"},"order_type":{"type":"string","title":"Order Type","default":"market"},"entry_point":{"type":"string","title":"Entry Point","default":"quick_buy"},"clob_order_id":{"type":"string","title":"Clob Order Id","default":""},"shares":{"type":"number","title":"Shares","default":0},"avg_price":{"type":"number","title":"Avg Price","default":0},"neg_risk":{"type":"boolean","title":"Neg Risk","default":true},"builder_attributed":{"type":"boolean","title":"Builder Attributed","default":false}},"type":"object","required":["market_id","outcome","amount","token_id"],"title":"RecordTradeRequest","description":"Record a trade that was placed directly via the frontend ClobClient."},"RefreshItem":{"properties":{"trader_address":{"type":"string","title":"Trader Address"},"condition_id":{"type":"string","title":"Condition Id"},"outcome":{"type":"string","title":"Outcome","default":"YES"},"outcome_index":{"type":"integer","title":"Outcome Index","default":0},"slug":{"type":"string","title":"Slug","default":""}},"type":"object","required":["trader_address","condition_id"],"title":"RefreshItem"},"RefreshRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RefreshItem"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"RefreshRequest"},"ReportExclusionsBody":{"properties":{"user_ids":{"items":{"type":"string"},"type":"array","title":"User Ids"}},"type":"object","title":"ReportExclusionsBody"},"SellRequest":{"properties":{"token_id":{"type":"string","title":"Token Id"},"condition_id":{"type":"string","title":"Condition Id"},"shares":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Shares"},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount"},"sell_all":{"type":"boolean","title":"Sell All","default":false},"market_question":{"type":"string","title":"Market Question","default":""},"privy_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privy Token"},"client_signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Signature"},"order_salt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Salt"},"neg_risk":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Neg Risk"},"tick_size":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tick Size"}},"type":"object","required":["token_id","condition_id"],"title":"SellRequest"},"SessionStatusResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"status":{"type":"string","title":"Status"},"amount_usd":{"type":"number","title":"Amount Usd"},"funded_amount_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Funded Amount Usd"},"source_chain":{"type":"string","title":"Source Chain"},"asset":{"type":"string","title":"Asset"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"step":{"type":"integer","title":"Step","default":1},"is_terminal":{"type":"boolean","title":"Is Terminal","default":false}},"type":"object","required":["session_id","status","amount_usd","source_chain","asset"],"title":"SessionStatusResponse"},"SettingsUpdate":{"properties":{"trade_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trade Mode"},"trade_confirmation_threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trade Confirmation Threshold"},"quick_buy_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Quick Buy Amount"},"auto_redeem":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Redeem"},"notifications":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notifications"}},"type":"object","title":"SettingsUpdate"},"SignRequest":{"properties":{"method":{"type":"string","title":"Method"},"path":{"type":"string","title":"Path"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"},"timestamp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timestamp"}},"type":"object","required":["method","path"],"title":"SignRequest"},"SwappedWidgetRequest":{"properties":{"session_id":{"type":"string","title":"Session Id"},"apple_pay":{"type":"boolean","title":"Apple Pay","default":false}},"type":"object","required":["session_id"],"title":"SwappedWidgetRequest"},"SwappedWidgetResponse":{"properties":{"url":{"type":"string","title":"Url"},"provider":{"type":"string","title":"Provider","default":"swapped"}},"type":"object","required":["url"],"title":"SwappedWidgetResponse"},"TelegramCallbackRequest":{"properties":{"id":{"type":"integer","title":"Id"},"first_name":{"type":"string","title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"photo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Photo Url"},"auth_date":{"type":"integer","title":"Auth Date"},"hash":{"type":"string","title":"Hash"}},"type":"object","required":["id","first_name","auth_date","hash"],"title":"TelegramCallbackRequest"},"TwoFAVerifyRequest":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"TwoFAVerifyRequest"},"UpdateSessionEventRequest":{"properties":{"event":{"type":"string","title":"Event"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"}},"type":"object","required":["event"],"title":"UpdateSessionEventRequest","description":"Frontend-driven status hint. Privy doesn't expose webhooks to us\ndirectly (the SDK returns an opaque success/error from the modal), so\nthe frontend calls this when the modal closes to bump us off 'pending'.\nThe watcher remains the authority on `bridge_complete` — frontend\ncan only nudge into intermediate states or `failed`."},"UpdateSubscriptionRequest":{"properties":{"allocation_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Allocation Pct"},"execution_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Execution Mode"},"fixed_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fixed Amount"},"slippage_guard":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Slippage Guard"},"slippage_threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Slippage Threshold"},"take_profit_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Take Profit Pct"},"stop_loss_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Stop Loss Pct"},"auto_pause_profit_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Auto Pause Profit Usd"},"auto_pause_loss_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Auto Pause Loss Usd"},"is_paper":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Paper"}},"type":"object","title":"UpdateSubscriptionRequest","description":"Partial update — only fields present are changed.\n\n`allocation_pct` / `execution_mode` / `fixed_amount` / `slippage_guard` /\n`slippage_threshold` mirror the create-time fields. All others on the\nCopyTrade row (leader_address, follower_id, is_active, is_paused, total_*)\nare managed elsewhere and cannot be edited here."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WalletStateRequest":{"properties":{"eoa_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eoa Address"},"safe_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Safe Address"},"safe_deployed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Safe Deployed"},"allowances_set":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allowances Set"},"privy_wallet_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privy Wallet Id"},"polymarket_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Polymarket Api Key"},"polymarket_api_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Polymarket Api Secret"},"polymarket_api_passphrase":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Polymarket Api Passphrase"},"wallet_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wallet Type"},"legacy_safe_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legacy Safe Address"}},"type":"object","title":"WalletStateRequest"},"WebhookRequest":{"properties":{"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"}},"type":"object","title":"WebhookRequest"},"WithdrawCompleteRequest":{"properties":{"withdrawal_id":{"type":"integer","title":"Withdrawal Id"},"tx_hash":{"type":"string","title":"Tx Hash"}},"type":"object","required":["withdrawal_id","tx_hash"],"title":"WithdrawCompleteRequest"},"WithdrawPrepareRequest":{"properties":{"chain":{"type":"string","title":"Chain"},"token":{"type":"string","title":"Token"},"to_chain_id":{"type":"string","title":"To Chain Id","default":""},"token_address":{"type":"string","title":"Token Address","default":""},"to_address":{"type":"string","title":"To Address"},"amount":{"type":"number","title":"Amount"}},"type":"object","required":["chain","token","to_address","amount"],"title":"WithdrawPrepareRequest"},"WithdrawQuoteRequest":{"properties":{"chain":{"type":"string","title":"Chain"},"token":{"type":"string","title":"Token"},"to_chain_id":{"type":"string","title":"To Chain Id","default":""},"token_address":{"type":"string","title":"Token Address","default":""},"to_address":{"type":"string","title":"To Address","default":""},"amount":{"type":"number","title":"Amount"}},"type":"object","required":["chain","token","amount"],"title":"WithdrawQuoteRequest"},"WithdrawRequest":{"properties":{"to_address":{"type":"string","title":"To Address","default":""},"amount":{"type":"number","title":"Amount","default":0},"totp_code":{"type":"string","title":"Totp Code","default":""},"confirm":{"type":"boolean","title":"Confirm","default":false},"withdrawal_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Withdrawal Id"},"tx_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tx Hash"},"privy_token":{"type":"string","title":"Privy Token","default":""}},"type":"object","title":"WithdrawRequest"}}}}