{"openapi":"3.0.0","paths":{"/api/v1":{"get":{"operationId":"AppController_getHello","parameters":[],"responses":{"200":{"description":""}},"tags":["App"]}},"/api/v1/healthcheck":{"get":{"operationId":"AppController_check","parameters":[],"responses":{"200":{"description":""}},"tags":["App"]}},"/api/v1/wallet-links":{"get":{"operationId":"WalletLinkController_list","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["WalletLink"]}},"/api/v1/wallet-links/refresh":{"post":{"operationId":"WalletLinkController_refresh","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["WalletLink"]}},"/api/v1/metrics":{"get":{"operationId":"PrometheusController_index","parameters":[],"responses":{"200":{"description":""}},"tags":["Prometheus"]}},"/api/v1/feature-flags/public":{"get":{"operationId":"FeatureFlagsController_publicList","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Public feature flag bootstrap (no auth required)","tags":["feature-flags"]}},"/api/v1/external-wallets":{"get":{"operationId":"ExternalWalletsController_list","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["ExternalWallets"]},"post":{"operationId":"ExternalWalletsController_add","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddExternalWalletDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["ExternalWallets"]}},"/api/v1/external-wallets/challenge":{"post":{"operationId":"ExternalWalletsController_createChallenge","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalWalletChallengeDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["ExternalWallets"]}},"/api/v1/external-wallets/import-sign-in-wallet":{"post":{"operationId":"ExternalWalletsController_importSignInWallet","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportSignInWalletDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["ExternalWallets"]}},"/api/v1/external-wallets/{id}":{"patch":{"operationId":"ExternalWalletsController_rename","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateExternalWalletLabelDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["ExternalWallets"]},"delete":{"operationId":"ExternalWalletsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["ExternalWallets"]}},"/api/v1/auth/sign-in":{"post":{"operationId":"AuthController_signInHandler","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/TokensDataDto"}}}]}}}}},"tags":["auth"]}},"/api/v1/auth/2fa/verify":{"post":{"operationId":"AuthController_verifyTwoFactorHandler","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorVerifyRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/TokensDataDto"}}}]}}}}},"tags":["auth"]}},"/api/v1/auth/2fa/status":{"get":{"operationId":"AuthController_twoFactorStatusHandler","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/v1/auth/2fa/setup":{"post":{"operationId":"AuthController_setupTwoFactorHandler","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/TwoFactorSetupResponseDto"}}}]}}}}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/v1/auth/2fa/enable":{"post":{"operationId":"AuthController_enableTwoFactorHandler","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorEnableRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/TwoFactorEnableResponseDto"}}}]}}}}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/v1/auth/2fa/disable":{"post":{"operationId":"AuthController_disableTwoFactorHandler","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorDisableRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/"}}}]}}}}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/v1/auth/logout":{"post":{"operationId":"AuthController_logoutHandler","parameters":[],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/v1/auth/change-password":{"post":{"operationId":"AuthController_changePasswordHandler","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequestDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/v1/auth/set-password":{"post":{"operationId":"AuthController_setPasswordHandler","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/"}}}]}}}}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/v1/auth/set-password/approve":{"post":{"operationId":"AuthController_setPasswordApproveHandler","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPasswordApproveRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/"}}}]}}}}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/v1/auth/refresh":{"post":{"operationId":"AuthController_refresh","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/RefreshTokenResponseDto"}}}]}}}}},"tags":["auth"]}},"/api/v1/auth/forgot-password":{"post":{"operationId":"AuthController_forgotPasswordHandler","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/"}}}]}}}}},"tags":["auth"]}},"/api/v1/auth/forgot-password/approve":{"post":{"operationId":"AuthController_forgotPasswordApproveHandler","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPasswordApproveRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/"}}}]}}}}},"tags":["auth"]}},"/api/v1/auth/form":{"post":{"operationId":"AuthController_sendFormToMail","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormMailRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/EmptyResponseDto"}}}]}}}}},"tags":["auth"]}},"/api/v1/user/profile":{"get":{"operationId":"UserController_getOwnProfileHandler","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/ProfileResponseDto"}}}]}}}}},"security":[{"bearer":[]}],"tags":["user"]}},"/api/v1/solana/rpc":{"post":{"operationId":"SolanaRpcProxyController_relay","parameters":[],"responses":{"201":{"description":""}},"tags":["Solana"]}},"/api/v1/evm-rpc/{chain}":{"post":{"operationId":"EvmRpcProxyController_relay","parameters":[{"name":"chain","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["EVM RPC"]}},"/api/v1/pool":{"get":{"operationId":"PoolController_getPoolList","parameters":[{"name":"page","required":false,"in":"query","schema":{"minimum":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":500,"type":"number"}},{"name":"id","required":false,"in":"query","schema":{"type":"string"}},{"name":"address","required":false,"in":"query","schema":{"type":"string"}},{"name":"token","required":false,"in":"query","schema":{"type":"string"}},{"name":"name","required":false,"in":"query","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","description":"Free-text match over pool name, token0/token1 symbol+name and main token symbol","schema":{"type":"string"}},{"name":"mainTokenSymbol","required":false,"in":"query","schema":{"type":"string"}},{"name":"mainTokenName","required":false,"in":"query","schema":{"type":"string"}},{"name":"category","required":false,"in":"query","schema":{"type":"string","enum":["CRYPTO","STOCKS","COMMODITIES","INDICES"]}},{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["NATIVE","AVAILABLE"]}},{"name":"listingSource","required":false,"in":"query","deprecated":true,"description":"Legacy no-op. listingSource remains response provenance and does not filter the public catalog.","schema":{"type":"string","enum":["manual","platform_launch","auto"]}},{"name":"tokenType","required":false,"in":"query","schema":{"nullable":true,"type":"string","enum":["DEFAI","DEFI","MEME","RWA","AI_AGENT","AI_INFRA","DATA"]}},{"name":"isActive","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"order","required":false,"in":"query","schema":{"type":"number"}},{"name":"orderBy","required":false,"in":"query","schema":{"type":"string","enum":["address","name","category","type","tokenType","order","volume24h","change24h","mktcap","poolTvl","apy","createdAt","updatedAt"]}},{"name":"orderDirection","required":false,"in":"query","schema":{"type":"string","enum":["ASC","DESC"]}},{"name":"chainId","required":false,"in":"query","schema":{"type":"string","enum":["ETHEREUM","HYPEREVM","ROBINHOOD","BASE","ARBITRUM","SOLANA_MAINNET",42161,8453,1,999,4663,900001]}},{"name":"chainType","required":false,"in":"query","description":"Filter by chain type (EVM or SOLANA)","schema":{"type":"string","enum":["EVM","SOLANA"]}},{"name":"webpage","required":false,"in":"query","schema":{"type":"string"}},{"name":"x","required":false,"in":"query","schema":{"type":"string"}},{"name":"includeDelisted","required":false,"in":"query","description":"Include delisted pools in results (admin only)","schema":{"type":"boolean"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PoolResponseDto"}},"meta":{"type":"object","properties":{"page":{"type":"number"},"limit":{"type":"number"},"total":{"type":"number"}}}}}}}]}}}}},"tags":["pool"]}},"/api/v1/pool/{id}":{"get":{"operationId":"PoolController_getPoolByIdHandler","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/PoolResponseDto"}}}]}}}},"404":{"description":""}},"tags":["pool"]}},"/api/v1/pool/info":{"get":{"operationId":"PoolController_getPoolInfoHandler","parameters":[{"name":"address","required":true,"in":"query","schema":{"type":"string"}},{"name":"chainId","required":true,"in":"query","schema":{"type":"string","enum":["ETHEREUM","HYPEREVM","ROBINHOOD","BASE","ARBITRUM","SOLANA_MAINNET",42161,8453,1,999,4663,900001]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/PoolInfoResponseDto"}}}]}}}}},"tags":["pool"]}},"/api/v1/pool/gecko-metrics":{"get":{"description":"Returns baseTokenPriceUsd, reserveUsd, volume24hUsd. Proxy for FE widgets with Redis caching and keyless DexScreener.","operationId":"PoolController_getGeckoMetricsHandler","parameters":[{"name":"address","required":true,"in":"query","description":"EVM pool address (20-byte hex)","schema":{"type":"string"}},{"name":"chainId","required":true,"in":"query","schema":{"type":"number","enum":[1,8453,42161,999]}}],"responses":{"200":{"description":""}},"summary":"Lightweight pool metrics via DexScreener","tags":["pool"]}},"/api/v1/pool/v4/decode-pool-id":{"get":{"description":"Extracts token addresses from a Uniswap V4 Pool ID using external APIs","operationId":"PoolController_decodeV4PoolId","parameters":[{"name":"poolId","required":true,"in":"query","schema":{"type":"string"}},{"name":"chainId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Pool ID decoded successfully","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"data":{"type":"object","properties":{"token0":{"type":"string"},"token1":{"type":"string"}}}}}}}}},"summary":"Decode Uniswap V4 Pool ID","tags":["pool"]}},"/api/v1/pool/solana/pool-info":{"get":{"description":"Fetches pool and token information from Raydium, Orca, and Jupiter APIs","operationId":"PoolController_getSolanaPoolInfo","parameters":[{"name":"address","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Solana pool info fetched successfully","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"data":{"type":"object","properties":{"pool":{"type":"object","properties":{"address":{"type":"string"},"protocol":{"type":"string"},"token0Mint":{"type":"string"},"token1Mint":{"type":"string"},"tvl":{"type":"number"}}},"token0":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"number"},"logoURI":{"type":"string"},"price":{"type":"number"}}},"token1":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"number"},"logoURI":{"type":"string"},"price":{"type":"number"}}}}}}}}}}},"summary":"Get Solana pool info","tags":["pool"]}},"/api/v1/pool/eth-price":{"get":{"operationId":"PoolController_getEthPrice","parameters":[],"responses":{"200":{"description":""}},"summary":"Get ETH price in USD plus 24h market data","tags":["pool"]}},"/api/v1/pool/hype-price":{"get":{"operationId":"PoolController_getHypePrice","parameters":[],"responses":{"200":{"description":""}},"summary":"Get native HYPE price in USD plus 24h market data","tags":["pool"]}},"/api/v1/pool/native-price-history/{coin}":{"get":{"operationId":"PoolController_getNativePriceHistory","parameters":[{"name":"coin","required":true,"in":"path","schema":{"type":"string"}},{"name":"period","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"USD price history for a native coin (eth | hype) — inline portfolio chart for pool-less native rows","tags":["pool"]}},"/api/v1/pool/token-tax/{address}":{"get":{"operationId":"PoolController_getTokenTax","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}},{"name":"chainId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get token buy/sell tax via Honeypot.is","tags":["pool"]}},"/api/v1/pool/token-price/{address}":{"get":{"operationId":"PoolController_getTokenPrice","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}},{"name":"chainId","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"summary":"Get token USD price (DB → DexScreener)","tags":["pool"]}},"/api/v1/pool/token-rating/{tokenAddress}":{"get":{"description":"Returns composite A-F grade with sub-scores for social, on-chain, and safety signals","operationId":"PoolController_getTokenRating","parameters":[{"name":"tokenAddress","required":true,"in":"path","schema":{"type":"string"}},{"name":"chainId","required":true,"in":"query","schema":{"type":"number"}},{"name":"poolAddress","required":true,"in":"query","schema":{"type":"string"}},{"name":"symbol","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/TokenRatingResponseDto"}}}]}}}}},"summary":"Get token rating / sentiment score","tags":["pool"]}},"/api/v1/pool/search":{"get":{"description":"Full-text search across pool names, token symbols, and token names. Used by the MCP bt365_search_tokens tool.","operationId":"PoolController_searchPools","parameters":[{"name":"query","required":false,"in":"query","description":"Search term (matches token symbol, name, or pool name)","schema":{"type":"string"}},{"name":"chainId","required":false,"in":"query","schema":{"type":"string","enum":["ETHEREUM","HYPEREVM","ROBINHOOD","BASE","ARBITRUM","SOLANA_MAINNET",42161,8453,1,999,4663,900001]}},{"name":"limit","required":false,"in":"query","description":"Max results (default 20, max 100)","schema":{"default":20,"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PoolResponseDto"}},"meta":{"type":"object","properties":{"page":{"type":"number"},"limit":{"type":"number"},"total":{"type":"number"}}}}}}}]}}}}},"summary":"Search pools and tokens by name or symbol","tags":["pool"]}},"/api/v1/pool/{address}/price":{"get":{"operationId":"PoolController_getPricePoolByIdHandler","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/PoolPriceResponseDto"}}}]}}}},"404":{"description":""}},"tags":["pool"]}},"/api/v1/pool/solana/jupiter-quote":{"get":{"description":"Proxies Jupiter API quote request to bypass CORS and handle authentication","operationId":"PoolController_getJupiterQuote","parameters":[{"name":"inputMint","required":true,"in":"query","schema":{"type":"string"}},{"name":"outputMint","required":true,"in":"query","schema":{"type":"string"}},{"name":"amount","required":true,"in":"query","schema":{"type":"string"}},{"name":"slippageBps","required":true,"in":"query","schema":{"type":"string"}},{"name":"taker","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Jupiter quote fetched successfully"}},"security":[{"bearer":[]}],"summary":"Get Jupiter swap quote","tags":["pool"]}},"/api/v1/pool/solana/jupiter-swap":{"post":{"description":"Proxies Jupiter API swap transaction request","operationId":"PoolController_getJupiterSwapTransaction","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JupiterSwapRequestDto"}}}},"responses":{"200":{"description":"Jupiter swap transaction created successfully"}},"security":[{"bearer":[]}],"summary":"Get Jupiter swap transaction","tags":["pool"]}},"/api/v1/pool/solana/tx-status":{"get":{"description":"Polls Solana RPC until the transaction is confirmed or expires","operationId":"PoolController_getSolanaTransactionStatus","parameters":[{"name":"signature","required":true,"in":"query","schema":{"type":"string"}},{"name":"lastValidBlockHeight","required":true,"in":"query","schema":{"type":"number"}},{"name":"poolAddress","required":true,"in":"query","schema":{"type":"string"}},{"name":"signer","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Solana transaction confirmed successfully"}},"security":[{"bearer":[]}],"summary":"Wait for Solana transaction confirmation","tags":["pool"]}},"/api/v1/chart/config":{"get":{"operationId":"ChartController_getConfig","parameters":[],"responses":{"200":{"description":""}},"summary":"TradingView UDF config","tags":["Chart"]}},"/api/v1/chart/time":{"get":{"operationId":"ChartController_getTime","parameters":[],"responses":{"200":{"description":""}},"summary":"Server time (Unix seconds)","tags":["Chart"]}},"/api/v1/chart/symbols":{"get":{"operationId":"ChartController_resolveSymbol","parameters":[{"name":"symbol","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Resolve symbol metadata","tags":["Chart"]}},"/api/v1/chart/history":{"get":{"operationId":"ChartController_getHistory","parameters":[{"name":"symbol","required":true,"in":"query","schema":{"type":"string"}},{"name":"resolution","required":true,"in":"query","schema":{"type":"string"}},{"name":"from","required":true,"in":"query","schema":{"type":"string"}},{"name":"to","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"OHLCV bar data","tags":["Chart"]}},"/api/v1/chart/search":{"get":{"operationId":"ChartController_searchSymbols","parameters":[{"name":"query","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Search symbols","tags":["Chart"]}},"/api/v1/pool/{chainId}/{address}/stats":{"get":{"operationId":"PoolMarketStatsController_getStats","parameters":[{"name":"chainId","required":true,"in":"path","schema":{"type":"string"}},{"name":"address","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/PoolMarketStatsResponseDto"}}}]}}}}},"tags":["pool"]}},"/api/v1/pool/{chainId}/{address}/trades":{"get":{"operationId":"PoolMarketTradesController_getTrades","parameters":[{"name":"chainId","required":true,"in":"path","schema":{"type":"string"}},{"name":"address","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["pool"]}},"/api/v1/swap":{"get":{"operationId":"SwapController_getSwapList","parameters":[{"name":"poolAddress","required":true,"in":"query","schema":{"type":"string"}},{"name":"period","required":true,"in":"query","schema":{"type":"string","enum":["hour","day","week","month","threeMonth","year","twoYear","threeYear","all"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SwapResponseDto"}},"meta":{"type":"object","properties":{"page":{"type":"number"},"limit":{"type":"number"},"total":{"type":"number"}}}}}}}]}}}}},"tags":["swap"]}},"/api/v1/swap/leaderboard":{"get":{"operationId":"SwapController_getLeaderboard","parameters":[{"name":"page","required":false,"in":"query","schema":{"minimum":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":500,"type":"number"}},{"name":"orderBy","required":false,"in":"query","schema":{"type":"string","enum":["account","points","volume","volume_usd","swaps_count"]}},{"name":"orderDirection","required":false,"in":"query","schema":{"type":"string","enum":["ASC","DESC"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SwapResponseDto"}},"meta":{"type":"object","properties":{"page":{"type":"number"},"limit":{"type":"number"},"total":{"type":"number"}}}}}}}]}}}}},"summary":"Get public leaderboard (no auth required)","tags":["swap"]}},"/api/v1/swap/pool-history":{"get":{"operationId":"SwapController_getPoolTradeHistory","parameters":[{"name":"page","required":false,"in":"query","schema":{"minimum":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":500,"type":"number"}},{"name":"account","required":true,"in":"query","description":"Wallet address (EVM or Solana)","schema":{"type":"string"}},{"name":"poolAddress","required":true,"in":"query","description":"Pool address (EVM or Solana) or V4 PoolId","schema":{"type":"string"}},{"name":"chainId","required":true,"in":"query","schema":{"type":"string","enum":["ETHEREUM","HYPEREVM","ROBINHOOD","BASE","ARBITRUM","SOLANA_MAINNET",42161,8453,1,999,4663,900001]}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get individual trade history for a wallet on a specific pool","tags":["swap"]}},"/api/v1/swap/routes":{"get":{"operationId":"SwapController_findRoutes","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID (only Base 8453 supports multi-DEX)","schema":{"type":"string","enum":["ETHEREUM","HYPEREVM","ROBINHOOD","BASE","ARBITRUM","SOLANA_MAINNET",42161,8453,1,999,4663,900001]}},{"name":"tokenIn","required":true,"in":"query","description":"Input token address","schema":{"type":"string"}},{"name":"tokenOut","required":true,"in":"query","description":"Output token address","schema":{"type":"string"}},{"name":"amountIn","required":true,"in":"query","description":"Amount to swap (in wei/smallest unit)","schema":{"type":"string"}},{"name":"decimalsOut","required":false,"in":"query","description":"Output token decimals for formatting (default: 18)","schema":{"type":"number"}},{"name":"decimalsIn","required":false,"in":"query","description":"Input token decimals for price impact calculation (default: 18)","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"summary":"Find best swap routes across DEXes (Base only)","tags":["swap"]}},"/api/v1/swap/routes/multi-hop":{"get":{"operationId":"SwapController_findMultiHopRoutes","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID (only Base 8453 supports multi-DEX)","schema":{"type":"string","enum":["ETHEREUM","HYPEREVM","ROBINHOOD","BASE","ARBITRUM","SOLANA_MAINNET",42161,8453,1,999,4663,900001]}},{"name":"tokenIn","required":true,"in":"query","description":"Input token address","schema":{"type":"string"}},{"name":"tokenOut","required":true,"in":"query","description":"Output token address","schema":{"type":"string"}},{"name":"amountIn","required":true,"in":"query","description":"Amount to swap (in wei/smallest unit)","schema":{"type":"string"}},{"name":"decimalsOut","required":false,"in":"query","description":"Output token decimals for formatting (default: 18)","schema":{"type":"number"}},{"name":"decimalsIn","required":false,"in":"query","description":"Input token decimals","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"summary":"Find multi-hop swap routes through bridge tokens (Base only)","tags":["swap"]}},"/api/v1/swap/hyperevm/quote":{"post":{"operationId":"SwapController_quoteHyperEvm","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HyperEvmQuoteDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Quote a HyperEVM swap through KyberSwap (signed authorization)","tags":["swap"]}},"/api/v1/swap/{address}/stats":{"get":{"operationId":"SwapController_getUserStats","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/UserStatsResponseDto"}}}]}}}}},"summary":"Get comprehensive user trading stats","tags":["swap"]}},"/api/v1/swap/{address}/rank":{"get":{"operationId":"SwapController_getRankByAddress","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"minimum":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":500,"type":"number"}},{"name":"chainId","required":false,"in":"query","schema":{"type":"string","enum":["ETHEREUM","HYPEREVM","ROBINHOOD","BASE","ARBITRUM","SOLANA_MAINNET",42161,8453,1,999,4663,900001]}},{"name":"account","required":false,"in":"query","schema":{"type":"string"}},{"name":"orderBy","required":false,"in":"query","schema":{"type":"string","enum":["account","points","volume","volume_usd","swaps_count"]}},{"name":"orderDirection","required":false,"in":"query","schema":{"type":"string","enum":["ASC","DESC"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/SwapResponseDto"}}}]}}}}},"tags":["swap"]}},"/api/v1/swap/{address}/points":{"get":{"operationId":"SwapController_getPointsByAddress","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SwapResponseDto"}},"meta":{"type":"object","properties":{"page":{"type":"number"},"limit":{"type":"number"},"total":{"type":"number"}}}}}}}]}}}}},"tags":["swap"]}},"/api/v1/wallet/me/live-balance":{"get":{"operationId":"WalletLiveBalanceController_read","parameters":[{"name":"chainId","required":true,"in":"query","schema":{"type":"string"}},{"name":"address","required":true,"in":"query","schema":{"type":"string"}},{"name":"tokenAddress","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["WalletLiveBalance"]}},"/api/v1/wallet/me/live-balances":{"get":{"operationId":"WalletLiveBalanceController_readMany","parameters":[{"name":"chainId","required":true,"in":"query","schema":{"type":"string"}},{"name":"address","required":true,"in":"query","schema":{"type":"string"}},{"name":"tokenAddresses","required":true,"in":"query","schema":{"type":"string"}},{"name":"includeNative","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["WalletLiveBalance"]}},"/api/v1/wallet/me/profile":{"get":{"operationId":"WalletController_getMyWalletProfile","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get authenticated wallet profile","tags":["Wallet"]},"post":{"operationId":"WalletController_updateMyWalletProfile","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWalletProfileDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Update authenticated wallet profile","tags":["Wallet"]}},"/api/v1/wallet/me/username-available":{"get":{"operationId":"WalletController_checkUsernameAvailability","parameters":[{"name":"username","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Check whether a username is free (advisory — the write is authoritative)","tags":["Wallet"]}},"/api/v1/wallet/me/avatar":{"post":{"operationId":"WalletController_uploadMyAvatar","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Upload the authenticated wallet profile image","tags":["Wallet"]},"delete":{"operationId":"WalletController_deleteMyAvatar","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Remove the authenticated wallet profile image","tags":["Wallet"]}},"/api/v1/wallet/me/transactions":{"get":{"operationId":"WalletController_getMyTransactions","parameters":[{"name":"page","required":false,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":50,"default":20,"type":"number"}},{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["swap","transfer","bridge","cross_chain_swap"]}},{"name":"includeFlagged","required":false,"in":"query","description":"Include flagged dust transfers that are hidden from the default activity projection","schema":{"type":"boolean"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"$ref":"#/components/schemas/WalletActivityResponseDto"}}}]}}}}},"security":[{"bearer":[]}],"summary":"Get authenticated wallet activity feed (swaps + transfers)","tags":["Wallet"]}},"/api/v1/wallet/me/solana-token-stats":{"post":{"operationId":"WalletController_getMySolanaTokenStats","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolanaWalletTokenStatsRequestDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Calculate Solana token stats for the authenticated wallet","tags":["Wallet"]}},"/api/v1/wallet/me/linked-wallets":{"get":{"operationId":"WalletController_getMyLinkedWallets","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Balances of the authenticated user's linked external wallets","tags":["Wallet"]}},"/api/v1/wallet/{address}/mobile":{"get":{"operationId":"WalletController_getMobileWallet","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}},{"name":"quick","required":true,"in":"query","schema":{"type":"string"}},{"name":"force","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Wallet"]}},"/api/v1/wallet/{address}":{"get":{"operationId":"WalletController_getWallet","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}},{"name":"quick","required":true,"in":"query","schema":{"type":"string"}},{"name":"force","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Wallet"]}},"/api/v1/wallet/{address}/history/old":{"get":{"operationId":"WalletController_getWalletHistory","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}},{"name":"period","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Wallet"]}},"/api/v1/wallet/{address}/history":{"get":{"operationId":"WalletController_getWalletHistoryNew","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}},{"name":"period","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Wallet"]}},"/api/v1/wallet/{address}/token/{tokenAddress}/history":{"get":{"operationId":"WalletController_getWalletTokenHistory","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}},{"name":"tokenAddress","required":true,"in":"path","schema":{"type":"string"}},{"name":"period","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Wallet"]}},"/api/v1/wallet/{address}/pool":{"get":{"operationId":"WalletController_getWalletPool","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"minimum":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":500,"type":"number"}},{"name":"id","required":false,"in":"query","schema":{"type":"string"}},{"name":"address","required":false,"in":"query","schema":{"type":"string"}},{"name":"token","required":false,"in":"query","schema":{"type":"string"}},{"name":"name","required":false,"in":"query","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","description":"Free-text match over pool name, token0/token1 symbol+name and main token symbol","schema":{"type":"string"}},{"name":"mainTokenSymbol","required":false,"in":"query","schema":{"type":"string"}},{"name":"mainTokenName","required":false,"in":"query","schema":{"type":"string"}},{"name":"category","required":false,"in":"query","schema":{"type":"string","enum":["CRYPTO","STOCKS","COMMODITIES","INDICES"]}},{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["NATIVE","AVAILABLE"]}},{"name":"listingSource","required":false,"in":"query","deprecated":true,"description":"Legacy no-op. listingSource remains response provenance and does not filter the public catalog.","schema":{"type":"string","enum":["manual","platform_launch","auto"]}},{"name":"tokenType","required":false,"in":"query","schema":{"nullable":true,"type":"string","enum":["DEFAI","DEFI","MEME","RWA","AI_AGENT","AI_INFRA","DATA"]}},{"name":"isActive","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"order","required":false,"in":"query","schema":{"type":"number"}},{"name":"orderBy","required":false,"in":"query","schema":{"type":"string","enum":["address","name","category","type","tokenType","order","volume24h","change24h","mktcap","poolTvl","apy","createdAt","updatedAt"]}},{"name":"orderDirection","required":false,"in":"query","schema":{"type":"string","enum":["ASC","DESC"]}},{"name":"chainId","required":false,"in":"query","schema":{"type":"string","enum":["ETHEREUM","HYPEREVM","ROBINHOOD","BASE","ARBITRUM","SOLANA_MAINNET",42161,8453,1,999,4663,900001]}},{"name":"chainType","required":false,"in":"query","description":"Filter by chain type (EVM or SOLANA)","schema":{"type":"string","enum":["EVM","SOLANA"]}},{"name":"webpage","required":false,"in":"query","schema":{"type":"string"}},{"name":"x","required":false,"in":"query","schema":{"type":"string"}},{"name":"includeDelisted","required":false,"in":"query","description":"Include delisted pools in results (admin only)","schema":{"type":"boolean"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ResponseDto"},{"properties":{"data":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PoolResponseDto"}},"meta":{"type":"object","properties":{"page":{"type":"number"},"limit":{"type":"number"},"total":{"type":"number"}}}}}}}]}}}}},"tags":["Wallet"]}},"/api/v1/wallet/{address}/twitter":{"post":{"description":"Links a Twitter/X handle to a wallet address. Used by Privy OAuth integration.","operationId":"WalletController_updateTwitterHandle","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTwitterHandleDto"}}}},"responses":{"200":{"description":"Twitter handle updated successfully"}},"security":[{"bearer":[]}],"summary":"Update Twitter handle","tags":["Wallet"]}},"/api/v1/wallet/{address}/assets/bootstrap":{"post":{"description":"Owner-only. Schedules a one-off cold-start discovery of candidate external assets. Discovery returns candidate ADDRESSES only — every balance is verified on-chain before it is displayed. Inert unless WALLET_ASSET_BOOTSTRAP_ENABLED is on and dedicated Alchemy data credentials are configured. Rate-limited and on a per-wallet cooldown.","operationId":"WalletController_bootstrapWalletAssets","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Discovery scheduled, or a reason it was not"}},"security":[{"bearer":[]}],"summary":"Bootstrap external asset discovery for the calling wallet","tags":["Wallet"]}},"/api/v1/public/wallets/{handleOrAddress}/profile":{"get":{"operationId":"WalletPublicController_getProfile","parameters":[{"name":"handleOrAddress","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["WalletPublic"]}},"/api/v1/database-files/{id}":{"get":{"operationId":"DatabaseFilesController_getDatabaseFileById","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["DatabaseFiles"]}},"/api/v1/geo/eligibility":{"get":{"operationId":"GeoEligibilityController_getEligibility","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["geo"]}},"/api/v1/notifications":{"get":{"operationId":"NotificationController_getNotifications","parameters":[{"name":"page","required":false,"in":"query","description":"Page number (1-based)","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":20,"type":"number"}},{"name":"type","required":false,"in":"query","description":"Filter by notification type","schema":{"type":"string","enum":["agent_trade_executed","agent_status_changed","agent_low_gas","agent_gas_depleted","agent_health_change","agent_review","agent_weekly_reflection","agent_error","price_alert_triggered","wallet_summary","order_executed","order_failed","competition_winner","campaign","new_follower","someone_copied_you","followed_trader_opened_position"]}},{"name":"read","required":false,"in":"query","description":"Filter by read status","schema":{"type":"boolean"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List notifications (paginated)","tags":["Notifications"]}},"/api/v1/notifications/unread-count":{"get":{"operationId":"NotificationController_getUnreadCount","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get unread notification count","tags":["Notifications"]}},"/api/v1/notifications/read-all":{"patch":{"operationId":"NotificationController_markAllAsRead","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Mark all notifications as read","tags":["Notifications"]}},"/api/v1/notifications/{id}/read":{"patch":{"operationId":"NotificationController_markAsRead","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Mark a notification as read","tags":["Notifications"]}},"/api/v1/notifications/preferences":{"get":{"operationId":"NotificationController_getPreferences","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get notification preferences","tags":["Notifications"]},"patch":{"operationId":"NotificationController_updatePreferences","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePreferencesDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Update notification preferences","tags":["Notifications"]}},"/api/v1/notifications/price-alerts":{"post":{"operationId":"NotificationController_createPriceAlert","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePriceAlertDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Create a price alert","tags":["Notifications"]},"get":{"operationId":"NotificationController_getMyPriceAlerts","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List my price alerts","tags":["Notifications"]}},"/api/v1/notifications/price-alerts/{id}":{"patch":{"operationId":"NotificationController_updatePriceAlert","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePriceAlertDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Update a price alert","tags":["Notifications"]},"delete":{"operationId":"NotificationController_deletePriceAlert","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete a price alert","tags":["Notifications"]}},"/api/v1/notifications/register-device":{"post":{"operationId":"NotificationController_registerDevice","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterDeviceDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Register a device for mobile push notifications","tags":["Notifications"]}},"/api/v1/notifications/unregister-device":{"post":{"operationId":"NotificationController_unregisterDevice","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnregisterDeviceDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Remove a device from mobile push notifications","tags":["Notifications"]}},"/api/v1/notifications/campaigns/{id}/opened":{"post":{"operationId":"NotificationController_campaignOpened","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Acknowledge a unique campaign open for this wallet","tags":["Notifications"]}},"/api/v1/referrals/me/code":{"get":{"operationId":"ReferralController_getMyCode","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralCodeResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Get or issue the caller's volume-gated referral code.","tags":["referrals"]}},"/api/v1/referrals/founding/claim":{"post":{"operationId":"ReferralController_claimFoundingSlot","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Claim an available founding affiliate slot.","tags":["referrals"]}},"/api/v1/referrals/attribute":{"post":{"operationId":"ReferralController_attribute","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttributeRequestDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Attribute the authenticated wallet to a referrer by code.","tags":["referrals"]}},"/api/v1/referrals/me/summary":{"get":{"description":"effectiveFeeShareRate is the server-resolved offer for a referral bound today, using the affiliate's applicable active terms.","operationId":"ReferralController_getMySummary","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Referral aggregates for the caller.","tags":["referrals"]}},"/api/v1/referrals/me/list":{"get":{"operationId":"ReferralController_getMyList","parameters":[{"name":"cursor","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Paginated list of referees attributed to caller.","tags":["referrals"]}},"/api/v1/referrals/me/payouts":{"get":{"operationId":"ReferralController_getMyPayouts","parameters":[{"name":"cursor","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Paginated payout history for the caller.","tags":["referrals"]}},"/api/v1/referrals/public/{code}":{"get":{"operationId":"ReferralController_getPublicLedger","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Public aggregate ledger and on-chain payouts for an affiliate code.","tags":["referrals"]}},"/api/v1/referrals/terms/current":{"get":{"operationId":"ReferralController_getActiveTerms","parameters":[],"responses":{"200":{"description":""}},"summary":"Public active affiliate terms.","tags":["referrals"]}},"/api/v1/referrals/resolve/{code}":{"get":{"operationId":"ReferralController_resolveCode","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Check whether a referral code exists. Returns only { valid }.","tags":["referrals"]}},"/api/v1/referrals/me/app-proof/challenge":{"post":{"operationId":"AppAttestationController_challenge","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["AppAttestation"]}},"/api/v1/referrals/me/app-proof":{"post":{"operationId":"AppAttestationController_submit","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitAppProofDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["AppAttestation"]}},"/api/v1/swap/fee-config":{"get":{"operationId":"FeeWhitelistPublicController_getFeeConfig","parameters":[{"name":"address","required":true,"in":"query","schema":{"type":"string"}},{"name":"vertical","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Effective platform swap fee (bps) for a wallet on a vertical","tags":["swap"]}},"/api/v1/tokens/discover/{id}/trades":{"get":{"description":"The latest swaps in the token's pool, newest first, sourced from GeckoTerminal for the same pool the chart reads. An empty `trades` array with `source: \"none\"` is a normal response for a pool that is not indexed yet.","operationId":"TokenChartController_getTokenTrades","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Recent trades"},"404":{"description":"Token not found or not deployed"}},"summary":"Recent trades for a launched token","tags":["Token Discovery"]}},"/api/v1/tokens/discover/{id}/chart":{"get":{"description":"OHLC candles for the token-detail chart. Sourced from GeckoTerminal when the pool is indexed, otherwise from the internal 5-minute price snapshots. An empty `points` array with `source: \"none\"` is a normal response for a token with no price history yet.","operationId":"TokenChartController_getTokenChart","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"range","required":false,"in":"query","schema":{"enum":["1h","24h","7d","30d","all"],"type":"string"}}],"responses":{"200":{"description":"Chart series"},"404":{"description":"Token not found or not deployed"}},"summary":"Price chart series for a launched token","tags":["Token Discovery"]}},"/api/v1/wallet/{address}/nfts":{"get":{"operationId":"WalletNftController_getWalletNfts","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}},{"name":"force","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletNftsResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"NFTs held by a wallet across the supported EVM chains","tags":["Wallet"]}},"/api/v1/agents/templates":{"get":{"operationId":"AgentInstanceController_getTemplates","parameters":[],"responses":{"200":{"description":"Returns list of active agent templates","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateListResponseDto"}}}}},"summary":"List all active agent templates","tags":["agents"]}},"/api/v1/agents/templates/{type}":{"get":{"operationId":"AgentInstanceController_getTemplateByType","parameters":[{"name":"type","required":true,"in":"path","description":"Template type (e.g., USDC_YIELD_V1)","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns the specified agent template","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateResponseDto"}}}},"404":{"description":"Template not found"}},"summary":"Get agent template by type","tags":["agents"]}},"/api/v1/agents/twitter-users/search":{"get":{"operationId":"AgentInstanceController_searchTwitterUsers","parameters":[{"name":"q","required":true,"in":"query","description":"X handle to search (e.g. \"bl0ckcreeper\")","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns matching X/Twitter users"}},"summary":"Search X/Twitter users by handle (for Twitter Sniper agent)","tags":["agents"]}},"/api/v1/agents/perps/markets":{"get":{"operationId":"AgentInstanceController_getPerpsMarkets","parameters":[{"name":"venue","required":false,"in":"query","description":"Perps venue (hyperliquid|avantis). Defaults to hyperliquid.","schema":{"enum":["hyperliquid","avantis"],"type":"string"}},{"name":"stats","required":false,"in":"query","description":"When \"true\", enrich each market with live stats (price, 1h + 24h change, 24h volume, open interest, funding) and — for crypto — market cap + logo. Hyperliquid only; Avantis ignores it. Server-cached.","schema":{"enum":["true","false"],"type":"string"}}],"responses":{"200":{"description":"Returns list of all tradeable perpetual market symbols"}},"summary":"Get all available perpetual markets by venue","tags":["agents"]}},"/api/v1/agents/hyperliquid/markets":{"get":{"operationId":"AgentInstanceController_getHyperliquidMarkets","parameters":[],"responses":{"200":{"description":"Returns list of all tradeable Hyperliquid perpetual market symbols"}},"summary":"Get all available Hyperliquid perpetual markets (legacy route)","tags":["agents"]}},"/api/v1/agents/perps/market-session":{"get":{"operationId":"AgentInstanceController_getPerpsMarketSession","parameters":[{"name":"symbol","required":true,"in":"query","description":"Raw market symbol, e.g. \"xyz:MINIMAX\".","schema":{"type":"string"}}],"responses":{"200":{"description":"Whether the market is accepting orders now. Every Hyperliquid perp, including HIP-3 equities/indices/commodities/forex, trades 24/7, so this currently always reports open; the contract is kept so clients can warn before an order on any future venue that does halt."}},"summary":"Current trading session for a perp market","tags":["agents"]}},"/api/v1/agents/perps/market-profile":{"get":{"operationId":"AgentInstanceController_getPerpsMarketProfile","parameters":[{"name":"symbol","required":true,"in":"query","description":"Raw market symbol, e.g. \"BTC\" or \"xyz:NVDA\".","schema":{"type":"string"}}],"responses":{"200":{"description":"What the asset IS: a plain-language description, category tags, the project website and its X handle (bare, no leading \"@\"). Crypto is sourced from CoinGecko and cached server-side for a day; other asset classes return an empty profile (source: null) and the client falls back to its own curated table. Never fails on an upstream outage — it degrades to the empty profile."}},"summary":"Descriptive profile for one perp market","tags":["agents"]}},"/api/v1/agents/perps/top-performers":{"get":{"description":"Returns the top N gainers AND top N losers per asset category (crypto, equity, commodity, forex, index, premarket) ranked by 24h % change on Hyperliquid. Aggregates the default DEX plus all USDC-collateralized HIP-3 sub-DEXes. Server-cached for 45s to amortize HL fan-out across all viewers.","operationId":"AgentInstanceController_getPerpsTopPerformers","parameters":[{"name":"perCategory","required":false,"in":"query","description":"Top-N per side per category (1-20, default 5)","schema":{"type":"number"}}],"responses":{"200":{"description":"Top performers per category"}},"summary":"Top movers per asset category for the Manual Trader ticker","tags":["agents"]}},"/api/v1/agents/hyperliquid/top-traders":{"get":{"description":"Returns the top traders on Hyperliquid ranked by 30-day realized PnL. Used by the HL Copy Trader agent template to let users pick a leader to copy without leaving the site.","operationId":"AgentInstanceController_getHyperliquidTopTraders","parameters":[{"name":"limit","required":false,"in":"query","description":"Max number of traders (1-50, default 20)","schema":{"type":"number"}}],"responses":{"200":{"description":"List of top Hyperliquid traders"}},"summary":"Top Hyperliquid traders by 30-day PnL","tags":["agents"]}},"/api/v1/agents/instances":{"post":{"operationId":"AgentInstanceController_createAgent","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAgentDto"}}}},"responses":{"201":{"description":"Agent instance created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentInstanceResponseDto"}}}},"400":{"description":"Invalid request parameters"},"404":{"description":"Template not found"}},"security":[{"bearer":[]}],"summary":"Create a new agent instance","tags":["agents"]},"get":{"operationId":"AgentInstanceController_getInstances","parameters":[{"name":"owner","required":false,"in":"query","description":"Filter by owner address","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","description":"Filter by status (Active, Paused, Closed)","schema":{"enum":["Active","Paused","Closed"],"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"example":1,"type":"number"}},{"name":"take","required":false,"in":"query","description":"Items per page (max 50)","schema":{"example":20,"type":"number"}},{"name":"lite","required":false,"in":"query","description":"Return basic data without enrichment (fast, for initial render)","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns paginated list of agent instances","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentInstanceListResponseDto"}}}},"401":{"description":"A bearer token was sent but rejected; anonymous callers (no token) get the public view"}},"security":[{"bearer":[]}],"summary":"List agent instances with optional filters","tags":["agents"]}},"/api/v1/agents/instances/default-trading-account":{"get":{"operationId":"AgentInstanceController_getDefaultTradingAccount","parameters":[{"name":"create","required":false,"in":"query","description":"Set \"false\" for a read-only lookup that never provisions (returns null if no default exists yet). Defaults to get-or-create.","schema":{"type":"string"}},{"name":"fresh","required":false,"in":"query","description":"Set \"true\" to bypass the 3s HL account cache for the live balance enrichment, so the returned equity reflects a just-completed trade/deposit. Defaults to the cached read.","schema":{"type":"string"}},{"name":"hlAccountKind","required":false,"in":"query","description":"Which account kind to resolve. \"owner_wallet\" asks for a user-signed account whose Hyperliquid account is the caller's own wallet; it is honoured only while MANUAL_PERPS_OWNER_WALLET_ACCOUNTS is fully on, and otherwise resolves the legacy account. Absent or unrecognised means \"agent_wallet\". Read `hlAccountKind` on the response to see which kind you got.","schema":{"enum":["agent_wallet","owner_wallet"],"type":"string"}}],"responses":{"200":{"description":"Returns the resolved default trading account (owner-enriched), or null when create=false and none exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentInstanceResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Get or create the caller default Trading balance account","tags":["agents"]}},"/api/v1/agents/instances/default-outcome-account":{"get":{"operationId":"AgentInstanceController_getDefaultOutcomeAccount","parameters":[{"name":"create","required":false,"in":"query","description":"Set \"false\" for a read-only lookup that never provisions (returns null if no default exists yet). Defaults to get-or-create.","schema":{"type":"string"}},{"name":"fresh","required":false,"in":"query","description":"Set \"true\" to bypass the short outcome-balance cache so the returned equity reflects a just-completed trade/deposit. Defaults to the cached read.","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns the resolved default Prediction account (owner-enriched), or null when create=false and none exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentInstanceResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Get or create the caller default Prediction account","tags":["agents"]}},"/api/v1/agents/instances/{id}":{"get":{"operationId":"AgentInstanceController_getInstanceById","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns agent instance details with recent activity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentInstanceResponseDto"}}}},"404":{"description":"Agent instance not found"}},"security":[{"bearer":[]}],"summary":"Get agent instance by ID","tags":["agents"]}},"/api/v1/agents/instances/{id}/status":{"patch":{"operationId":"AgentInstanceController_updateStatus","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAgentStatusDto"}}}},"responses":{"200":{"description":"Agent status updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentInstanceResponseDto"}}}},"400":{"description":"Invalid status transition"},"404":{"description":"Agent instance not found"}},"security":[{"bearer":[]}],"summary":"Update agent instance status","tags":["agents"]}},"/api/v1/agents/instances/{id}/config":{"patch":{"operationId":"AgentInstanceController_updateConfig","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAgentConfigDto"}}}},"responses":{"200":{"description":"Agent configuration updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentInstanceResponseDto"}}}},"400":{"description":"Invalid configuration or agent is closed"},"404":{"description":"Agent instance not found"}},"security":[{"bearer":[]}],"summary":"Update agent configuration (risk, time horizon, etc.)","tags":["agents"]}},"/api/v1/agents/instances/{id}/investment-settings":{"patch":{"operationId":"AgentInstanceController_updateInvestmentSettings","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateInvestmentSettingsDto"}}}},"responses":{"200":{"description":"Investment settings updated"},"403":{"description":"Not the agent owner"}},"security":[{"bearer":[]}],"summary":"Update investment settings (owner only)","tags":["agents"]}},"/api/v1/agents/instances/{id}/withdraw":{"post":{"operationId":"AgentInstanceController_withdrawFunds","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawFundsDto"}}}},"responses":{"200":{"description":"Withdrawal initiated successfully"},"400":{"description":"Invalid withdrawal request"},"404":{"description":"Agent instance not found"}},"security":[{"bearer":[]}],"summary":"Initiate fund withdrawal from agent","tags":["agents"]}},"/api/v1/agents/instances/{id}/actions":{"get":{"operationId":"AgentInstanceController_getActions","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"example":1,"type":"number"}},{"name":"take","required":false,"in":"query","description":"Items per page","schema":{"example":20,"type":"number"}}],"responses":{"200":{"description":"Returns paginated action log","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentActionListResponseDto"}}}},"404":{"description":"Agent instance not found"}},"security":[{"bearer":[]}],"summary":"Get paginated action log for agent","tags":["agents"]}},"/api/v1/agents/instances/{id}/reasoning-log":{"get":{"operationId":"AgentInstanceController_getReasoningLog","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"take","required":false,"in":"query","schema":{"example":20,"type":"number"}},{"name":"decision","required":false,"in":"query","description":"Filter by decision type (e.g., NO_ACTION, PERPS_LONG)","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns paginated reasoning log"},"403":{"description":"Not the agent owner"}},"security":[{"bearer":[]}],"summary":"Get reasoning decision log for agent (owner only)","tags":["agents"]}},"/api/v1/agents/instances/{id}/positions":{"get":{"operationId":"AgentInstanceController_getAgentPositions","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"enum":["OPEN","CLOSED","LIQUIDATED","all"],"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"string"}},{"name":"take","required":false,"in":"query","description":"Items per page (max 100)","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns paginated perps positions with live mark prices for open positions"},"404":{"description":"Agent instance not found"}},"security":[{"bearer":[]}],"summary":"Get perps positions for an agent","tags":["agents"]}},"/api/v1/agents/instances/{id}/perps/decision-panel":{"get":{"operationId":"AgentInstanceController_getPerpsDecisionPanel","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns decision panel DTO"},"403":{"description":"Caller does not own this agent"}},"security":[{"bearer":[]}],"summary":"Get Hyperliquid perps decision panel for an agent (owner only)","tags":["agents"]}},"/api/v1/agents/instances/{id}/polymarket-positions":{"get":{"operationId":"AgentInstanceController_getAgentPolymarketPositions","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"enum":["OPEN","CLOSED","RESOLVED","CLAIM_PENDING","all"],"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"string"}},{"name":"take","required":false,"in":"query","description":"Items per page (max 100)","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns paginated Polymarket positions"},"404":{"description":"Agent instance not found"}},"security":[{"bearer":[]}],"summary":"Get Polymarket positions for an agent","tags":["agents"]}},"/api/v1/agents/instances/{id}/polymarket/activity":{"get":{"operationId":"AgentInstanceController_getAgentPolymarketActivity","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get owner-only Polymarket activity for an agent","tags":["agents"]}},"/api/v1/agents/{id}/polymarket/activity":{"get":{"operationId":"AgentInstanceController_getAgentPolymarketActivityAlias","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get owner-only Polymarket activity for an agent","tags":["agents"]}},"/api/v1/agents/instances/{id}/close-position":{"post":{"operationId":"AgentInstanceController_closePosition","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns the result of the close-position execution"},"400":{"description":"Agent is not a perps agent"},"403":{"description":"Caller does not own this agent"}},"security":[{"bearer":[]}],"summary":"Close an open perps position for an agent (owner only)","tags":["agents"]}},"/api/v1/agents/instances/{id}/trades":{"get":{"operationId":"AgentInstanceController_getTrades","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"example":1,"type":"number"}},{"name":"take","required":false,"in":"query","description":"Items per page","schema":{"example":20,"type":"number"}},{"name":"filter","required":false,"in":"query","description":"Filter trades: all, winning, losing, open","schema":{"example":"all","type":"string"}}],"responses":{"200":{"description":"Returns paginated trade history with P&L data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeHistoryResponseDto"}}}},"404":{"description":"Agent instance not found"}},"security":[{"bearer":[]}],"summary":"Get trade history with P&L for agent","tags":["agents"]}},"/api/v1/agents/instances/{id}/trades/closed-near":{"get":{"operationId":"AgentInstanceController_getClosedPerpsTradesNear","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"asset","required":true,"in":"query","description":"Hyperliquid asset","schema":{"type":"string"}},{"name":"at","required":true,"in":"query","description":"Fill timestamp in milliseconds","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns nearby closed perps trades","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TradeResponseDto"}}}}},"400":{"description":"Invalid asset or timestamp"},"403":{"description":"Not the agent owner"}},"security":[{"bearer":[]}],"summary":"Find closed perps trades near a fill time (owner only)","tags":["agents"]}},"/api/v1/agents/instances/{id}/strategy":{"get":{"operationId":"AgentInstanceController_getStrategyExplanation","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns human-readable explanation of the agent strategy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StrategyExplanationDto"}}}},"403":{"description":"Not the agent owner"},"404":{"description":"Agent instance not found"}},"security":[{"bearer":[]}],"summary":"Get strategy explanation for agent (owner only)","tags":["agents"]}},"/api/v1/agents/deposit/address":{"get":{"operationId":"AgentInstanceController_getDepositAddress","parameters":[{"name":"agentId","required":false,"in":"query","description":"Agent ID for per-agent deposit address","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns the deposit address where users should send USDC"},"403":{"description":"Agent is private and the requester is not the owner"}},"security":[{"bearer":[]}],"summary":"Get deposit address for funding agents","tags":["agents"]}},"/api/v1/agents/deposit/{agentId}":{"post":{"operationId":"AgentInstanceController_recordDeposit","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"Deposit recorded successfully"},"400":{"description":"Invalid deposit request"},"404":{"description":"Agent not found"}},"security":[{"bearer":[]}],"summary":"Record a deposit for an agent","tags":["agents"]}},"/api/v1/agents/deposit/verify/{txHash}":{"get":{"operationId":"AgentInstanceController_verifyDeposit","parameters":[{"name":"txHash","required":true,"in":"path","description":"Transaction hash to verify","schema":{"type":"string"}},{"name":"chainId","required":false,"in":"query","description":"Chain ID (8453=Base, 42161=Arbitrum). Defaults to Base.","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns verification result"}},"security":[{"bearer":[]}],"summary":"Verify a deposit transaction on-chain","tags":["agents"]}},"/api/v1/agents/metrics/kpi":{"get":{"operationId":"AgentInstanceController_getKpiMetrics","parameters":[],"responses":{"200":{"description":"Returns platform KPI metrics for dashboard"}},"summary":"Get platform KPI metrics","tags":["agents"]}},"/api/v1/agents/instances/{id}/withdrawals":{"get":{"operationId":"AgentInstanceController_getTransactionHistory","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"take","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"Returns paginated transactions (deposits + withdrawals) and summary counts"}},"security":[{"bearer":[]}],"summary":"List transaction history (deposits + withdrawals) for an agent","tags":["agents"]}},"/api/v1/agents/instances/{id}/strategy-config":{"get":{"operationId":"AgentStrategyController_getStrategyConfig","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns the active strategy configuration"}},"security":[{"bearer":[]}],"summary":"Get active V2 strategy config for agent","tags":["agents"]},"put":{"operationId":"AgentStrategyController_updateStrategyConfig","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateStrategyConfigDto"}}}},"responses":{"200":{"description":"New strategy config version created"}},"security":[{"bearer":[]}],"summary":"Update V2 strategy config (creates new version)","tags":["agents"]}},"/api/v1/agents/instances/{id}/strategy-config/history":{"get":{"operationId":"AgentStrategyController_getStrategyConfigHistory","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"take","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get version history of strategy configs","tags":["agents"]}},"/api/v1/agents/instances/{id}/strategy-config/{version}/activate":{"post":{"operationId":"AgentStrategyController_activateStrategyConfigVersion","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"version","required":true,"in":"path","description":"Config version number to activate","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Activate a specific strategy config version","tags":["agents"]}},"/api/v1/agents/instances/{id}/strategy-config/edit":{"post":{"operationId":"AgentStrategyController_editStrategyConfigNL","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Edit strategy config via natural language instruction","tags":["agents"]}},"/api/v1/agents/instances/{id}/strategy-config/templates":{"get":{"operationId":"AgentStrategyController_getStrategyTemplates","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List available strategy templates","tags":["agents"]}},"/api/v1/agents/instances/{id}/performance":{"get":{"operationId":"AgentStrategyController_getPerformanceMetrics","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"periodDays","required":false,"in":"query","description":"Lookback period in days (default 30)","schema":{"type":"number"}}],"responses":{"200":{"description":"Returns computed performance metrics (Sharpe, Sortino, win rate, etc.)"},"403":{"description":"Caller does not own this agent"},"404":{"description":"Agent instance not found"}},"security":[{"bearer":[]}],"summary":"Get perps trading performance metrics for an agent","tags":["agents"]}},"/api/v1/agents/instances/{id}/risk-reset":{"post":{"operationId":"AgentStrategyController_resetRiskState","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"Kill-switch latch cleared"},"400":{"description":"No active kill switch, or not a perps agent"},"403":{"description":"Caller does not own this agent"}},"security":[{"bearer":[]}],"summary":"Reset kill-switch latch so the agent can trade again (does NOT bypass circuit-breaker cooldowns)","tags":["agents"]}},"/api/v1/agents/instances/{id}/insights":{"get":{"operationId":"AgentMemoryController_getInsights","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"take","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"Returns active semantic insights ordered by confidence"},"403":{"description":"Not the agent owner"}},"security":[{"bearer":[]}],"summary":"Get active semantic insights for an agent (owner only)","tags":["agents"]}},"/api/v1/agents/instances/{id}/episodes":{"get":{"operationId":"AgentMemoryController_getEpisodes","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"take","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"Returns paginated trade episode summaries"},"403":{"description":"Not the agent owner"}},"security":[{"bearer":[]}],"summary":"Get trade episode summaries for an agent (owner only)","tags":["agents"]}},"/api/v1/agents/instances/{id}/insights/{insightId}":{"delete":{"operationId":"AgentMemoryController_dismissInsight","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"insightId","required":true,"in":"path","description":"Insight UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"Insight dismissed successfully"},"403":{"description":"Not the agent owner"},"404":{"description":"Insight not found"}},"security":[{"bearer":[]}],"summary":"Dismiss a semantic insight (owner only)","tags":["agents"]}},"/api/v1/agents/x402/status":{"get":{"operationId":"AgentPaymentController_getX402Status","parameters":[],"responses":{"200":{"description":"Returns x402 service status and configuration"}},"summary":"Get x402 payment service status","tags":["agents"]}},"/api/v1/agents/x402/supported":{"get":{"operationId":"AgentPaymentController_getX402Supported","parameters":[],"responses":{"200":{"description":"Returns supported networks with their tokens and addresses"}},"summary":"Get supported networks and tokens for x402 payments","tags":["agents"]}},"/api/v1/agents/x402/payments/{entityId}":{"get":{"operationId":"AgentPaymentController_getX402PaymentHistory","parameters":[{"name":"entityId","required":true,"in":"path","description":"User address or agent ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns payment history"}},"security":[{"bearer":[]}],"summary":"Get payment history for an entity (user or agent)","tags":["agents"]}},"/api/v1/agents/x402/verify/{paymentId}":{"get":{"operationId":"AgentPaymentController_verifyX402Payment","parameters":[{"name":"paymentId","required":true,"in":"path","description":"Payment ID to verify","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns payment verification result"}},"security":[{"bearer":[]}],"summary":"Verify a payment by ID","tags":["agents"]}},"/api/v1/agents/setup-fee/status/{agentId}":{"get":{"operationId":"AgentPaymentController_getSetupFeeStatus","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns setup fee status for the agent"}},"security":[{"bearer":[]}],"summary":"Get setup fee status for an agent","tags":["agents"]}},"/api/v1/agents/setup-fee/pay":{"post":{"operationId":"AgentPaymentController_paySetupFee","parameters":[],"responses":{"200":{"description":"Setup fee payment result"},"400":{"description":"Invalid request or agent not found"}},"security":[{"bearer":[]}],"summary":"Pay setup fee for agent activation (1 USDC)","tags":["agents"]}},"/api/v1/agents/setup-fee/info":{"get":{"operationId":"AgentPaymentController_getSetupFeeInfo","parameters":[],"responses":{"200":{"description":"Returns setup fee amount and policy"}},"summary":"Get setup fee information","tags":["agents"]}},"/api/v1/agents/instances/{id}/gas-balance":{"get":{"operationId":"AgentGasController_getGasBalance","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns ETH gas balance, estimated trades remaining, and agent status"},"404":{"description":"Agent instance not found"}},"security":[{"bearer":[]}],"summary":"Get ETH gas balance and estimated trades remaining for agent","tags":["agents"]}},"/api/v1/agents/instances/{id}/gas-topup-target":{"get":{"operationId":"AgentGasController_getGasTopupTarget","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get the next gas chain that needs a top-up for an agent — used by FE to set MetaMask chainId before signing","tags":["agents"]}},"/api/v1/agents/gas-deposit/{agentId}":{"post":{"operationId":"AgentGasController_recordGasDeposit","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"Gas deposit recorded. Agent auto-resumed if it was paused for low gas."},"400":{"description":"Invalid request or transaction verification failed"},"404":{"description":"Agent not found"}},"security":[{"bearer":[]}],"summary":"Record an ETH gas deposit for an agent Privy wallet","tags":["agents"]}},"/api/v1/agents/instances/{id}/fee-reserve":{"get":{"operationId":"AgentGasController_getFeeReserve","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get legacy per-trade-fee reserve readiness for deploy compatibility","tags":["agents"]}},"/api/v1/agents/gas-info":{"get":{"operationId":"AgentGasController_getGasInfo","parameters":[],"responses":{"200":{"description":"Returns ETH gas thresholds and average cost per trade"}},"summary":"Get gas threshold constants and average cost per trade","tags":["agents"]}},"/api/v1/public/agents/leaderboard":{"get":{"operationId":"PublicAgentController_getLeaderboard","parameters":[{"name":"timeframe","required":false,"in":"query","description":"Timeframe filter: 7d, 30d, all","schema":{"example":"30d","type":"string"}},{"name":"category","required":false,"in":"query","description":"Category filter","schema":{"enum":["DEGEN","CONSERVATIVE","MEME_COINS","BLUE_CHIPS"],"type":"string"}},{"name":"search","required":false,"in":"query","description":"Search by agent name or creator Twitter handle","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"example":20,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Sort order: roi (default) or aum","schema":{"enum":["roi","aum"],"type":"string"}}],"responses":{"200":{"description":"Returns leaderboard with trending agents"}},"summary":"Get agent leaderboard with filters","tags":["public-agents"]}},"/api/v1/public/agents/new":{"get":{"operationId":"PublicAgentController_getNewAgents","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"example":20,"type":"number"}}],"responses":{"200":{"description":"Returns paginated list of new agents"}},"summary":"Get new agents with pagination","tags":["public-agents"]}},"/api/v1/public/agents/{id}/pnl":{"get":{"operationId":"PublicAgentController_getAgentPnl","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID","schema":{"type":"string"}},{"name":"timeframe","required":false,"in":"query","description":"Timeframe filter: 7d, 30d, all","schema":{"example":"30d","type":"string"}}],"responses":{"200":{"description":"Returns PnL history data points"},"404":{"description":"Agent not found or not public"}},"summary":"Get agent PnL history for chart rendering","tags":["public-agents"]}},"/api/v1/public/agents/{id}/trades":{"get":{"operationId":"PublicAgentController_getPublicTrades","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID or slug","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"take","required":false,"in":"query","schema":{"example":20,"type":"number"}},{"name":"filter","required":false,"in":"query","description":"Filter: all, winning, losing, open","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns paginated trades"},"404":{"description":"Agent not found or not public"}},"security":[{"bearer":[]}],"summary":"Get public trade history for an agent","tags":["public-agents"]}},"/api/v1/public/agents/{id}/positions":{"get":{"operationId":"PublicAgentController_getPublicPositions","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID or slug","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","description":"Filter: all, OPEN, CLOSED","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"take","required":false,"in":"query","schema":{"example":20,"type":"number"}}],"responses":{"200":{"description":"Returns paginated positions"},"404":{"description":"Agent not found or not public"}},"security":[{"bearer":[]}],"summary":"Get public perps positions for an agent","tags":["public-agents"]}},"/api/v1/public/wallets/{address}/perps-positions":{"get":{"operationId":"PublicAgentController_getWalletOpenPerpsPositions","parameters":[{"name":"address","required":true,"in":"path","description":"Owner wallet address (0x...)","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns open perps positions"},"400":{"description":"Invalid wallet address"}},"security":[{"bearer":[]}],"summary":"Get open perps positions for a wallet (all its agents)","tags":["public-agents"]}},"/api/v1/public/agents/{id}/polymarket-positions":{"get":{"operationId":"PublicAgentController_getPublicPolymarketPositions","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID or slug","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","description":"Filter: all, OPEN, CLOSED, RESOLVED","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"take","required":false,"in":"query","schema":{"example":20,"type":"number"}}],"responses":{"200":{"description":"Returns paginated Polymarket positions"},"404":{"description":"Agent not found or not public"}},"security":[{"bearer":[]}],"summary":"Get public Polymarket positions for an agent","tags":["public-agents"]}},"/api/v1/public/agents/{id}/performance":{"get":{"operationId":"PublicAgentController_getPublicPerformanceMetrics","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID","schema":{"type":"string"}},{"name":"periodDays","required":false,"in":"query","description":"Lookback period in days (default 30)","schema":{"type":"number"}}],"responses":{"200":{"description":"Returns computed performance metrics (Sharpe, Sortino, win rate, etc.)"},"404":{"description":"Agent not found or not public"}},"summary":"Get trading performance metrics for a perps agent","tags":["public-agents"]}},"/api/v1/public/agents/{id}/rank":{"get":{"operationId":"PublicAgentController_getAgentRank","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns rank and total"},"404":{"description":"Agent not found or not public"}},"summary":"Get agent leaderboard rank by ROI","tags":["public-agents"]}},"/api/v1/public/agents/{id}/owner-fees":{"get":{"operationId":"PublicAgentController_getOwnerFeeSummary","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID or slug","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns fee summary"},"403":{"description":"Not the agent owner"},"404":{"description":"Agent not found or not perps"}},"security":[{"bearer":[]}],"summary":"Owner-only real fees + net PnL for a perps agent","tags":["public-agents"]}},"/api/v1/public/agents/{id}/hl-spot-balances":{"get":{"operationId":"PublicAgentController_getOwnerHlSpotBalances","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID or slug","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns per-coin HL spot balances"},"403":{"description":"Not the agent owner"},"404":{"description":"Agent not found or not an HL agent"}},"security":[{"bearer":[]}],"summary":"Owner-only live Hyperliquid spot balances for an HL agent","tags":["public-agents"]}},"/api/v1/public/agents/{id}/debug":{"get":{"operationId":"PublicAgentController_debugAgent","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Debug agent execution readiness","tags":["public-agents"]}},"/api/v1/public/hl-leader/status":{"get":{"operationId":"PublicAgentController_getHlLeaderStatus","parameters":[{"name":"address","required":true,"in":"query","description":"0x-prefixed HL wallet address","schema":{"example":"0x99b3ba1c1b7ad83d0164d996e3d271ae8c842551","type":"string"}}],"responses":{"200":{"description":"Returns leader activity + account value"},"400":{"description":"Invalid address"},"401":{"description":"Missing or invalid Privy session"}},"security":[{"bearer":[]}],"summary":"Check HL leader activity status (for HL Copy Trader agent creation)","tags":["public-agents"]}},"/api/v1/public/agents/{slug}":{"get":{"operationId":"PublicAgentController_getPublicAgentBySlug","parameters":[{"name":"slug","required":true,"in":"path","description":"Agent URL slug (e.g., alpha-eth-bot)","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns public agent profile with stats"},"404":{"description":"Agent not found or not public"}},"summary":"Get public agent profile by slug","tags":["public-agents"]}},"/api/v1/agents/feed":{"get":{"operationId":"PublicAgentController_getFeed","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"example":20,"type":"number"}}],"responses":{"200":{"description":"Returns recent actions from followed agents"}},"security":[{"bearer":[]}],"summary":"Get feed from followed agents","tags":["public-agents"]}},"/api/v1/agents/my-investments":{"get":{"operationId":"PublicAgentController_getMyInvestments","parameters":[{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":20,"type":"number"}}],"responses":{"200":{"description":"Returns paginated investments"}},"security":[{"bearer":[]}],"summary":"Get all investments for the authenticated user","tags":["public-agents"]}},"/api/v1/agents/{id}/invest":{"post":{"operationId":"PublicAgentController_investInAgent","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvestInAgentDto"}}}},"responses":{"200":{"description":"Investment recorded"},"400":{"description":"Validation failed"}},"security":[{"bearer":[]}],"summary":"Invest USDC into an agent","tags":["public-agents"]}},"/api/v1/agents/{id}/investor-withdraw":{"post":{"operationId":"PublicAgentController_investorWithdraw","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvestorWithdrawDto"}}}},"responses":{"200":{"description":"Withdrawal request created"},"400":{"description":"Validation failed"}},"security":[{"bearer":[]}],"summary":"Request withdrawal as an investor","tags":["public-agents"]}},"/api/v1/agents/{id}/follow":{"get":{"operationId":"PublicAgentController_getFollowStatus","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns follow status"}},"security":[{"bearer":[]}],"summary":"Check if user follows an agent","tags":["public-agents"]},"post":{"operationId":"PublicAgentController_followAgent","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID to follow","schema":{"type":"string"}}],"responses":{"200":{"description":"Follow status"},"404":{"description":"Agent not found"}},"security":[{"bearer":[]}],"summary":"Follow an agent","tags":["public-agents"]},"delete":{"operationId":"PublicAgentController_unfollowAgent","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID to unfollow","schema":{"type":"string"}}],"responses":{"200":{"description":"Unfollow status"},"404":{"description":"Agent not found"}},"security":[{"bearer":[]}],"summary":"Unfollow an agent","tags":["public-agents"]}},"/api/v1/agents/check-name":{"get":{"operationId":"PublicAgentController_checkNameAvailable","parameters":[{"name":"name","required":true,"in":"query","description":"Agent name to check","schema":{"type":"string"}}],"responses":{"200":{"description":"Name availability result"}},"summary":"Check agent name availability","tags":["public-agents"]}},"/api/v1/agents/{id}/fork-quote":{"get":{"operationId":"PublicAgentController_issueForkQuote","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID to quote for forking","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Issue a fork quote","tags":["public-agents"]}},"/api/v1/agents/{id}/fork-payment":{"post":{"operationId":"PublicAgentController_recordForkPayment","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID the payment quote applies to","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordForkPaymentDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Record a verified premium fork payment","tags":["public-agents"]}},"/api/v1/agents/{id}/fork-entitlement":{"get":{"operationId":"PublicAgentController_getForkEntitlement","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID to recover a payment for","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get an unused premium fork payment","tags":["public-agents"]}},"/api/v1/agents/{id}/fork":{"post":{"operationId":"PublicAgentController_forkAgent","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID to fork","schema":{"type":"string"}}],"responses":{"201":{"description":"Agent forked successfully"},"400":{"description":"Cannot fork own agent"},"404":{"description":"Source agent not found or not public"}},"security":[{"bearer":[]}],"summary":"Fork an agent","tags":["public-agents"]}},"/api/v1/agents/{id}/clone":{"post":{"operationId":"PublicAgentController_cloneAgent","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID to clone","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloneAgentRequestDto"}}}},"responses":{"201":{"description":"Agent cloned successfully"},"403":{"description":"Can only clone your own agent"},"404":{"description":"Source agent not found"}},"security":[{"bearer":[]}],"summary":"Clone your own agent","tags":["public-agents"]}},"/api/v1/agents/{id}/withdraw":{"post":{"operationId":"PublicAgentController_withdrawFromAgent","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Withdrawal parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawFromAgentDto"}}}},"responses":{"200":{"description":"Withdrawal initiated successfully"},"400":{"description":"Agent has no server wallet or invalid withdrawal request"},"403":{"description":"User does not own this agent"},"404":{"description":"Agent not found"}},"security":[{"bearer":[]}],"summary":"Withdraw funds from agent server wallet to owner","tags":["public-agents"]}},"/api/v1/mobile/agents/instances":{"post":{"operationId":"MobileAgentController_createMobileAgent","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAgentDto"}}}},"responses":{"201":{"description":"Agent instance created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentInstanceResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Create a mobile MVP Hyperliquid agent without setup fee.","tags":["mobile-agents"]}},"/api/v1/mobile/agents/instances/copy":{"post":{"operationId":"MobileAgentController_copyMobileAgent","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopyMobileAgentDto"}}}},"responses":{"201":{"description":"Copied agent instance created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentInstanceResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Copy a public mobile MVP Hyperliquid agent without setup fee.","tags":["mobile-agents"]}},"/api/v1/agent-api/quote":{"get":{"operationId":"AgentApiQuotesController_getQuote","parameters":[{"name":"tokenIn","required":true,"in":"query","description":"Input token address","schema":{"example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","type":"string"}},{"name":"tokenOut","required":true,"in":"query","description":"Output token address","schema":{"example":"0x4200000000000000000000000000000000000006","type":"string"}},{"name":"amountIn","required":true,"in":"query","description":"Input amount in smallest units (wei)","schema":{"example":"1000000","type":"string"}},{"name":"chainId","required":true,"in":"query","description":"Chain ID (8453 Base, 42161 Arbitrum)","schema":{"example":8453,"type":"number"}},{"name":"slippageBps","required":false,"in":"query","description":"Slippage tolerance in basis points (0-5000)","schema":{"example":50,"type":"number"}},{"name":"X-API-Key","in":"header","description":"Wallet-bound MCP API key (format: bt365_...) for sponsored access","schema":{"type":"string"}}],"responses":{"200":{"description":"Quote generated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteResponseDto"}}}},"429":{"description":"Sponsored daily allowance used up"},"503":{"description":"Paid access unavailable without a sponsored MCP API key"}},"summary":"Get swap quote (sponsored, MCP API key)","tags":["Agent API"]}},"/api/v1/agent-api/swap":{"post":{"operationId":"AgentApiQuotesController_buildSwap","parameters":[{"name":"X-API-Key","in":"header","description":"Wallet-bound MCP API key (format: bt365_...) for sponsored access","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapRequestDto"}}}},"responses":{"200":{"description":"Unsigned transaction built","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSwapResponseDto"}}}},"429":{"description":"Sponsored daily allowance used up"},"503":{"description":"Paid access unavailable without a sponsored MCP API key"}},"summary":"Build unsigned swap transaction (sponsored, MCP API key)","tags":["Agent API"]}},"/api/v1/agent-api/swap/execute":{"post":{"description":"Execute a token swap using your MCP server wallet. The server handles:\n- Route finding across DEXes (Uniswap V2/V3/V4, Aerodrome)\n- Token approvals\n- Transaction signing and submission\n- Automatic points indexing for leaderboard\n\n**Prerequisites:**\n1. Generate an API key via POST /agent-api/mcp/keys\n2. Fund your server wallet with ETH (for gas) and tokens\n\n**Common Errors:**\n- 400: Insufficient balance - fund your server wallet first\n- 404: No route found - token pair has no liquidity\n- 401: Invalid API key","operationId":"AgentApiQuotesController_executeSwap","parameters":[{"name":"X-API-Key","in":"header","description":"MCP API key (format: bt365_...)","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapExecuteRequestDto"}}}},"responses":{"200":{"description":"Swap executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapExecuteResponseDto"}}}},"400":{"description":"Bad request - insufficient balance or invalid parameters"},"401":{"description":"Unauthorized - invalid or missing API key"},"404":{"description":"No swap route found for token pair"}},"summary":"Execute swap via server wallet (RECOMMENDED FOR BOTS)","tags":["Agent API"]}},"/api/v1/agent-api/mcp/balance":{"get":{"operationId":"AgentApiQuotesController_getMcpBalance","parameters":[{"name":"chainId","required":true,"in":"query","schema":{"type":"string"}},{"name":"X-API-Key","in":"header","description":"MCP API key","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get server wallet balances (requires API key)","tags":["Agent API"]}},"/api/v1/agent-api/mcp/wallet":{"get":{"operationId":"AgentApiQuotesController_getMcpWallet","parameters":[{"name":"X-API-Key","in":"header","description":"MCP API key","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get server wallet address for deposits (requires API key)","tags":["Agent API"]}},"/api/v1/agent-api/tokens/launch":{"post":{"description":"Deploy a new token on Base via the BT365 TokenFactory.\n\n**Access:** Sponsored calls only, with a wallet-bound MCP API key in the X-API-Key header, within a daily allowance per wallet. Pay-per-call (x402) is currently unavailable.\nSend ETH to the deployer address for gas + optional LP creation.\n\n**Features:**\n- Fair launch with trading delay\n- Anti-snipe protection (max buy limits)\n- Transfer fees (0-5%) with custom recipients\n- Auto LP creation on Aerodrome\n- Token distribution to Twitter handles\n\n**Example Request:**\n```json\n{\n  \"name\": \"My Token\",\n  \"symbol\": \"MTK\",\n  \"initialSupply\": \"1000000000000000000000000\",\n  \"ownerAddress\": \"0x...\",\n  \"delayMinutes\": 60,\n  \"maxBuyPercent\": 1,\n  \"autoCreateLp\": true,\n  \"lpPercent\": 20,\n  \"ethPaymentTxHash\": \"0x...\",\n  \"distributions\": [\n    { \"handle\": \"alice\", \"percentage\": 5 },\n    { \"handle\": \"bob\", \"percentage\": 3 }\n  ]\n}\n```","operationId":"AgentApiQuotesController_launchToken","parameters":[{"name":"X-API-Key","in":"header","description":"Wallet-bound MCP API key (format: bt365_...) for sponsored access","schema":{"type":"string"}}],"responses":{"201":{"description":"Token launched successfully"},"400":{"description":"Invalid parameters"},"429":{"description":"Sponsored daily allowance used up"},"503":{"description":"Paid access unavailable without a sponsored MCP API key"}},"summary":"Launch a new token (sponsored, MCP API key)","tags":["Agent API"]}},"/api/v1/agent-api/tokens/recent":{"get":{"operationId":"AgentApiQuotesController_getRecentTokens","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Recent tokens retrieved"}},"summary":"Get recently launched tokens (FREE)","tags":["Agent API"]}},"/api/v1/agent-api/tokens/deployer":{"get":{"operationId":"AgentApiQuotesController_getTokenDeployer","parameters":[],"responses":{"200":{"description":"Deployer address retrieved"}},"summary":"Get deployer address for ETH payments (FREE)","tags":["Agent API"]}},"/api/v1/agent-api/tokens/{id}/distributions":{"get":{"operationId":"AgentApiQuotesController_getTokenDistributions","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Agent API"]}},"/api/v1/agent-api/orders":{"post":{"operationId":"AgentApiQuotesController_createOrderViaApiKey","parameters":[{"name":"X-API-Key","in":"header","description":"MCP API key (format: bt365_...)","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAdvancedOrderDto"}}}},"responses":{"201":{"description":"Order created"},"400":{"description":"Invalid parameters"},"401":{"description":"Unauthorized - invalid or missing API key"}},"summary":"Create an advanced order via API key (Limit, Stop-Loss, TWAP, DCA)","tags":["Agent API"]},"get":{"operationId":"AgentApiQuotesController_getOrdersViaApiKey","parameters":[{"name":"status","required":false,"in":"query","description":"Filter by status: CREATED, FUNDED, PENDING, EXECUTED, CANCELLED, EXPIRED","schema":{"type":"string"}},{"name":"X-API-Key","in":"header","description":"MCP API key (format: bt365_...)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Orders retrieved"},"401":{"description":"Unauthorized - invalid or missing API key"}},"summary":"Get advanced orders for your server wallet (requires API key)","tags":["Agent API"]}},"/api/v1/agent-api/orders/{orderId}/cancel":{"post":{"operationId":"AgentApiQuotesController_cancelOrderViaApiKey","parameters":[{"name":"orderId","required":true,"in":"path","description":"Order UUID to cancel","schema":{"type":"string"}},{"name":"X-API-Key","in":"header","description":"MCP API key (format: bt365_...)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Order cancelled"},"400":{"description":"Order cannot be cancelled"},"401":{"description":"Unauthorized - invalid or missing API key"}},"summary":"Cancel an advanced order via API key","tags":["Agent API"]}},"/api/v1/agent-api/reputation/leaderboard":{"get":{"operationId":"AgentApiReputationController_getPageRankLeaderboard","parameters":[{"name":"limit","required":false,"in":"query","description":"Number of agents to return (default 20, max 100)","schema":{"type":"string"}}],"responses":{"200":{"description":"PageRank leaderboard retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageRankLeaderboardDto"}}}}},"summary":"Get PageRank reputation leaderboard (FREE)","tags":["Agent API"]}},"/api/v1/agent-api/reputation/{agentAddress}":{"get":{"operationId":"AgentApiReputationController_getReputation","parameters":[{"name":"agentAddress","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Reputation retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentReputationResponseDto"}}}}},"summary":"Get agent reputation (FREE)","tags":["Agent API"]}},"/api/v1/agent-api/attestations":{"post":{"operationId":"AgentApiReputationController_submitAttestation","parameters":[{"name":"X-API-Key","in":"header","description":"MCP API key (format: bt365_...)","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitAttestationDto"}}}},"responses":{"200":{"description":"Attestation submitted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttestationResponseDto"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Unauthorized - invalid or missing API key"}},"summary":"Submit an attestation to another agent (requires API key)","tags":["Agent API"]}},"/api/v1/agent-api/attestations/{toAddress}":{"delete":{"operationId":"AgentApiReputationController_revokeAttestation","parameters":[{"name":"toAddress","required":true,"in":"path","description":"Target agent address to revoke attestation for","schema":{"type":"string"}},{"name":"X-API-Key","in":"header","description":"MCP API key (format: bt365_...)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Attestation revoked"},"401":{"description":"Unauthorized - invalid or missing API key"},"404":{"description":"Attestation not found"}},"summary":"Revoke an attestation to another agent (requires API key)","tags":["Agent API"]}},"/api/v1/agent-api/attestations/{agentAddress}":{"get":{"operationId":"AgentApiReputationController_getAttestationsFor","parameters":[{"name":"agentAddress","required":true,"in":"path","description":"Agent address to get attestations for","schema":{"type":"string"}}],"responses":{"200":{"description":"Attestations retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttestationListResponseDto"}}}}},"summary":"Get incoming attestations for an agent (FREE)","tags":["Agent API"]}},"/api/v1/agent-api/register-reputation":{"post":{"operationId":"AgentApiReputationController_registerAgent","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterAgentDto"}}}},"responses":{"200":{"description":"Agent registered","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterAgentResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Register agent on ERC-8004 registry (requires Privy auth)","tags":["Agent API"]}},"/api/v1/agent-api/reputation/feedback":{"post":{"operationId":"AgentApiReputationController_submitFeedback","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReputationFeedbackDto"}}}},"responses":{"200":{"description":"Feedback submitted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Submit reputation feedback (requires Privy auth)","tags":["Agent API"]}},"/.well-known/agent.json":{"get":{"operationId":"AgentApiAgentsController_getAgentDiscovery","parameters":[],"responses":{"200":{"description":"Agent discovery document"}},"summary":"ERC-8004 Agent Discovery Document","tags":["Agent API"]}},"/.well-known/ai-plugin.json":{"get":{"operationId":"AgentApiAgentsController_getAiPluginManifest","parameters":[],"responses":{"200":{"description":"AI plugin manifest"}},"summary":"OpenAI Plugin Manifest","tags":["Agent API"]}},"/api/v1/agent-api/templates":{"get":{"description":"Returns all active agent templates with their allowed parameters.","operationId":"AgentApiAgentsController_getTemplates","parameters":[],"responses":{"200":{"description":"Templates retrieved successfully"}},"summary":"List available agent templates (FREE)","tags":["Agent API"]}},"/api/v1/agent-api/agents":{"post":{"description":"Create a new trading agent programmatically.\n\n**Access:** Sponsored calls only, with a wallet-bound MCP API key in the X-API-Key header, within a daily allowance per wallet. Pay-per-call (x402) is currently unavailable.\n\n**Available Templates:**\n- PERPS_TRADER_V1 - Hyperliquid perps, AI-driven directional trading\n- PERPS_SCALPER_V1 - Hyperliquid perps, short-horizon scalper\n- PERPS_MOMENTUM_V1 - Hyperliquid perps, momentum/trend-following\n- HIP3_FLOW_SCALPER_V1 - HIP-3 TradFi flow scalper (CL, GOLD, NATGAS, equities)\n- HL_OUTCOME_TRADER_V1 - Hyperliquid outcome (event/prediction) markets\n- HL_OUTCOME_FV_TRADER_V1 - Outcome markets with fair-value model\nPolymarket templates are blocked from this endpoint — use the browser create flow.\nProgrammatic perps agents default to Hyperliquid. HL_OUTCOME_TRADER_V1 is created in AnalyticsOnly mode.\n\n**Example Request:**\n```json\n{\n  \"templateType\": \"PERPS_TRADER_V1\",\n  \"riskAppetite\": \"moderate\",\n  \"timeHorizon\": \"medium_term\",\n  \"ownerAddress\": \"0x...\",\n  \"name\": \"My HL Perps Bot\"\n}\n```","operationId":"AgentApiAgentsController_createAgent","parameters":[{"name":"X-API-Key","in":"header","description":"Wallet-bound MCP API key (format: bt365_...) for sponsored access","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProgrammaticAgentCreateDto"}}}},"responses":{"201":{"description":"Agent created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProgrammaticAgentResponseDto"}}}},"400":{"description":"Invalid parameters"},"429":{"description":"Sponsored daily allowance used up"},"503":{"description":"Paid access unavailable without a sponsored MCP API key"}},"summary":"Create a new trading agent (sponsored, MCP API key)","tags":["Agent API"]},"get":{"description":"Discover trading agents on BT365. Returns top performers, trending agents, and new agents.\n\n**Use cases for external AI agents:**\n- Find successful strategies to learn from or fork\n- Identify trending agents in specific categories\n- Discover new agents with high potential\n\n**Query parameters:**\n- timeframe: '7d', '30d', or 'all' (default: 'all')\n- category: filter by agent category\n- search: search by name or creator\n- page: page number (default: 1)\n- limit: results per page (max 100, default: 20)","operationId":"AgentApiAgentsController_listAgents","parameters":[{"name":"timeframe","required":true,"in":"query","schema":{"type":"string"}},{"name":"category","required":true,"in":"query","schema":{"type":"string"}},{"name":"search","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Agent list retrieved"}},"summary":"List trading agents (FREE)","tags":["Agent API"]}},"/api/v1/agent-api/agents/{id}":{"get":{"description":"Retrieve details and current status of a trading agent by ID.","operationId":"AgentApiAgentsController_getAgentStatus","parameters":[{"name":"id","required":true,"in":"path","description":"Agent UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"Agent details retrieved"},"404":{"description":"Agent not found"}},"summary":"Get agent status and details (FREE)","tags":["Agent API"]}},"/api/v1/agent-api/mcp/keys":{"post":{"operationId":"AgentApiAgentsController_generateApiKey","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Generate a new MCP API key","tags":["Agent API"]},"get":{"operationId":"AgentApiAgentsController_listApiKeys","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List your MCP API keys","tags":["Agent API"]}},"/api/v1/agent-api/mcp/keys/{id}":{"delete":{"operationId":"AgentApiAgentsController_revokeApiKey","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Revoke an MCP API key","tags":["Agent API"]}},"/api/v1/agent-api/quickstart":{"post":{"description":"Register a new agent, generate an API key, and optionally register on ERC-8004 in a single call.\nReturns everything needed to start trading immediately: API key, wallet address, and endpoint URLs.\n\n**Rate limited to 3 requests per day.**","operationId":"AgentApiAgentsController_quickstart","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuickstartDto"}}}},"responses":{"201":{"description":"Agent quickstarted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuickstartResponseDto"}}}},"400":{"description":"Invalid parameters"},"429":{"description":"Rate limit exceeded (max 3/day)"}},"security":[{"bearer":[]}],"summary":"One-command agent registration and API key generation","tags":["Agent API"]}},"/api/v1/agent-api/mcp/quickstart":{"post":{"description":"Same as /agent-api/quickstart but authenticated via MCP API key instead of Privy.","operationId":"AgentApiAgentsController_mcpQuickstart","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuickstartDto"}}}},"responses":{"201":{"description":"Agent quickstarted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuickstartResponseDto"}}}},"401":{"description":"Invalid or missing API key"}},"summary":"One-command agent registration via MCP API key","tags":["Agent API"]}},"/api/v1/agent-api/register":{"post":{"description":"Agents sign a message proving wallet ownership and receive an API key. No OAuth or Privy required. The API key is returned only once — store it securely.","operationId":"AgentApiAgentsController_register","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterAgentApiDto"}}}},"responses":{"201":{"description":"Agent registered successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterAgentApiResponseDto"}}}},"400":{"description":"Invalid signature, expired timestamp, or malformed request"},"409":{"description":"Wallet already registered"},"429":{"description":"Rate limit exceeded"}},"summary":"Register an external agent via wallet signature","tags":["Agent API"]}},"/api/v1/agent-api/points/{wallet}":{"get":{"operationId":"AgentApiLeaderboardController_getPoints","parameters":[{"name":"wallet","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Points retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PointsResponseDto"}}}},"503":{"description":"Paid access currently unavailable"}},"summary":"Get points for wallet (paid; currently unavailable)","tags":["Agent API"]}},"/api/v1/agent-api/leaderboard":{"get":{"operationId":"AgentApiLeaderboardController_getLeaderboard","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Leaderboard retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaderboardResponseDto"}}}}},"summary":"Get points leaderboard (FREE)","tags":["Agent API"]}},"/api/v1/agent-api/index-swap":{"post":{"description":"Index a completed swap transaction for points.\n\nSend the swap txHash — the server fetches the receipt and derives the\nwallet, tokens, amounts, and USD volume directly from on-chain Transfer\nevents. Points are always credited to the transaction signer\n(`receipt.from`). Submitted body fields other than `swapTxHash` and\n`chainId` are ignored.\n\n```json\n{ \"swapTxHash\": \"0x...\", \"chainId\": 8453 }\n```","operationId":"AgentApiLeaderboardController_indexSwap","parameters":[],"responses":{"200":{"description":""}},"summary":"Index a completed swap for points (FREE)","tags":["Agent API"]}},"/api/v1/developer/keys":{"post":{"operationId":"DeveloperController_createApiKey","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyDto"}}}},"responses":{"201":{"description":"API key created successfully. The key is only shown once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreatedResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Create a new API key","tags":["Developer"]},"get":{"operationId":"DeveloperController_listApiKeys","parameters":[],"responses":{"200":{"description":"List of API keys","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApiKeyResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"List all API keys","tags":["Developer"]}},"/api/v1/developer/keys/{id}":{"get":{"operationId":"DeveloperController_getApiKey","parameters":[{"name":"id","required":true,"in":"path","description":"API key ID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Get API key details","tags":["Developer"]},"delete":{"operationId":"DeveloperController_revokeApiKey","parameters":[{"name":"id","required":true,"in":"path","description":"API key ID","schema":{"type":"string"}}],"responses":{"204":{"description":"API key revoked"}},"security":[{"bearer":[]}],"summary":"Revoke an API key","tags":["Developer"]}},"/api/v1/developer/keys/{id}/usage":{"get":{"operationId":"DeveloperController_getApiKeyUsage","parameters":[{"name":"id","required":true,"in":"path","description":"API key ID","schema":{"type":"string"}},{"name":"since","required":false,"in":"query","description":"Start date (ISO 8601)","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get API key usage statistics","tags":["Developer"]}},"/api/v1/developer/keys/{id}/webhooks":{"post":{"operationId":"DeveloperController_createWebhook","parameters":[{"name":"id","required":true,"in":"path","description":"API key ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookDto"}}}},"responses":{"201":{"description":"Webhook created"}},"security":[{"bearer":[]}],"summary":"Create a webhook subscription","tags":["Developer"]},"get":{"operationId":"DeveloperController_listWebhooks","parameters":[{"name":"id","required":true,"in":"path","description":"API key ID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List webhooks for an API key","tags":["Developer"]}},"/api/v1/developer/keys/{id}/webhooks/{webhookId}":{"delete":{"operationId":"DeveloperController_deleteWebhook","parameters":[{"name":"id","required":true,"in":"path","description":"API key ID","schema":{"type":"string"}},{"name":"webhookId","required":true,"in":"path","description":"Webhook ID","schema":{"type":"string"}}],"responses":{"204":{"description":"Webhook deleted"}},"security":[{"bearer":[]}],"summary":"Delete a webhook","tags":["Developer"]}},"/api/v1/polymarket/tos":{"get":{"operationId":"PolymarketTosController_getTos","parameters":[],"responses":{"200":{"description":""}},"summary":"Polymarket TOS metadata: current version + restricted-jurisdiction list for the attestation modal.","tags":["polymarket"]}},"/api/v1/credits/openrouter/connect":{"post":{"operationId":"ComputeCreditsController_connectOpenRouter","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenRouterConnectDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Connect the authenticated user OpenRouter account","tags":["credits"]}},"/api/v1/credits/openrouter/connection":{"delete":{"operationId":"ComputeCreditsController_disconnectOpenRouter","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Disconnect the authenticated user OpenRouter account","tags":["credits"]},"get":{"operationId":"ComputeCreditsController_getOpenRouterConnection","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get the authenticated user OpenRouter connection status","tags":["credits"]}},"/api/v1/credits/balance":{"get":{"operationId":"ComputeCreditsController_getBalance","parameters":[],"responses":{"200":{"description":"Credit balance"}},"security":[{"bearer":[]}],"summary":"Get credit balance for authenticated user","tags":["credits"]}},"/api/v1/credits/purchase/verify":{"post":{"operationId":"ComputeCreditsController_verifyPurchase","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseVerifyDto"}}}},"responses":{"200":{"description":"Purchase verified"},"400":{"description":"Invalid transaction or already used"}},"security":[{"bearer":[]}],"summary":"Verify on-chain credit purchase transaction","tags":["credits"]}},"/api/v1/credits/purchase/config":{"get":{"operationId":"ComputeCreditsController_getPurchaseConfig","parameters":[],"responses":{"200":{"description":""}},"summary":"Get on-chain credit purchase configuration","tags":["credits"]}},"/api/v1/credits/transfer":{"post":{"operationId":"ComputeCreditsController_transferCredits","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditTransferDto"}}}},"responses":{"200":{"description":"Transfer applied"},"400":{"description":"Insufficient purchased credits or invalid recipient"}},"security":[{"bearer":[]}],"summary":"Transfer purchased credits to another user","tags":["credits"]}},"/api/v1/credits/transactions":{"get":{"operationId":"ComputeCreditsController_getTransactions","parameters":[{"name":"type","required":false,"in":"query","schema":{"enum":["purchase","deduction","grant","refund","tracking","expiration","transfer_out","transfer_in"],"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"offset","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"Paginated transactions"}},"security":[{"bearer":[]}],"summary":"Get paginated credit transaction history","tags":["credits"]}},"/api/v1/credits/usage":{"get":{"operationId":"ComputeCreditsController_getUsage","parameters":[{"name":"agentId","required":false,"in":"query","schema":{"type":"string"}},{"name":"period","required":false,"in":"query","schema":{"enum":["day","week","month"],"type":"string"}}],"responses":{"200":{"description":"Usage summary"}},"security":[{"bearer":[]}],"summary":"Get aggregated usage summary","tags":["credits"]}},"/api/v1/credits/models":{"get":{"operationId":"ComputeCreditsController_getModels","parameters":[],"responses":{"200":{"description":"Available models"}},"summary":"Get available AI models with pricing (public)","tags":["credits"]}},"/api/v1/credits/estimate":{"get":{"operationId":"ComputeCreditsController_getEstimate","parameters":[{"name":"modelId","required":true,"in":"query","schema":{"type":"string"}},{"name":"inputTokens","required":true,"in":"query","schema":{"type":"number"}},{"name":"outputTokens","required":true,"in":"query","schema":{"type":"number"}},{"name":"cacheReadTokens","required":false,"in":"query","schema":{"type":"number"}},{"name":"cacheCreationTokens","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"Estimated cost"}},"summary":"Estimate cost for a model call (public)","tags":["credits"]}},"/api/v1/credits/budget":{"put":{"operationId":"ComputeCreditsController_setBudget","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetBudgetDto"}}}},"responses":{"200":{"description":"Budget updated"}},"security":[{"bearer":[]}],"summary":"Set daily budget cap","tags":["credits"]}},"/api/v1/agents/{agentId}/model":{"put":{"operationId":"AgentModelController_setAgentModel","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetModelDto"}}}},"responses":{"200":{"description":"Model preference updated"}},"security":[{"bearer":[]}],"summary":"Set preferred AI model for an agent","tags":["agents"]}},"/api/v1/tenant/me":{"get":{"operationId":"TenantPortalController_me","parameters":[],"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"The calling key's tenant: profile, feature overlay, branding and current fee terms.","tags":["eaas-tenant"]}},"/api/v1/tenant/statements/{period}":{"get":{"operationId":"TenantPortalController_statement","parameters":[{"name":"period","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"Monthly statement (YYYY-MM, UTC): volume by venue, fees received on-chain, BT365 platform fee due, floor comparison.","tags":["eaas-tenant"]}},"/api/v1/tenant/invoices":{"get":{"operationId":"TenantPortalController_listInvoices","parameters":[],"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"Issued monthly invoices (newest first; figures frozen at issue time).","tags":["eaas-tenant"]}},"/api/v1/tenant/ledger":{"get":{"operationId":"TenantPortalController_ledger","parameters":[],"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"Reporting ledger rows for one month (newest first). Reporting only; nothing here is a payout.","tags":["eaas-tenant"]}},"/api/v1/tenant/swap-intents":{"get":{"operationId":"TenantPortalController_swapIntents","parameters":[],"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"Signed swap fee authorizations handed to this tenant's users in one month, with their on-chain confirmation state.","tags":["eaas-tenant"]}},"/api/v1/tenant/keys":{"get":{"operationId":"TenantPortalController_keys","parameters":[],"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"This tenant's API keys (metadata only, never secrets). Issuance and revocation stay with the EaaS admin.","tags":["eaas-tenant"]}},"/api/v1/tenant/config":{"get":{"operationId":"TenantConfigController_config","parameters":[],"responses":{"200":{"description":""}},"summary":"Runtime config for a branded build: branding, feature overlay, Privy app id. Resolved from Origin or ?tenant=<slug>.","tags":["eaas-tenant"]}},"/api/v1/trading/accounts":{"get":{"operationId":"TradingApiController_listAccounts","parameters":[],"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"List the API key owner's tradable accounts","tags":["Trading Bot API"]},"post":{"operationId":"TradingApiOwnerWalletController_provisionAccount","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisionOwnerWalletAccountDto"}}}},"responses":{"201":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"Provision (or adopt) the owner-wallet account for a wallet","tags":["Trading Bot API — owner-wallet lane"]}},"/api/v1/trading/accounts/{accountId}/balance":{"get":{"operationId":"TradingApiController_getBalance","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"Live Hyperliquid account summary (equity, margin, balances)","tags":["Trading Bot API"]}},"/api/v1/trading/accounts/{accountId}/positions":{"get":{"operationId":"TradingApiController_getPositions","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"Open positions (incl. PENDING resting limits)","tags":["Trading Bot API"]}},"/api/v1/trading/accounts/{accountId}/orders":{"get":{"operationId":"TradingApiController_getOrders","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"Live open orders (resting limits + trigger orders)","tags":["Trading Bot API"]},"post":{"operationId":"TradingApiController_openOrder","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenManualPerpsPositionDto"}}}},"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"Open a long/short position (market or resting limit)","tags":["Trading Bot API"]}},"/api/v1/trading/accounts/{accountId}/fills":{"get":{"operationId":"TradingApiController_getFills","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}},{"name":"startTime","required":false,"in":"query","description":"Window start (ms since epoch). When set, fills are read via HL userFillsByTime.","schema":{"type":"string"}},{"name":"endTime","required":false,"in":"query","description":"Window end (ms since epoch, inclusive). Requires startTime; defaults to now.","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"Recent fill history (optionally bounded by a [startTime, endTime] ms window)","tags":["Trading Bot API"]}},"/api/v1/trading/accounts/{accountId}/orders/close":{"post":{"operationId":"TradingApiController_closeOrder","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloseManualPerpsPositionDto"}}}},"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"Close a position — full or partial","tags":["Trading Bot API"]}},"/api/v1/trading/accounts/{accountId}/orders/cancel":{"post":{"operationId":"TradingApiController_cancelOrder","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelManualPerpsOrderDto"}}}},"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"Cancel a resting order (limit or trigger) by oid","tags":["Trading Bot API"]}},"/api/v1/trading/accounts/{accountId}/orders/edit":{"post":{"operationId":"TradingApiController_editLimitOrder","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditManualPerpsLimitOrderDto"}}}},"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"Replace a resting limit order with new price/size","tags":["Trading Bot API"]}},"/api/v1/trading/accounts/{accountId}/orders/tpsl":{"post":{"operationId":"TradingApiController_updateTpSl","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManualPerpsTpSlDto"}}}},"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"Replace stop-loss / take-profit on an open position","tags":["Trading Bot API"]}},"/api/v1/trading/accounts/{accountId}/orders/trigger":{"post":{"operationId":"TradingApiController_placeTrigger","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceManualPerpsTriggerDto"}}}},"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"Place a REAL resting reduce-only stop-market trigger on an open position (sized from the live HL position; fails closed with the HL order id)","tags":["Trading Bot API"]}},"/api/v1/trading/accounts/{accountId}/margin":{"post":{"operationId":"TradingApiController_addMargin","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddManualPerpsMarginDto"}}}},"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"Add or remove isolated margin on an open position","tags":["Trading Bot API"]}},"/api/v1/trading/accounts/{accountId}/withdraw":{"post":{"operationId":"TradingApiController_withdraw","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawManualPerpsDto"}}}},"responses":{"200":{"description":""}},"security":[{"BT365-API-Key":[]}],"summary":"Withdraw from the account back to the owner wallet ($1 HL fee)","tags":["Trading Bot API"]}},"/api/v1/trading/keys":{"post":{"operationId":"TradingApiKeysController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTradingApiKeyDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradingApiKeyCreatedResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Create a trading-bot API key. The secret is returned only once.","tags":["Trading Bot API Keys"]},"get":{"operationId":"TradingApiKeysController_list","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TradingApiKeyResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"List your trading-bot API keys (no secrets)","tags":["Trading Bot API Keys"]}},"/api/v1/trading/keys/{id}":{"get":{"operationId":"TradingApiKeysController_getOne","parameters":[{"name":"id","required":true,"in":"path","description":"Trading API key UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradingApiKeyResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Get one trading-bot API key (no secret)","tags":["Trading Bot API Keys"]},"delete":{"operationId":"TradingApiKeysController_revoke","parameters":[{"name":"id","required":true,"in":"path","description":"Trading API key UUID","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"summary":"Revoke a trading-bot API key","tags":["Trading Bot API Keys"]}},"/api/v1/trading/keys/{id}/rotate":{"post":{"operationId":"TradingApiKeysController_rotate","parameters":[{"name":"id","required":true,"in":"path","description":"Trading API key UUID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Rotate the signing secret (apiKeyId preserved). New secret shown once.","tags":["Trading Bot API Keys"]}},"/api/v1/trading/accounts/{accountId}/setup-status":{"get":{"operationId":"TradingApiOwnerWalletController_getSetupStatus","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsSetupStatusDto"}}}}},"security":[{"BT365-API-Key":[]}],"summary":"One-time Hyperliquid account setup state (owner-wallet accounts)","tags":["Trading Bot API — owner-wallet lane"]}},"/api/v1/trading/accounts/{accountId}/prepare/setup":{"post":{"operationId":"TradingApiOwnerWalletController_prepareSetup","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareOwnerWalletSetupDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsSetupPrepareResponseDto"}}}}},"security":[{"BT365-API-Key":[]}],"summary":"Prepare the one-time account setup bundle (userSetAbstraction, approveBuilderFee, approveAgent, setReferrer)","tags":["Trading Bot API — owner-wallet lane"]}},"/api/v1/trading/accounts/{accountId}/prepare/open":{"post":{"operationId":"TradingApiOwnerWalletController_prepareOpen","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenManualPerpsPositionDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsPrepareResponseDto"}}}}},"security":[{"BT365-API-Key":[]}],"summary":"Prepare an open (market or resting limit) for the account wallet to sign","tags":["Trading Bot API — owner-wallet lane"]}},"/api/v1/trading/accounts/{accountId}/prepare/close":{"post":{"operationId":"TradingApiOwnerWalletController_prepareClose","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloseManualPerpsPositionDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsPrepareResponseDto"}}}}},"security":[{"BT365-API-Key":[]}],"summary":"Prepare a close — full or partial","tags":["Trading Bot API — owner-wallet lane"]}},"/api/v1/trading/accounts/{accountId}/prepare/cancel-order":{"post":{"operationId":"TradingApiOwnerWalletController_prepareCancelOrder","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelManualPerpsOrderDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsPrepareResponseDto"}}}}},"security":[{"BT365-API-Key":[]}],"summary":"Prepare a cancel of a resting order","tags":["Trading Bot API — owner-wallet lane"]}},"/api/v1/trading/accounts/{accountId}/prepare/update-tpsl":{"post":{"operationId":"TradingApiOwnerWalletController_prepareUpdateTpSl","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManualPerpsTpSlDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsPrepareResponseDto"}}}}},"security":[{"BT365-API-Key":[]}],"summary":"Prepare a stop-loss / take-profit replacement","tags":["Trading Bot API — owner-wallet lane"]}},"/api/v1/trading/accounts/{accountId}/prepare/edit-limit-order":{"post":{"operationId":"TradingApiOwnerWalletController_prepareEditLimitOrder","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditManualPerpsLimitOrderDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsPrepareResponseDto"}}}}},"security":[{"BT365-API-Key":[]}],"summary":"Prepare a limit-order replacement","tags":["Trading Bot API — owner-wallet lane"]}},"/api/v1/trading/accounts/{accountId}/prepare/add-margin":{"post":{"operationId":"TradingApiOwnerWalletController_prepareAddMargin","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddManualPerpsMarginDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsPrepareResponseDto"}}}}},"security":[{"BT365-API-Key":[]}],"summary":"Prepare an isolated-margin change","tags":["Trading Bot API — owner-wallet lane"]}},"/api/v1/trading/accounts/{accountId}/prepare/withdraw":{"post":{"operationId":"TradingApiOwnerWalletController_prepareWithdraw","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawManualPerpsDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsPrepareResponseDto"}}}}},"security":[{"BT365-API-Key":[]}],"summary":"Prepare a withdrawal — destination is always the account's own owner address","tags":["Trading Bot API — owner-wallet lane"]}},"/api/v1/trading/accounts/{accountId}/submit":{"post":{"operationId":"TradingApiOwnerWalletController_submit","parameters":[{"name":"accountId","required":true,"in":"path","description":"Account (agent) UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradingApiSubmitSignaturesDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsSubmitResponseDto"}}}}},"security":[{"BT365-API-Key":[]}],"summary":"Submit the account wallet's signatures for a prepared bundle (a withdraw bundle needs the withdraw scope, any other bundle the trade scope)","tags":["Trading Bot API — owner-wallet lane"]}},"/api/v1/tokens/discover":{"get":{"operationId":"TokenDiscoveryController_discoverTokens","parameters":[{"name":"sort","required":false,"in":"query","schema":{"enum":["new","trending","volume","marketcap","graduating","graduated"],"type":"string"}},{"name":"filter","required":false,"in":"query","schema":{"enum":["all","lp-locked","lp-burned","fair-launch"],"type":"string"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"creator","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"minLiquidity","required":false,"in":"query","schema":{"type":"number"}},{"name":"chainId","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"Paginated list of deployed tokens"}},"summary":"Discover deployed tokens with filtering, sorting, and pagination","tags":["Token Discovery"]}},"/api/v1/tokens/discover/trending":{"get":{"operationId":"TokenDiscoveryController_getTrending","parameters":[],"responses":{"200":{"description":"List of trending tokens"}},"summary":"Get top 20 trending tokens","tags":["Token Discovery"]}},"/api/v1/tokens/discover/{id}":{"get":{"operationId":"TokenDiscoveryController_getTokenDetail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Token details"},"404":{"description":"Token not found"}},"summary":"Get token detail by UUID","tags":["Token Discovery"]}},"/api/v1/tokens/{id}/og.png":{"get":{"operationId":"TokenDiscoveryController_getTokenOgCard","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"PNG Open Graph card"},"404":{"description":"Token not found"}},"summary":"Render a public launchpad token Open Graph card","tags":["Token Discovery"]}},"/api/v1/tokens/{id}/share":{"get":{"operationId":"TokenDiscoveryController_getTokenSharePage","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Open Graph HTML share page"},"404":{"description":"Token not found"}},"summary":"Render a crawler-readable launchpad share page","tags":["Token Discovery"]}},"/api/v1/tokens/check-symbol/{symbol}":{"get":{"operationId":"TokenDiscoveryController_checkSymbol","parameters":[{"name":"symbol","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Symbol availability result"}},"summary":"Check if a token symbol is available for deployment","tags":["Token Discovery"]}},"/api/v1/tokens/creator/{address}":{"get":{"operationId":"TokenDiscoveryController_getCreatorTokens","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"List of creator tokens"}},"summary":"Get all deployed tokens by a creator address","tags":["Token Discovery"]}},"/api/v1/token-launch/promo":{"get":{"operationId":"TokenLaunchChainsController_getLaunchPromo","parameters":[],"responses":{"200":{"description":""}},"tags":["Token Launch"]}},"/api/v1/token-launch/chains":{"get":{"operationId":"TokenLaunchChainsController_getLaunchChains","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TokenLaunchChainResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"Get chain availability for new token launches","tags":["Token Launch"]}},"/api/v1/tokens/hyperevm/curve/{id}/intent":{"get":{"operationId":"TokenLaunchController_getHyperEvmCurveIntent","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Token Launch"]}},"/api/v1/tokens/hyperevm/curve/{id}/confirm":{"post":{"operationId":"TokenLaunchController_confirmHyperEvmCurveIntent","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["Token Launch"]}},"/api/v1/tokens/{id}/curve/quote":{"get":{"operationId":"TokenLaunchController_quoteHyperEvmCurve","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"side","required":true,"in":"query","schema":{"type":"string"}},{"name":"amountWei","required":true,"in":"query","schema":{"type":"string"}},{"name":"slippageBps","required":true,"in":"query","schema":{"type":"string"}},{"name":"wallet","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Token Launch"]}},"/api/v1/tokens/{id}/curve/trades":{"get":{"operationId":"TokenLaunchController_curveTrades","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"before","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Token Launch"]}},"/api/v1/tokens/{id}/curve/candles":{"get":{"operationId":"TokenLaunchController_curveCandles","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"res","required":true,"in":"query","schema":{"type":"string"}},{"name":"from","required":true,"in":"query","schema":{"type":"string"}},{"name":"to","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Token Launch"]}},"/api/v1/tokens/hyperevm/creator-balance":{"get":{"operationId":"TokenLaunchController_hyperEvmCreatorBalance","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Token Launch"]}},"/api/v1/tokens/launch":{"post":{"operationId":"TokenLaunchController_launchToken","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchTokenDto"}}}},"responses":{"201":{"description":"Token deployed successfully","content":{"application/json":{"schema":{"properties":{"tokenId":{"type":"string"},"tokenAddress":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"type":"string"}}}}}},"202":{"description":"Launch accepted (async flag on): { launchId, status, stage }. Track progress via the launch_stage socket event or GET /tokens/:id."}},"security":[{"bearer":[]}],"summary":"Launch a new token","tags":["Token Launch"]}},"/api/v1/tokens/launch-with-logo":{"post":{"operationId":"TokenLaunchController_launchTokenWithLogo","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"logo":{"type":"string","format":"binary"},"name":{"type":"string"},"symbol":{"type":"string"},"initialSupply":{"type":"string"},"decimals":{"type":"number"},"description":{"type":"string"},"chainId":{"type":"number"},"delayMinutes":{"type":"number"},"maxBuyPercent":{"type":"number"},"burnPercent":{"type":"number"},"transferFeeBps":{"type":"number","description":"Transfer fee in basis points (25-500)"},"feeRecipients":{"type":"array","items":{"type":"object","properties":{"recipient":{"type":"string"},"shareBps":{"type":"number"}}},"description":"Up to 7 fee recipients (shares must sum to 10000)"},"autoCreateLp":{"type":"boolean","description":"Create Aerodrome LP after deployment"},"lpPercent":{"type":"number","description":"Percent of supply for LP (default 20)"},"paymentTxHash":{"type":"string","description":"Payment transaction hash (0x-prefixed, 66 chars)"},"ethForLp":{"type":"string","description":"ETH amount in wei for LP provisioning"},"devBuyEnabled":{"type":"boolean","description":"Request a creator-signed first buy after launch"},"devBuyEth":{"type":"string","description":"Native ETH amount for the creator-signed first buy"},"termsAccepted":{"type":"boolean"},"termsVersion":{"type":"string","example":"2026-07-20"},"websiteUrl":{"type":"string","description":"Optional project website URL"},"twitterUrl":{"type":"string","description":"Optional X handle or profile URL"},"telegramUrl":{"type":"string","description":"Optional Telegram handle or t.me URL"}}}}}},"responses":{"201":{"description":"Token deployed successfully with logo"},"202":{"description":"Launch accepted (async flag on): { launchId, status, stage }. Track progress via the launch_stage socket event or GET /tokens/:id."}},"security":[{"bearer":[]}],"summary":"Launch a new token with logo upload","tags":["Token Launch"]}},"/api/v1/tokens/{tokenId}/dev-buy/confirm":{"post":{"operationId":"TokenLaunchController_confirmFirstBuy","parameters":[{"name":"tokenId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmFirstBuyDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Confirm and persist a creator-signed first buy","tags":["Token Launch"]}},"/api/v1/tokens/{tokenId}/metadata":{"patch":{"operationId":"TokenLaunchController_updateTokenMetadata","parameters":[{"name":"tokenId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTokenMetadataDto"}}}},"responses":{"200":{"description":"Updated token"},"404":{"description":"Token not found or not owned by the caller"}},"security":[{"bearer":[]}],"summary":"Update token description/social links (creator only)","tags":["Token Launch"]}},"/api/v1/tokens/{tokenId}/logo":{"post":{"operationId":"TokenLaunchController_updateTokenLogo","parameters":[{"name":"tokenId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"logo":{"type":"string","format":"binary"}}}}}},"responses":{"201":{"description":"Updated token"},"404":{"description":"Token not found or not owned by the caller"}},"security":[{"bearer":[]}],"summary":"Replace the token logo (creator only)","tags":["Token Launch"]}},"/api/v1/tokens/my-tokens":{"get":{"operationId":"TokenLaunchController_getMyTokens","parameters":[],"responses":{"200":{"description":"List of user tokens"}},"security":[{"bearer":[]}],"summary":"Get tokens launched by the current user","tags":["Token Launch"]}},"/api/v1/tokens/recent":{"get":{"operationId":"TokenLaunchController_getRecentTokens","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"List of recent tokens"}},"summary":"Get recently launched tokens","tags":["Token Launch"]}},"/api/v1/tokens/launch-diagnostics":{"get":{"operationId":"TokenLaunchController_getLaunchDiagnostics","parameters":[],"responses":{"200":{"description":"Diagnostic checks for launch system"}},"security":[{"bearer":[]}],"summary":"Check token launch system readiness","tags":["Token Launch"]}},"/api/v1/tokens/deployer-address":{"get":{"operationId":"TokenLaunchController_getDeployerAddress","parameters":[],"responses":{"200":{"description":"Deployer wallet address and chain info"}},"summary":"Get the platform deployer wallet address for payment","tags":["Token Launch"]}},"/api/v1/tokens/lp-fees/pending":{"get":{"operationId":"TokenLaunchController_getPendingFees","parameters":[],"responses":{"200":{"description":"Pending fees across all launched tokens"}},"security":[{"bearer":[]}],"summary":"Get pending LP fees for the authenticated user","tags":["Token Launch"]}},"/api/v1/tokens/lp-fees/history":{"get":{"operationId":"TokenLaunchController_getClaimHistory","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"number"}},{"name":"offset","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"Claim history for the authenticated user"}},"security":[{"bearer":[]}],"summary":"Get LP fee claim history","tags":["Token Launch"]}},"/api/v1/tokens/lp-fees/{tokenAddress}":{"get":{"operationId":"TokenLaunchController_getTokenFees","parameters":[{"name":"tokenAddress","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Token fee summary with pending amounts per recipient"}},"security":[{"bearer":[]}],"summary":"Get fee summary for a specific token","tags":["Token Launch"]}},"/api/v1/tokens/lp-fees/claim":{"post":{"operationId":"TokenLaunchController_recordClaim","parameters":[],"responses":{"201":{"description":"Claim recorded successfully"},"403":{"description":"Liquidity provision is not available in this region"}},"security":[{"bearer":[]}],"summary":"Record a completed fee claim transaction","tags":["Token Launch"]}},"/api/v1/tokens/{tokenId}":{"get":{"operationId":"TokenLaunchController_getToken","parameters":[{"name":"tokenId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Token details"}},"summary":"Get token details by ID","tags":["Token Launch"]}},"/api/v1/launch-attribution/associate":{"post":{"operationId":"LaunchAttributionController_associate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssociateClickDto"}}}},"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"summary":"Associate a launch click with the authenticated wallet.","tags":["launch-attribution"]}},"/api/v1/advanced-orders":{"post":{"operationId":"AdvancedOrdersController_createOrder","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAdvancedOrderDto"}}}},"responses":{"201":{"description":"Order created"},"400":{"description":"Invalid parameters"},"401":{"description":"Unauthorized"}},"security":[{"bearer":[]}],"summary":"Create a new advanced order (Limit, Stop-Loss, TWAP, DCA)","tags":["advanced-orders"]},"get":{"operationId":"AdvancedOrdersController_getOrders","parameters":[{"name":"status","required":false,"in":"query","schema":{"type":"array","items":{"type":"string","enum":["CREATED","FUNDED","PENDING","TRIGGERED","EXECUTING","COMPLETED","FAILED","CANCELLED"]}}}],"responses":{"200":{"description":"Orders retrieved"},"401":{"description":"Unauthorized"}},"security":[{"bearer":[]}],"summary":"Get all orders for the authenticated wallet","tags":["advanced-orders"]}},"/api/v1/advanced-orders/{orderId}/deposit":{"post":{"operationId":"AdvancedOrdersController_verifyDeposit","parameters":[{"name":"orderId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepositOrderDto"}}}},"responses":{"200":{"description":"Deposit verified, order activated"},"400":{"description":"Invalid deposit or order status"},"401":{"description":"Unauthorized"},"404":{"description":"Order not found"}},"security":[{"bearer":[]}],"summary":"Verify deposit and activate order","tags":["advanced-orders"]}},"/api/v1/advanced-orders/{orderId}":{"get":{"operationId":"AdvancedOrdersController_getOrder","parameters":[{"name":"orderId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Order retrieved"},"401":{"description":"Unauthorized"},"404":{"description":"Order not found"}},"security":[{"bearer":[]}],"summary":"Get order details by ID","tags":["advanced-orders"]}},"/api/v1/advanced-orders/{orderId}/cancel":{"post":{"operationId":"AdvancedOrdersController_cancelOrder","parameters":[{"name":"orderId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Order cancelled"},"400":{"description":"Order cannot be cancelled"},"401":{"description":"Unauthorized"},"404":{"description":"Order not found"}},"security":[{"bearer":[]}],"summary":"Cancel an order and refund tokens","tags":["advanced-orders"]}},"/api/v1/advanced-orders/permit2/{orderId}/cancel":{"post":{"operationId":"AdvancedOrdersController_cancelPermit2Order","parameters":[{"name":"orderId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Permit2 order cancelled"},"400":{"description":"Order cannot be cancelled"},"401":{"description":"Unauthorized"},"404":{"description":"Order not found"}},"security":[{"bearer":[]}],"summary":"Cancel a Permit2 limit order","tags":["advanced-orders"]}},"/api/v1/advanced-orders/permit2":{"post":{"operationId":"AdvancedOrdersController_createPermit2Order","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePermit2OrderDto"}}}},"responses":{"201":{"description":"Permit2 limit order created"},"400":{"description":"Invalid parameters or signature"},"401":{"description":"Unauthorized"}},"security":[{"bearer":[]}],"summary":"Create a Permit2-based limit order","tags":["advanced-orders"]}},"/api/v1/advanced-orders/permit2/nonce/{wallet}":{"get":{"operationId":"AdvancedOrdersController_getPermit2Nonce","parameters":[{"name":"wallet","required":true,"in":"path","schema":{"type":"string"}},{"name":"chainId","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"Nonce retrieved"}},"summary":"Get next unused Permit2 nonce for a wallet","tags":["advanced-orders"]}},"/api/v1/advanced-orders/permit2/config":{"get":{"operationId":"AdvancedOrdersController_getPermit2Config","parameters":[],"responses":{"200":{"description":"Config retrieved"}},"summary":"Get Permit2 executor configuration","tags":["advanced-orders"]}},"/api/v1/hl-market-data/{asset}/flow":{"get":{"operationId":"HlMarketDataController_getOrderFlow","parameters":[{"name":"asset","required":true,"in":"path","description":"Hyperliquid coin, e.g. BTC or xyz:TSLA","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Derived order-flow numbers for one Hyperliquid perp market (public)","tags":["hl-market-data"]}},"/api/v1/partners/attribute":{"post":{"operationId":"PartnerController_attribute","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerAttributeRequestDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Attribute the caller wallet to a partner code.","tags":["partners"]}},"/r/{code}":{"get":{"operationId":"PartnerRedirectController_redirect","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Partner tracking redirect (increments click).","tags":["partner-tracking"]}},"/api/v1/manual-hl-outcomes/{agentId}/account":{"get":{"operationId":"ManualHlOutcomesController_getAccount","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Hyperliquid HIP-4 outcome account summary","tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/markets":{"get":{"operationId":"ManualHlOutcomesController_getMarkets","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/markets/{outcomeId}/book":{"get":{"operationId":"ManualHlOutcomesController_getBook","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}},{"name":"outcomeId","required":true,"in":"path","schema":{"type":"number"}},{"name":"sideIndex","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/positions":{"get":{"operationId":"ManualHlOutcomesController_getPositions","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/orders":{"get":{"operationId":"ManualHlOutcomesController_getOrders","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/fills":{"get":{"operationId":"ManualHlOutcomesController_getFills","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/trades":{"get":{"operationId":"ManualHlOutcomesController_getTrades","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/fee-status":{"get":{"operationId":"ManualHlOutcomesController_getFeeStatus","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/fee-debt/retry":{"post":{"operationId":"ManualHlOutcomesController_retryFeeDebt","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/retry-fees":{"post":{"operationId":"ManualHlOutcomesController_retryFees","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/reconcile":{"post":{"operationId":"ManualHlOutcomesController_reconcile","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/funding-status":{"get":{"operationId":"ManualHlOutcomesController_getFundingStatus","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/funding/hyperevm":{"post":{"operationId":"ManualHlOutcomesController_startHyperEvmFunding","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartHlOutcomeHyperEvmFundingDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/funding-status/arb-usdc":{"get":{"operationId":"ManualHlOutcomesController_getArbUsdcFundingStatus","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/funding/arb-usdc":{"post":{"operationId":"ManualHlOutcomesController_startArbUsdcFunding","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartHlOutcomeArbUsdcFundingDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/move-funds":{"post":{"operationId":"ManualHlOutcomesController_moveFunds","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveHlPocketFundsDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Move USDC between the Trading balance and the Prediction account (instant HL-native transfer, no bridge)","tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/move-funds/latest":{"get":{"operationId":"ManualHlOutcomesController_getLatestMoveFunds","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Latest move-funds transfer for this agent","tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/convert-usdh":{"post":{"operationId":"ManualHlOutcomesController_convertUsdh","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Sell legacy spot USDH into USDC (HIP-4 quote migration recovery). One-shot IoC; retry on partial fill.","tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/order":{"post":{"operationId":"ManualHlOutcomesController_placeOrder","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceHlOutcomeOrderDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["manual-hl-outcomes"]}},"/api/v1/manual-hl-outcomes/{agentId}/cancel-order":{"post":{"operationId":"ManualHlOutcomesController_cancelOrder","parameters":[{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelHlOutcomeOrderDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["manual-hl-outcomes"]}},"/api/v1/agents/perps/outcome-markets":{"get":{"operationId":"OutcomeMarketsController_getOutcomeMarkets","parameters":[],"responses":{"200":{"description":""}},"summary":"List Hyperliquid HIP-4 prediction (outcome) markets","tags":["agents"]}},"/api/v1/agents/perps/outcome-templates":{"get":{"operationId":"OutcomeMarketsController_getOutcomeTemplates","parameters":[],"responses":{"200":{"description":""}},"summary":"List Hyperliquid HIP-4 outcome market templates (rule text)","tags":["agents"]}},"/api/v1/manual-perps/fees/overview":{"get":{"operationId":"ManualPerpsController_getFeesOverview","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Daily funding and recent fee totals across every manual perps account of the caller","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/fees":{"get":{"operationId":"ManualPerpsController_getFees","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"allTime","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Current daily funding per position plus funding and trading fees paid over 24h / 7d / 30d","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/account":{"get":{"operationId":"ManualPerpsController_getAccount","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"fresh","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"HL aggregated account info"}},"security":[{"bearer":[]}],"summary":"Live Hyperliquid account summary for a manual agent","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/positions":{"get":{"operationId":"ManualPerpsController_getPositions","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"DB-tracked manual positions (includes PENDING limits)","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/trailing-stops":{"get":{"operationId":"ManualPerpsController_getTrailingStops","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Trailing-stop state of the open manual positions (only rows with trailing on)","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/orders":{"get":{"operationId":"ManualPerpsController_getOpenOrders","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"fresh","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Live Hyperliquid open orders (resting limits + trigger orders)","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/fills":{"get":{"operationId":"ManualPerpsController_getFills","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"recent","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Live Hyperliquid user fill history","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/spot/account":{"get":{"operationId":"ManualPerpsController_getSpotAccount","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"fresh","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"HyperCore spot inventory and authoritative live balances","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/spot/fills":{"get":{"operationId":"ManualPerpsController_getSpotFills","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":50,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Paginated immutable HyperCore spot fills","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/open":{"post":{"operationId":"ManualPerpsController_openPosition","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenManualPerpsPositionDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Open a manual long/short position (market or resting limit)","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/spot/orders":{"post":{"operationId":"ManualPerpsController_buyHypercoreSpot","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuyHypercoreSpotOrderDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Buy HYPE/USDC on HyperCore with a buy IoC order","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/spot/orders/sell":{"post":{"operationId":"ManualPerpsController_sellHypercoreSpot","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SellHypercoreSpotOrderDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Sell HYPE/USDC on HyperCore with a sell IoC order","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/spot/transfers":{"get":{"operationId":"ManualPerpsController_getHypercoreSpotTransfers","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":50,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List sanitized HyperCore spot transfer history","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/spot/reconcile":{"post":{"operationId":"ManualPerpsController_reconcileHypercoreSpot","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Reconcile HyperCore spot balances with the immutable ledger","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/spot/transfers/core-to-evm":{"post":{"operationId":"ManualPerpsController_transferHypercoreHypeToEvm","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoreToEvmHypercoreSpotTransferDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Transfer agent HYPE from HyperCore to its HyperEVM balance","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/spot/transfers/evm-to-core":{"post":{"operationId":"ManualPerpsController_transferHyperEvmHypeToCore","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvmToCoreHypercoreSpotTransferDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Transfer agent native HYPE from HyperEVM to HyperCore","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/spot/transfers/perps-to-spot":{"post":{"operationId":"ManualPerpsController_transferPerpsUsdcToSpot","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerpsToSpotHypercoreUsdcTransferDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Transfer agent USDC from perps margin to its spot balance","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/spot/transfers/spot-to-perps":{"post":{"operationId":"ManualPerpsController_transferSpotUsdcToPerps","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpotToPerpsHypercoreUsdcTransferDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Transfer agent USDC from spot balance to perps margin","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/spot/withdraw-to-owner":{"post":{"operationId":"ManualPerpsController_withdrawHypercoreHypeToOwner","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawToOwnerHypercoreSpotTransferDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Withdraw agent HyperCore HYPE to its fixed owner address","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/close":{"post":{"operationId":"ManualPerpsController_closePosition","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloseManualPerpsPositionDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Close a manual position — full or partial","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/update-tpsl":{"post":{"operationId":"ManualPerpsController_updateTpSl","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManualPerpsTpSlDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Replace stop-loss / take-profit on an open manual position","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/cancel-order":{"post":{"operationId":"ManualPerpsController_cancelOrder","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelManualPerpsOrderDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancel a resting Hyperliquid order (limit or trigger) by oid","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/edit-limit-order":{"post":{"operationId":"ManualPerpsController_editLimitOrder","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditManualPerpsLimitOrderDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Replace a resting limit order with a new price/size (cancel-then-open)","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/withdraw":{"post":{"operationId":"ManualPerpsController_withdraw","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawManualPerpsDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Partial withdraw from manual agent HL account back to owner wallet ($1 HL fee)","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/add-margin":{"post":{"operationId":"ManualPerpsController_addMargin","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddManualPerpsMarginDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Add or remove isolated margin on an open position (no $1 fee). Lowers liq price.","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/update-leverage":{"post":{"operationId":"ManualPerpsController_updateLeverage","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManualPerpsLeverageDto"}}}},"responses":{"200":{"description":"Leverage mutation result"}},"security":[{"bearer":[]}],"summary":"Change leverage on an open position without changing its margin mode","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/prepare/open":{"post":{"operationId":"ManualPerpsController_prepareOpen","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenManualPerpsPositionDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsPrepareResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Prepare a user-signed open (owner-wallet accounts)","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/prepare/close":{"post":{"operationId":"ManualPerpsController_prepareClose","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloseManualPerpsPositionDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsPrepareResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Prepare a user-signed close — full or partial (owner-wallet accounts)","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/prepare/cancel-order":{"post":{"operationId":"ManualPerpsController_prepareCancelOrder","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelManualPerpsOrderDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsPrepareResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Prepare a user-signed cancel of a resting order (owner-wallet accounts)","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/prepare/update-tpsl":{"post":{"operationId":"ManualPerpsController_prepareUpdateTpSl","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManualPerpsTpSlDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsPrepareResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Prepare a user-signed stop-loss / take-profit replacement (owner-wallet accounts)","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/prepare/edit-limit-order":{"post":{"operationId":"ManualPerpsController_prepareEditLimitOrder","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditManualPerpsLimitOrderDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsPrepareResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Prepare a user-signed limit-order replacement (owner-wallet accounts)","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/prepare/add-margin":{"post":{"operationId":"ManualPerpsController_prepareAddMargin","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddManualPerpsMarginDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsPrepareResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Prepare a user-signed isolated-margin change (owner-wallet accounts)","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/prepare/update-leverage":{"post":{"operationId":"ManualPerpsController_prepareUpdateLeverage","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManualPerpsLeverageDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsPrepareResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Prepare a user-signed leverage change (owner-wallet accounts)","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/prepare/withdraw":{"post":{"operationId":"ManualPerpsController_prepareWithdraw","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawManualPerpsDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsPrepareResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Prepare a user-signed withdrawal to the owner wallet (owner-wallet accounts)","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/setup-status":{"get":{"operationId":"ManualPerpsController_getSetupStatus","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsSetupStatusDto"}}}}},"security":[{"bearer":[]}],"summary":"One-time Hyperliquid account setup state (owner-wallet accounts)","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/prepare/setup":{"post":{"operationId":"ManualPerpsController_prepareSetup","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsSetupPrepareResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Prepare the one-time user-signed account setup (owner-wallet accounts)","tags":["manual-perps"]}},"/api/v1/manual-perps/{agentId}/submit":{"post":{"operationId":"ManualPerpsController_submitClientSigned","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitManualPerpsSignaturesDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualPerpsSubmitResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Submit device signatures for a prepared bundle (owner-wallet accounts)","tags":["manual-perps"]}},"/api/v1/manual-perps/tos":{"get":{"operationId":"PerpsTosController_getTos","parameters":[],"responses":{"200":{"description":""}},"summary":"Perps risk/eligibility disclosure metadata: current version + restricted-jurisdiction list for the attestation modal.","tags":["manual-perps"]}},"/api/v1/manual-perps/tos/status":{"get":{"operationId":"PerpsTosController_getStatus","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Whether the authenticated owner has a current-version perps attestation on record.","tags":["manual-perps"]}},"/api/v1/manual-perps/tos/attest":{"post":{"operationId":"PerpsTosController_attest","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Record the authenticated owner's acknowledgment of the current perps risk/eligibility disclosure.","tags":["manual-perps"]}},"/api/v1/agents/instances/{id}/reviews/preview":{"post":{"operationId":"AgentReviewController_previewReview","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateAgentReviewDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Preview evidence and estimated cost for a manual AI review","tags":["agents"]}},"/api/v1/agents/instances/{id}/reviews/generate":{"post":{"operationId":"AgentReviewController_generateReview","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateAgentReviewDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Generate an owner-requested AI review","tags":["agents"]}},"/api/v1/agents/instances/{id}/reviews":{"get":{"operationId":"AgentReviewController_getReviews","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"take","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List AI reviews for an agent","tags":["agents"]}},"/api/v1/agents/instances/{id}/reviews/{reviewId}":{"get":{"operationId":"AgentReviewController_getReview","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"reviewId","required":true,"in":"path","description":"Review UUID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get a specific AI review","tags":["agents"]}},"/api/v1/agents/instances/{id}/reviews/{reviewId}/accept":{"post":{"operationId":"AgentReviewController_acceptAllRecommendations","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"reviewId","required":true,"in":"path","description":"Review UUID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Accept all recommendations in a review","tags":["agents"]}},"/api/v1/agents/instances/{id}/reviews/{reviewId}/accept/{field}":{"post":{"operationId":"AgentReviewController_acceptRecommendation","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"reviewId","required":true,"in":"path","description":"Review UUID","schema":{"type":"string"}},{"name":"field","required":true,"in":"path","description":"Recommendation field name","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Accept a single recommendation, optionally with an edited value","tags":["agents"]}},"/api/v1/agents/instances/{id}/reviews/{reviewId}/decline/{field}":{"post":{"operationId":"AgentReviewController_declineRecommendation","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"reviewId","required":true,"in":"path","description":"Review UUID","schema":{"type":"string"}},{"name":"field","required":true,"in":"path","description":"Recommendation field name","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Decline a single recommendation","tags":["agents"]}},"/api/v1/agents/instances/{id}/reviews/{reviewId}/decline":{"post":{"operationId":"AgentReviewController_declineReview","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"reviewId","required":true,"in":"path","description":"Review UUID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Decline all recommendations in a review","tags":["agents"]}},"/api/v1/agents/{agentId}/fund-gasless":{"post":{"operationId":"GaslessFundingController_fundGasless","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayFundingDto"}}}},"responses":{"200":{"description":"Funding relayed and deposit recorded"},"403":{"description":"Feature disabled or not the agent owner"}},"security":[{"bearer":[]}],"summary":"Gaslessly fund an agent via an EIP-3009 authorization","tags":["GaslessFunding"]}},"/api/v1/wallet/send-gasless":{"post":{"operationId":"GaslessSendController_sendGasless","parameters":[{"name":"reconcile","required":false,"in":"query","description":"When true, inspect the signed nonce without broadcasting it","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelaySendDto"}}}},"responses":{"200":{"description":"Send relayed and confirmed"},"403":{"description":"Feature disabled"},"410":{"description":"Authorization is terminal and no transfer occurred — either proven unspent, or proven canceled on-chain by the owner (EIP-3009 marks both used and canceled with the same state bool)"}},"security":[{"bearer":[]}],"summary":"Gaslessly send Arbitrum USDC via an EIP-3009 authorization","tags":["GaslessSend"]}},"/api/v1/wallet/swap/failure":{"post":{"operationId":"WalletSwapController_reportSwapFailure","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportSwapFailureDto"}}}},"responses":{"202":{"description":"Failure forwarded for investigation"}},"security":[{"bearer":[]}],"summary":"Report an authenticated wallet swap that reverted on-chain","tags":["wallet-swap"]}},"/api/v1/wallet/swap/build":{"post":{"operationId":"WalletSwapController_buildSwap","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildSwapRequestDto"}}}},"responses":{"200":{"description":"Unsigned swap (single or multi-hop) built. For chainId 999 the response is instead a HyperEvmQuoteResponseDto: a helper-bound EIP-712 signed intent (quoteId/deadline/signature), not an unsignedTransaction envelope."},"400":{"description":"Invalid request, no route, or feature disabled"}},"security":[{"bearer":[]}],"summary":"Build a swap for the session wallet (Base/Arbitrum/Robinhood; HyperEVM when server-enabled)","tags":["wallet-swap"]}},"/api/v1/wallet/swap/sponsor-gas":{"post":{"operationId":"WalletSwapController_sponsorSwapGas","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildSwapRequestDto"}}}},"responses":{"200":{"description":"Drop sponsored, or a safe decline reason"},"400":{"description":"Invalid request, non-Base chain, or feature disabled"}},"security":[{"bearer":[]}],"summary":"Sponsor a small Base ETH gas drop so a token-only wallet can swap","tags":["wallet-swap"]}},"/api/v1/wallet/send/sponsor-gas":{"post":{"operationId":"WalletSwapController_sponsorSendGas","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SponsorSendGasRequestDto"}}}},"responses":{"200":{"description":"Drop sponsored, or a safe decline reason"},"400":{"description":"Invalid request, non-Base chain, native send, or feature disabled"}},"security":[{"bearer":[]}],"summary":"Sponsor a small Base ETH gas drop so a token-only wallet can send an ERC-20","tags":["wallet-swap"]}},"/api/v1/wallet/swap/tokens":{"get":{"operationId":"WalletSwapController_listTokens","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID — Ethereum (1), Base (8453), Arbitrum One (42161), HyperEVM (999) or Robinhood Chain (4663)","schema":{"example":8453,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Free-text filter on symbol, name, or address","schema":{"example":"usdc","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Max results (1-100, default 50)","schema":{"example":50,"type":"number"}}],"responses":{"200":{"description":"Token catalog"}},"security":[{"bearer":[]}],"summary":"List swappable destination tokens on Base, Arbitrum or Robinhood Chain","tags":["wallet-swap"]}},"/api/v1/robinhood/stocks":{"get":{"operationId":"RobinhoodStocksController_listStocks","parameters":[{"name":"q","required":false,"in":"query","description":"Free-text filter on symbol, name, or token address","schema":{"maxLength":128,"example":"aapl","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RobinhoodStocksResponseDto"}}}}},"summary":"List Robinhood Chain tokenized equities with pool prices","tags":["robinhood"]}},"/api/v1/stocks":{"get":{"operationId":"TokenizedStocksController_list","parameters":[{"name":"issuer","required":false,"in":"query","description":"Issuer to list, or 'all' (default) for every issuer whose venue is on","schema":{"default":"all","type":"string","enum":["all","robinhood","coinbase"]}},{"name":"q","required":false,"in":"query","description":"Free-text filter on symbol, name or address","schema":{"maxLength":128,"example":"aapl","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StocksResponseDto"}}}}},"summary":"List tokenized equities across issuers, with pool prices and per-issuer provenance","tags":["stocks"]}},"/api/v1/wallet/bridge":{"post":{"operationId":"CctpBridgeController_initiate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitiateBridgeDto"}}}},"responses":{"200":{"description":"Bridge accepted; poll GET /wallet/bridge/:id"},"403":{"description":"Feature disabled"}},"security":[{"bearer":[]}],"summary":"Bridge USDC between Base, Arbitrum and Solana via CCTP V2 (gasless)","tags":["CctpBridge"]}},"/api/v1/wallet/bridge/solana/build":{"post":{"operationId":"CctpBridgeController_buildSolana","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildSolanaBridgeDto"}}}},"responses":{"200":{"description":"Unsigned transaction (base64) to sign and send"},"403":{"description":"Feature disabled"}},"security":[{"bearer":[]}],"summary":"Build the unsigned Solana depositForBurn for a Solana→Base bridge","tags":["CctpBridge"]}},"/api/v1/wallet/bridge/solana":{"post":{"operationId":"CctpBridgeController_registerSolana","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterSolanaBridgeDto"}}}},"responses":{"200":{"description":"Bridge row created; poll GET /wallet/bridge/:id"},"409":{"description":"Burn not confirmed yet — retry"}},"security":[{"bearer":[]}],"summary":"Register a confirmed Solana depositForBurn and start the mint pipeline","tags":["CctpBridge"]}},"/api/v1/wallet/bridge/solana/reclaim-rent":{"post":{"operationId":"CctpBridgeController_reclaimSolanaRent","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReclaimSolanaRentDto"}}}},"responses":{"200":{"description":"Unsigned transaction, already reclaimed, or pending until the reclaim window opens"}},"security":[{"bearer":[]}],"summary":"Build a Solana CCTP event-account rent reclaim transaction","tags":["CctpBridge"]}},"/api/v1/wallet/bridge/deposit":{"post":{"operationId":"CctpBridgeController_registerDeposit","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterBridgeDepositDto"}}}},"responses":{"200":{"description":"Bridge row created; poll GET /wallet/bridge/:id"},"403":{"description":"Feature disabled"},"409":{"description":"Deposit not confirmed yet — retry"}},"security":[{"bearer":[]}],"summary":"Register a confirmed client-signed Across deposit (4663 → EVM)","tags":["CctpBridge"]}},"/api/v1/wallet/bridge/config":{"get":{"operationId":"CctpBridgeController_config","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get CCTP bridge config (treasury address, min, chains)","tags":["CctpBridge"]}},"/api/v1/wallet/bridge/quote":{"get":{"operationId":"CctpBridgeController_quote","parameters":[],"responses":{"200":{"description":"Both tiers and the exact raw input amount they price, with the fast fee the burn will be capped at"},"403":{"description":"Feature disabled"}},"security":[{"bearer":[]}],"summary":"Quote the standard and fast CCTP bridge tiers","tags":["CctpBridge"]}},"/api/v1/wallet/bridge/transfers":{"get":{"operationId":"CctpBridgeController_history","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List the caller's recent bridges, newest first","tags":["CctpBridge"]}},"/api/v1/wallet/bridge/{id}":{"get":{"operationId":"CctpBridgeController_status","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get the status of a CCTP bridge","tags":["CctpBridge"]}},"/api/v1/cross-chain-swap/catalog":{"get":{"operationId":"CrossChainSwapController_publicCatalog","parameters":[],"responses":{"200":{"description":""}},"summary":"Public cross-chain catalog (chains, routes, global status)","tags":["CrossChainSwap"]}},"/api/v1/cross-chain-swap/tokens":{"get":{"operationId":"CrossChainSwapController_publicTokens","parameters":[],"responses":{"200":{"description":""}},"summary":"Public cross-chain token list (search + cursor pagination)","tags":["CrossChainSwap"]}},"/api/v1/cross-chain-swap/preview":{"get":{"operationId":"CrossChainSwapController_publicPreview","parameters":[],"responses":{"200":{"description":""}},"summary":"Anonymous indicative estimate — no quote id, nothing signable","tags":["CrossChainSwap"]}},"/api/v1/cross-chain-swap/config":{"get":{"operationId":"CrossChainSwapController_config","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Cross-chain swap config (chains, tokens, routes, fee bps)","tags":["CrossChainSwap"]}},"/api/v1/cross-chain-swap/quote":{"post":{"operationId":"CrossChainSwapController_quote","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequestDto"}}}},"responses":{"200":{"description":"Quotes, best first"},"403":{"description":"Feature or provider disabled"}},"security":[{"bearer":[]}],"summary":"Quote a cross-chain swap (server quote ids, 5 min TTL)","tags":["CrossChainSwap"]}},"/api/v1/cross-chain-swap/build":{"post":{"operationId":"CrossChainSwapController_build","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildRequestDto"}}}},"responses":{"200":{"description":"Signable payload + swap id"},"409":{"description":"Quote already built"},"410":{"description":"Quote expired"},"429":{"description":"Daily cap reached"}},"security":[{"bearer":[]}],"summary":"Build the transaction for a server quote id","tags":["CrossChainSwap"]}},"/api/v1/cross-chain-swap/history":{"get":{"operationId":"CrossChainSwapController_history","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List the caller's cross-chain swaps, newest first","tags":["CrossChainSwap"]}},"/api/v1/cross-chain-swap/{id}/register":{"post":{"operationId":"CrossChainSwapController_register","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequestDto"}}}},"responses":{"200":{"description":"Swap status"},"400":{"description":"Transaction does not match the built payload"},"409":{"description":"Not confirmed yet — retry"}},"security":[{"bearer":[]}],"summary":"Register the confirmed source-chain transaction of a built swap","tags":["CrossChainSwap"]}},"/api/v1/cross-chain-swap/{id}":{"get":{"operationId":"CrossChainSwapController_status","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get the status of a cross-chain swap","tags":["CrossChainSwap"]}},"/api/v1/ai-terminal/chat":{"post":{"description":"Send a natural language message to the AI terminal. Claude will use tools to look up data, propose swaps, create agents, etc.","operationId":"AiTerminalController_chat","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatMessageDto"}}}},"responses":{"200":{"description":"Chat message processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatResponseDto"}}}},"401":{"description":"Unauthorized"},"429":{"description":"Rate limit exceeded"}},"security":[{"bearer":[]}],"summary":"Process chat message","tags":["ai-terminal"]}},"/api/v1/ai-terminal/confirm-agent-create":{"post":{"description":"Create an AI trading agent after user confirms the details from chat","operationId":"AiTerminalController_confirmAgentCreate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecuteAgentCreationDto"}}}},"responses":{"201":{"description":"Agent created successfully"},"401":{"description":"Unauthorized"},"429":{"description":"Rate limit exceeded"}},"security":[{"bearer":[]}],"summary":"Create AI trading agent","tags":["ai-terminal"]}},"/api/v1/ai-terminal/health":{"get":{"operationId":"AiTerminalController_health","parameters":[],"responses":{"200":{"description":"Service health status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthCheckDto"}}}}},"summary":"AI Terminal health check","tags":["ai-terminal"]}},"/api/v1/ai-terminal/guided-create/start":{"post":{"operationId":"AiTerminalController_startGuidedFlow","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartGuidedFlowDto"}}}},"responses":{"200":{"description":"Guided flow started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Start guided strategy creation","tags":["ai-terminal"]}},"/api/v1/ai-terminal/guided-create/answer":{"post":{"operationId":"AiTerminalController_submitGuidedFlowAnswer","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuidedFlowAnswerDto"}}}},"responses":{"200":{"description":"Answer processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Submit guided flow answer","tags":["ai-terminal"]}},"/api/v1/ai-terminal/conversations":{"get":{"description":"Get a list of chat conversations for the authenticated user","operationId":"AiTerminalController_listConversations","parameters":[{"name":"limit","required":false,"in":"query","description":"Maximum conversations to return","schema":{"minimum":1,"maximum":50,"default":20,"type":"number"}},{"name":"offset","required":false,"in":"query","description":"Number of conversations to skip","schema":{"minimum":0,"default":0,"type":"number"}},{"name":"includeArchived","required":false,"in":"query","description":"Include archived conversations","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"Conversations retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListConversationsResponseDto"}}}},"401":{"description":"Unauthorized"}},"security":[{"bearer":[]}],"summary":"List chat conversations","tags":["ai-terminal"]}},"/api/v1/ai-terminal/conversations/{id}":{"get":{"description":"Get a specific conversation including all messages","operationId":"AiTerminalController_getConversation","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Conversation retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatConversationWithMessagesDto"}}}},"401":{"description":"Unauthorized"},"404":{"description":"Conversation not found"}},"security":[{"bearer":[]}],"summary":"Get conversation with messages","tags":["ai-terminal"]},"delete":{"description":"Permanently delete a conversation and all its messages","operationId":"AiTerminalController_deleteConversation","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Conversation deleted"},"401":{"description":"Unauthorized"}},"security":[{"bearer":[]}],"summary":"Delete a conversation","tags":["ai-terminal"]}},"/api/v1/ai-terminal/conversations/{id}/archive":{"post":{"description":"Archive a conversation (can be unarchived later)","operationId":"AiTerminalController_archiveConversation","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Conversation archived"},"401":{"description":"Unauthorized"}},"security":[{"bearer":[]}],"summary":"Archive a conversation","tags":["ai-terminal"]}},"/api/v1/twitter-bot/stats":{"get":{"operationId":"TwitterBotController_getStats","parameters":[],"responses":{"200":{"description":"Bot statistics"}},"summary":"Get bot statistics","tags":["Twitter Bot"]}},"/api/v1/twitter-bot/leaderboard":{"get":{"operationId":"TwitterBotController_getLeaderboard","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"number"}},{"name":"period","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Leaderboard of top traders"}},"summary":"Get top traders via Twitter bot","tags":["Twitter Bot"]}},"/api/v1/twitter-bot/recent-swaps":{"get":{"operationId":"TwitterBotController_getRecentSwaps","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"List of recent swaps"}},"summary":"Get recent swaps executed via bot","tags":["Twitter Bot"]}},"/api/v1/twitter-bot/deployed-tokens":{"get":{"operationId":"TwitterBotController_getDeployedTokens","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"number"}},{"name":"chainId","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"List of deployed tokens"}},"summary":"Get tokens deployed via bot","tags":["Twitter Bot"]}},"/api/v1/twitter-bot/user/{twitterId}":{"get":{"operationId":"TwitterBotController_getUser","parameters":[{"name":"twitterId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"User information"}},"summary":"Get user info by Twitter ID","tags":["Twitter Bot"]}},"/api/v1/twitter-bot/user/{twitterId}/swaps":{"get":{"operationId":"TwitterBotController_getUserSwaps","parameters":[{"name":"twitterId","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"User swap history"}},"summary":"Get user swap history","tags":["Twitter Bot"]}},"/api/v1/twitter-bot/user/{twitterId}/orders":{"get":{"operationId":"TwitterBotController_getUserOrders","parameters":[{"name":"twitterId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"User limit orders"}},"summary":"Get user limit orders","tags":["Twitter Bot"]}},"/api/v1/twitter-bot/user/{twitterId}/dca":{"get":{"operationId":"TwitterBotController_getUserDcaSchedules","parameters":[{"name":"twitterId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"User DCA schedules"}},"summary":"Get user DCA schedules","tags":["Twitter Bot"]}},"/api/v1/twitter-bot/test-mention":{"post":{"operationId":"TwitterBotController_testMention","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Simulate a Twitter mention for testing (staging only)","tags":["Twitter Bot"]}},"/api/v1/twitter-bot/health":{"get":{"operationId":"TwitterBotController_healthCheck","parameters":[],"responses":{"200":{"description":""}},"summary":"Bot health check","tags":["Twitter Bot"]}},"/api/v1/liquidity/opportunities":{"get":{"description":"Returns curated pools on Base with trading-fee APY (apy and feeApy), separate staked AERO rewards APR (rewardApr), TVL, and 24h volume data. Cached for 5 minutes.","operationId":"LiquidityController_getOpportunities","parameters":[],"responses":{"200":{"description":"Curated liquidity pools with APY data"},"403":{"description":"Liquidity provision is not available in this region"}},"summary":"Get curated liquidity opportunities","tags":["liquidity"]}},"/api/v1/liquidity/pool/{address}":{"get":{"description":"Returns liquidity data (trading-fee APY in apy and feeApy, separate staked AERO rewards APR in rewardApr, TVL, volume) for any Base pool by pool address or Uniswap V4 PoolId. Supports curated and non-curated pools. Cached for 5 minutes.","operationId":"LiquidityController_getPoolOpportunity","parameters":[{"name":"address","required":true,"in":"path","description":"Pool address or Uniswap V4 PoolId (0x...)","schema":{"example":"0xb2cc224c1c9feE385f8ad6a55b4d94E92359DC59","type":"string"}}],"responses":{"200":{"description":"Pool liquidity opportunity data"},"403":{"description":"Liquidity provision is not available in this region"}},"summary":"Get liquidity opportunity for any pool","tags":["liquidity"]}},"/api/v1/liquidity/positions/{address}":{"get":{"description":"Returns user LP positions across curated pools (unstaked LP, gauge staked, pending rewards). Cached for 60 seconds.","operationId":"LiquidityController_getUserPositions","parameters":[{"name":"address","required":true,"in":"path","description":"User wallet address (0x...)","schema":{"example":"0x1234567890abcdef1234567890abcdef12345678","type":"string"}}],"responses":{"200":{"description":"User LP positions"},"403":{"description":"Liquidity provision is not available in this region"}},"summary":"Get user LP positions","tags":["liquidity"]}},"/api/v1/pitch-lead":{"post":{"operationId":"PitchLeadController_createLead","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLeadDto"}}}},"responses":{"201":{"description":""}},"summary":"Submit lead info for pitch deck access","tags":["pitch-lead"]}},"/api/v1/pitch-lead/analytics":{"post":{"operationId":"PitchLeadController_submitAnalytics","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitAnalyticsDto"}}}},"responses":{"201":{"description":""}},"summary":"Submit slide view analytics for a lead","tags":["pitch-lead"]}},"/api/v1/mini-app/auth":{"post":{"operationId":"MiniAppController_authenticate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletAuthDto"}}}},"responses":{"200":{"description":"JWT token for authenticated requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletAuthResponseDto"}}}}},"summary":"Authenticate with wallet signature (EIP-191)","tags":["Mini App"]}},"/api/v1/mini-app/agents":{"post":{"operationId":"MiniAppController_createAgent","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAgentDto"}}}},"responses":{"201":{"description":"Agent instance created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentInstanceResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Create agent via mini-app (wallet signature auth)","tags":["Mini App"]}},"/api/v1/backtest/run":{"post":{"operationId":"BacktestController_createRun","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBacktestDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestCreatedResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Start a new backtest run","tags":["Backtest"]}},"/api/v1/backtest/my":{"get":{"operationId":"BacktestController_getMyRuns","parameters":[{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List my backtest runs","tags":["Backtest"]}},"/api/v1/backtest/{id}":{"get":{"operationId":"BacktestController_getRun","parameters":[{"name":"id","required":true,"in":"path","description":"Backtest run UUID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get backtest run status and results","tags":["Backtest"]}},"/api/v1/backtest/{id}/trades":{"get":{"operationId":"BacktestController_getTrades","parameters":[{"name":"id","required":true,"in":"path","description":"Backtest run UUID","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get paginated trades for a backtest run","tags":["Backtest"]}},"/api/v1/agents/instances/{id}/diary":{"get":{"operationId":"AgentDiaryController_getDiary","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number (default 1)","schema":{"type":"number"}},{"name":"take","required":false,"in":"query","description":"Items per page (default 20, max 50)","schema":{"type":"number"}},{"name":"type","required":false,"in":"query","description":"Filter by entry type","schema":{"enum":["all","trades","holds","errors"],"type":"string"}}],"responses":{"200":{"description":"Returns unified diary entries"},"403":{"description":"Not the agent owner"},"404":{"description":"Agent not found"}},"security":[{"bearer":[]}],"summary":"Get agent execution diary (owner only)","tags":["agents"]}},"/api/v1/agents/instances/{id}/reflections/latest":{"get":{"operationId":"AgentReflectionController_getLatest","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReflectionResponseDto"}}}},"204":{"description":"No reflection generated yet"}},"security":[{"bearer":[]}],"summary":"Get latest weekly reflection for an agent (owner only)","tags":["agents"]}},"/api/v1/agents/instances/{id}/reflections":{"get":{"operationId":"AgentReflectionController_listForAgent","parameters":[{"name":"id","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"take","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReflectionListResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"List weekly reflections for an agent (owner only)","tags":["agents"]}},"/api/v1/public/competition/active":{"get":{"operationId":"CompetitionPublicController_getActive","parameters":[],"responses":{"200":{"description":""}},"tags":["CompetitionPublic"]}},"/api/v1/public/competition/history":{"get":{"operationId":"CompetitionPublicController_getHistory","parameters":[],"responses":{"200":{"description":""}},"tags":["CompetitionPublic"]}},"/api/v1/public/competition/{slug}/leaderboard":{"get":{"operationId":"CompetitionPublicController_getLeaderboard","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["CompetitionPublic"]}},"/api/v1/public/competition/{slug}/agent/{agentId}":{"get":{"operationId":"CompetitionPublicController_getAgentStats","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["CompetitionPublic"]}},"/api/v1/wallet/me/portfolio-summary":{"get":{"operationId":"PortfolioSummaryController_getMyPortfolioSummary","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get authenticated portfolio-wide 24h change","tags":["Wallet"]}},"/api/v1/wallet/me/totals":{"get":{"operationId":"WalletTotalsController_getMyTotals","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletTotalsDto"}}}}},"security":[{"bearer":[]}],"summary":"Get authenticated wallet and account totals","tags":["Wallet"]}},"/api/v1/public/trading-agents":{"get":{"operationId":"TradingAgentsController_getOverview","parameters":[{"name":"timeframe","required":false,"in":"query","description":"Performance window: 7d, 30d, or all","schema":{"enum":["7d","30d","all"],"type":"string"}}],"responses":{"200":{"description":"Top overall + per-asset-class performers for the window"}},"summary":"Trading Agents board: top performers over 7d/30d/all-time, by asset class","tags":["public-agents"]}},"/api/v1/account/delete/preview":{"get":{"operationId":"AccountDeletionController_preview","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Whether the account can be deleted, plus any open agents blocking it.","tags":["account"]}},"/api/v1/account/delete":{"post":{"operationId":"AccountDeletionController_deleteInApp","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InAppDeleteAccountDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Permanently delete the authenticated account (in-app).","tags":["account"]}},"/api/v1/account/delete/challenge":{"post":{"operationId":"AccountDeletionController_challenge","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDeleteChallengeDto"}}}},"responses":{"200":{"description":""}},"summary":"Public: request a signature challenge to delete a wallet account.","tags":["account"]}},"/api/v1/account/delete/confirm":{"post":{"operationId":"AccountDeletionController_confirm","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDeleteConfirmDto"}}}},"responses":{"200":{"description":""}},"summary":"Public: confirm deletion with a signed challenge.","tags":["account"]}},"/api/v1/manual-polymarket/{agentId}/place-buy":{"post":{"operationId":"ManualPolymarketController_placeBuy","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacePolymarketBuyDto"}}}},"responses":{"200":{"description":"Order placed or rejected"}},"security":[{"bearer":[]}],"summary":"Place a GTC limit buy on Polymarket. Mirrors PolymarketV2ExecutorService.executePredictBuy.","tags":["manual-polymarket"]}},"/api/v1/prediction-markets/dashboard":{"get":{"operationId":"PredictionDashboardController_getDashboard","parameters":[],"responses":{"200":{"description":"Aggregated performance dashboard"},"403":{"description":"No authorized wallet in session"}},"security":[{"bearer":[]}],"summary":"Prediction-markets performance overview for the authenticated user (HL outcome + Polymarket agents)","tags":["prediction-markets"]}},"/api/v1/prediction-markets/leaderboard":{"get":{"operationId":"PredictionDashboardController_getLeaderboard","parameters":[{"name":"sortBy","required":false,"in":"query","description":"Ranking: realized PnL (default), ROI, or win rate (min 3 settled)","schema":{"enum":["pnl","roi","winRate"],"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Max entries (default 50, max 100)","schema":{"type":"number"}}],"responses":{"200":{"description":"Ranked public prediction agents"}},"summary":"Public prediction-markets leaderboard (public agents, aggregate stats only)","tags":["prediction-markets"]}},"/api/v1/lifecycle-mail/unsubscribe":{"get":{"operationId":"LifecycleMailController_confirm","parameters":[{"name":"w","required":true,"in":"query","schema":{"type":"string"}},{"name":"t","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["LifecycleMail"]},"post":{"operationId":"LifecycleMailController_unsubscribe","parameters":[{"name":"w","required":true,"in":"query","schema":{"type":"string"}},{"name":"t","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["LifecycleMail"]}},"/api/v1/manual-trader-copy/my-subscriptions":{"get":{"operationId":"ManualTraderCopyController_listMy","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List the authenticated user's active copy-trader subscriptions.","tags":["manual-trader-copy"]}},"/api/v1/manual-trader-copy/{subscriptionId}/fidelity-summary":{"get":{"operationId":"ManualTraderCopyController_getFidelitySummary","parameters":[{"name":"subscriptionId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Count copied and skipped leader fills for the authenticated user's subscription.","tags":["manual-trader-copy"]}},"/api/v1/manual-trader-copy/subscribe":{"post":{"operationId":"ManualTraderCopyController_subscribe","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscribeDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Subscribe the authenticated wallet to a leader manual-trader.","tags":["manual-trader-copy"]}},"/api/v1/manual-trader-copy/subscribe/precheck":{"post":{"operationId":"ManualTraderCopyController_precheckSubscribe","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscribePrecheckDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Check whether the authenticated wallet can subscribe to a leader.","tags":["manual-trader-copy"]}},"/api/v1/manual-trader-copy/unsubscribe/{subscriptionId}":{"post":{"operationId":"ManualTraderCopyController_unsubscribe","parameters":[{"name":"subscriptionId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnsubscribeDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancel an active subscription.","tags":["manual-trader-copy"]}},"/api/v1/manual-trader-copy/{subscriptionId}/settings":{"patch":{"operationId":"ManualTraderCopyController_patch","parameters":[{"name":"subscriptionId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchSubscriptionDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Update follower-side controls on a subscription.","tags":["manual-trader-copy"]}},"/api/v1/manual-trader-copy/{subscriptionId}/resume-payment":{"get":{"operationId":"ManualTraderCopyController_getResumePaymentTerms","parameters":[{"name":"subscriptionId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Read the USDC payment terms that pay-and-resume must satisfy for a payment-failed subscription.","tags":["manual-trader-copy"]}},"/api/v1/manual-trader-copy/{subscriptionId}/resume":{"post":{"description":"WO04 F1 / Decision D — requires a verified user-signed USDC renewal payment (`feeTxHash`). The backend never charges the follower wallet; without a valid payment the pause is not cleared and fan-out stays off.","operationId":"ManualTraderCopyController_resume","parameters":[{"name":"subscriptionId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResumeSubscriptionDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Clear a `subscription_payment_failed` pause with a user-signed renewal payment.","tags":["manual-trader-copy"]}},"/api/v1/manual-trader-copy/leader/{leaderAgentId}/config":{"get":{"operationId":"ManualTraderCopyLeaderController_getConfig","parameters":[{"name":"leaderAgentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Read the authenticated leader's monetization config (price + model + accepting flag).","tags":["manual-trader-copy"]},"put":{"operationId":"ManualTraderCopyLeaderController_putConfig","parameters":[{"name":"leaderAgentId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaderConfigDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Save the authenticated leader's monetization config. Existing followers are NOT re-charged on price change (FR-SUB-2).","tags":["manual-trader-copy"]}},"/api/v1/manual-trader-copy/leader/{leaderAgentId}/followers":{"get":{"operationId":"ManualTraderCopyLeaderController_getFollowers","parameters":[{"name":"leaderAgentId","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Paginated list of the authenticated leader's active copiers — wallet, live USDC allocation, and PnL per follower.","tags":["manual-trader-copy"]}},"/api/v1/manual-trader-copy/leader/{leaderAgentId}/deny/{followerAgentId}":{"post":{"operationId":"ManualTraderCopyLeaderController_denyFollower","parameters":[{"name":"leaderAgentId","required":true,"in":"path","schema":{"type":"string"}},{"name":"followerAgentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Pause a specific follower's subscription with reason 'denied_by_leader'. No refund.","tags":["manual-trader-copy"]}},"/api/v1/manual-trader-copy/leader/{leaderAgentId}/analytics":{"get":{"operationId":"ManualTraderCopyLeaderController_getAnalytics","parameters":[{"name":"leaderAgentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Subscriber count + copy-AUM + fees-earned breakdown + 30d churn (Phase 5).","tags":["manual-trader-copy"]}},"/api/v1/manual-trader-copy/leader/{leaderAgentId}/unsettled-fees":{"get":{"operationId":"ManualTraderCopyLeaderController_getUnsettledFees","parameters":[{"name":"leaderAgentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Estimated unsettled performance fees by currency; exact pending transfer amounts require WO04 settlement-attempt persistence.","tags":["manual-trader-copy"]}},"/api/v1/manual-trader-copy/leader/{leaderAgentId}/public-stats":{"get":{"operationId":"ManualTraderCopyPublicController_getPublicStats","parameters":[{"name":"leaderAgentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Public copy-trading stats for a leader agent (subscriber count hidden when < 5).","tags":["manual-trader-copy"]}},"/api/v1/manual-trader-copy/leaderboard/copyable":{"get":{"operationId":"ManualTraderCopyPublicController_getLeaderboard","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"MANUAL_TRADER_V1 leaders accepting subscribers, not Closed, active <= 14 days, ranked by 30-day ROI net of exchange + builder fees and funding. Top 50.","tags":["manual-trader-copy"]}},"/api/v1/agent-copy/leaders":{"get":{"operationId":"PlatformAgentCopyController_listLeaders","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"sortBy","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List public platform Hyperliquid agents copyable in mobile MVP.","tags":["agent-copy"]}},"/api/v1/agent-copy/leaders/{leaderAgentId}":{"get":{"operationId":"PlatformAgentCopyController_getLeader","parameters":[{"name":"leaderAgentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get one copyable platform agent.","tags":["agent-copy"]}},"/api/v1/agent-copy/subscribe":{"post":{"operationId":"PlatformAgentCopyController_subscribe","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopyPlatformAgentDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Create a free follower agent that live-mirrors a platform Hyperliquid agent.","tags":["agent-copy"]}},"/api/v1/discovery/spot-lists":{"get":{"operationId":"PublicDiscoveryListsController_getLists","parameters":[],"responses":{"200":{"description":""}},"tags":["discovery"]}},"/api/v1/dex-indexer/pools":{"get":{"operationId":"DexIndexerController_listPools","parameters":[],"responses":{"200":{"description":""}},"summary":"List indexed DEX pools (most recently traded first)","tags":["dex-indexer"]}},"/api/v1/dex-indexer/pools/{chainId}/{address}":{"get":{"operationId":"DexIndexerController_getPool","parameters":[],"responses":{"200":{"description":""}},"summary":"Get one indexed pool with token metadata + tape stats","tags":["dex-indexer"]}},"/api/v1/dex-indexer/pools/{chainId}/{address}/trades":{"get":{"operationId":"DexIndexerController_listTrades","parameters":[],"responses":{"200":{"description":""}},"summary":"Recent trades (full on-chain tape, newest first)","tags":["dex-indexer"]}},"/api/v1/dex-indexer/pools/{chainId}/{address}/candles":{"get":{"operationId":"DexIndexerController_listCandles","parameters":[],"responses":{"200":{"description":""}},"summary":"Trade-derived OHLCV candles (ascending)","tags":["dex-indexer"]}},"/api/v1/dex-indexer/tokens":{"get":{"operationId":"DexIndexerController_listTokens","parameters":[],"responses":{"200":{"description":""}},"summary":"Search and rank exhaustive indexed DEX tokens","tags":["dex-indexer"]}},"/api/v1/dex-indexer/tokens/{chainId}/{address}":{"get":{"operationId":"DexIndexerController_getToken","parameters":[],"responses":{"200":{"description":""}},"summary":"Get one indexed token and all of its pools","tags":["dex-indexer"]}},"/api/v1/dex-indexer/tokens/{chainId}/{address}/candles":{"get":{"operationId":"DexIndexerController_listTokenCandles","parameters":[],"responses":{"200":{"description":""}},"summary":"Token-centric USD candles (ascending)","tags":["dex-indexer"]}},"/api/v1/market-sentiment/list":{"get":{"operationId":"MarketSentimentController_getList","parameters":[{"name":"tf","required":false,"in":"query","description":"Only 1h (default)","schema":{"enum":["1h"],"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Sentiment snapshot for every listed perp market (public); refreshed in the background of requests","tags":["market-sentiment"]}},"/api/v1/market-sentiment/{asset}":{"get":{"operationId":"MarketSentimentController_getIndex","parameters":[{"name":"asset","required":true,"in":"path","description":"Hyperliquid coin, e.g. BTC or xyz:TSLA","schema":{"type":"string"}},{"name":"tf","required":false,"in":"query","description":"Candle interval (default 1h)","schema":{"enum":["1m","5m","15m","1h","4h","1d","1w"],"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Market Sentiment Index for one Hyperliquid perp market and timeframe (public)","tags":["market-sentiment"]}},"/api/v1/options/currencies":{"get":{"operationId":"DeriveOptionsController_getCurrencies","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Currencies with a Derive options market","tags":["options"]}},"/api/v1/options/chain/{currency}":{"get":{"operationId":"DeriveOptionsController_getChain","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"expiry","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Options chain for one expiry (nearest live expiry when none is given)","tags":["options"]}},"/api/v1/options/ticker/{instrument}":{"get":{"operationId":"DeriveOptionsController_getTicker","parameters":[{"name":"instrument","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Latest quote, IV and Greeks for one option","tags":["options"]}},"/api/v1/options/instrument/{instrument}":{"get":{"operationId":"DeriveOptionsController_getInstrument","parameters":[{"name":"instrument","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Definition of one option (tick size, amount step, fees)","tags":["options"]}},"/api/v1/options/index-chart/{currency}":{"get":{"operationId":"DeriveOptionsController_getIndexChart","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"range","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Index price candles for the chain header sparkline","tags":["options"]}},"/api/v1/options/iv-rank/{currency}":{"get":{"operationId":"DeriveOptionsController_getIvRank","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Constant-maturity 30-day ATM IV, its rank over the recorded history (Plan 063), and that history, oldest first (Plan 067)","tags":["options"]}},"/api/v1/derive-options/me/pots":{"get":{"operationId":"DeriveAccountController_getPots","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Options pots (Plan 068): each subaccount, pending funding choices, and the pot of every currency","tags":["derive-options"]}},"/api/v1/derive-options/me/pots/fund":{"post":{"operationId":"DeriveAccountController_fundPot","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeriveFundPotDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Fund a currency with a margin choice: records the choice and returns its deposit address","tags":["derive-options"]}},"/api/v1/derive-options/me/pots/{id}/cancel":{"post":{"operationId":"DeriveAccountController_cancelPot","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancel a funding choice whose deposit has not arrived","tags":["derive-options"]}},"/api/v1/derive-options/me/account":{"get":{"operationId":"DeriveAccountController_getAccount","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Options account: status, deposit address and minimum, trading key, deposits","tags":["derive-options"]}},"/api/v1/derive-options/me/authorize/prepare":{"post":{"operationId":"DeriveAccountController_prepareAuthorization","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeriveAuthorizePrepareDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Authorize BT365, step 1: confirm the funded subaccount with the wallet login and return the key action to sign","tags":["derive-options"]}},"/api/v1/derive-options/me/authorize/submit":{"post":{"operationId":"DeriveAccountController_submitAuthorization","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeriveAuthorizeSubmitDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Authorize BT365, step 2: register the signed trade-only key on the venue","tags":["derive-options"]}},"/api/v1/derive-options/me/disconnect":{"post":{"operationId":"DeriveAccountController_disconnect","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Retire BT365 trading key; the account and its funds stay yours on derive.xyz (never gated)","tags":["derive-options"]}},"/api/v1/derive-options/tos":{"get":{"operationId":"DeriveTradingController_getTos","parameters":[],"responses":{"200":{"description":""}},"summary":"Options risk and eligibility statement: current version and restricted regions","tags":["derive-options"]}},"/api/v1/derive-options/me/tos/attest":{"post":{"operationId":"DeriveTradingController_attest","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Record the owner acknowledgement of the current options statement for this account","tags":["derive-options"]}},"/api/v1/derive-options/me/trading-status":{"get":{"operationId":"DeriveTradingController_tradingStatus","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"What the order ticket may offer: open/close availability and why not","tags":["derive-options"]}},"/api/v1/derive-options/me/positions":{"get":{"operationId":"DeriveTradingController_positions","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Open option positions with marks and Greeks, and USDC collateral","tags":["derive-options"]}},"/api/v1/derive-options/me/liquidations":{"get":{"operationId":"DeriveTradingController_liquidations","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Liquidation auctions the venue ran on the account (Plan 068.3), newest first","tags":["derive-options"]}},"/api/v1/derive-options/me/orders":{"get":{"operationId":"DeriveTradingController_listOrders","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Open and recent orders, plus orders still being confirmed","tags":["derive-options"]}},"/api/v1/derive-options/me/fills":{"get":{"operationId":"DeriveTradingController_fills","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Recent fills","tags":["derive-options"]}},"/api/v1/derive-options/me/order":{"post":{"operationId":"DeriveTradingController_placeOrder","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeriveOrderRequestDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Buy to open, or sell to close (always reduce-only). Long only.","tags":["derive-options"]}},"/api/v1/derive-options/me/cancel":{"post":{"operationId":"DeriveTradingController_cancel","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeriveCancelRequestDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancel one order (never gated)","tags":["derive-options"]}},"/api/v1/derive-options/me/cancel-all":{"post":{"operationId":"DeriveTradingController_cancelAll","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancel every resting order (never gated)","tags":["derive-options"]}},"/api/v1/derive-options/me/withdrawals":{"get":{"operationId":"DeriveFundsController_listWithdrawals","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Withdrawable USDC, the Ethereum payout address, and recent withdrawals","tags":["derive-options"]}},"/api/v1/derive-options/me/withdraw/prepare":{"post":{"operationId":"DeriveFundsController_prepareWithdrawal","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeriveWithdrawPrepareDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Withdraw, step 1: journal the USDC withdrawal and return the action your wallet signs","tags":["derive-options"]}},"/api/v1/derive-options/me/withdraw/submit":{"post":{"operationId":"DeriveFundsController_submitWithdrawal","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeriveWithdrawSubmitDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Withdraw, step 2: send the signed withdrawal to the venue; it pays out to your wallet","tags":["derive-options"]}},"/api/v1/derive-options/me/withdraw/cancel":{"post":{"operationId":"DeriveFundsController_cancelWithdrawal","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeriveWithdrawCancelDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancel a prepared withdrawal before it is sent to the venue","tags":["derive-options"]}},"/api/v1/derive-options/me/withdrawals/recheck":{"post":{"operationId":"DeriveFundsController_recheckWithdrawals","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeriveWithdrawalsRecheckDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Recheck in-flight withdrawals using a fresh owner login","tags":["derive-options"]}},"/api/v1/derive-options/me/pnl":{"get":{"operationId":"DeriveFundsController_getPnl","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Booked PnL: realized, settled at expiry, and open positions at the last sync","tags":["derive-options"]}},"/api/v1/derive-options/me/spreads/preview":{"post":{"operationId":"DeriveSpreadController_preview","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeriveSpreadRequestDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Price and margin of a spread at mark, before asking for quotes","tags":["derive-options"]}},"/api/v1/derive-options/me/spreads":{"post":{"operationId":"DeriveSpreadController_request","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeriveSpreadRequestDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Ask for quotes on a two-leg spread (open, or close held legs)","tags":["derive-options"]},"get":{"operationId":"DeriveSpreadController_list","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Recent spreads","tags":["derive-options"]}},"/api/v1/derive-options/me/spreads/{id}":{"get":{"operationId":"DeriveSpreadController_status","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"A spread, with its best quote while quoting","tags":["derive-options"]}},"/api/v1/derive-options/me/spreads/{id}/execute":{"post":{"operationId":"DeriveSpreadController_execute","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeriveSpreadExecuteDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Execute one quote, at most at the confirmed limit","tags":["derive-options"]}},"/api/v1/derive-options/me/spreads/{id}/cancel":{"post":{"operationId":"DeriveSpreadController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancel an RFQ still taking quotes (never gated)","tags":["derive-options"]}},"/api/v1/ai-copilot/{agentId}/analyze":{"post":{"operationId":"AiCopilotController_analyze","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeDto"}}}},"responses":{"200":{"description":"Suggestion (status=OK with narrative, or status=NO_SETUP)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestionResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Generate a Copilot suggestion (deterministic levels + Claude narrative)","tags":["ai-copilot"]}},"/api/v1/ai-copilot/{agentId}/suggestions/latest":{"get":{"operationId":"AiCopilotController_getLatestSuggestion","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Most recent Copilot suggestion for the agent","tags":["ai-copilot"]}},"/api/v1/ai-copilot/{agentId}/quota":{"get":{"operationId":"AiCopilotController_getQuota","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Copilot quota — setups today (UTC), free fee, required BT365 holding, and the latest active access-code grant when enabled","tags":["ai-copilot"]}},"/api/v1/ai-copilot/suggestions/{id}/link-trade":{"patch":{"operationId":"AiCopilotController_linkTrade","parameters":[{"name":"id","required":true,"in":"path","description":"Copilot suggestion UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkTradeDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Link a Copilot suggestion to the agent_perps_position.id of the resulting trade","tags":["ai-copilot"]}},"/api/v1/copilot/autopilot/{agentId}/execution-access":{"get":{"operationId":"AutopilotController_executionAccess","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutopilotExecutionAccessDto"}}}}},"security":[{"bearer":[]}],"summary":"Whether this wallet may run Autopilot execution on the agent (flag enabled + rollout 100, admitted by the allowlist — empty = nobody — and owner of the agent). Lets the UI hide the controls from everyone else.","tags":["ai-copilot"]}},"/api/v1/copilot/autopilot/{agentId}/scan":{"post":{"operationId":"AutopilotController_scan","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Scan the most-traded symbols (optionally of one market) on the preset + timeframe and rank the setups by conviction, optionally filtered by setup type, side and strength (no narrative, no fee)","tags":["ai-copilot"]}},"/api/v1/copilot/autopilot/{agentId}/book":{"get":{"operationId":"AutopilotController_book","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"market","required":false,"in":"query","description":"One asset class, or `all` for every class plus the venue leadership","schema":{"default":"all","type":"string","enum":["all","crypto","stocks","commodities","forex","indices"]}},{"name":"riskPerLegUsd","required":false,"in":"query","description":"Dollars at risk per leg between entry and stop","schema":{"default":50,"type":"number"}},{"name":"maxLegsPerSide","required":false,"in":"query","schema":{"default":6,"type":"number"}},{"name":"maxLegsPerTheme","required":false,"in":"query","description":"Legs per side from one theme or sector — the \"never long all AI\" rule as a cap","schema":{"default":2,"type":"number"}},{"name":"grossCapUsd","required":false,"in":"query","description":"Gross notional ceiling, USD. Absent = none.","schema":{"type":"number"}},{"name":"maxPositionUsd","required":false,"in":"query","description":"Per-position notional ceiling, USD. Absent = none.","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookResponseDto"}}}},"403":{"description":"Not the owner, under the BT365 holding floor, or the book flag is off"}},"security":[{"bearer":[]}],"summary":"The long/short book for one asset class (or every class): leaders long, laggards short, chart-agreeing and timed on the daily Scanner reading inside a 20–60 day horizon, sized on equal risk, with the class regime, pairs, and the waiting and watch lists. Reads stored readings only; refreshes them in the background.","tags":["ai-copilot"]}},"/api/v1/copilot/autopilot/{agentId}/book/scorecard":{"get":{"operationId":"AutopilotController_scorecard","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"windowDays","required":false,"in":"query","description":"Trades closed within this many days count","schema":{"default":365,"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScorecardResponseDto"}}}},"403":{"description":"Not the owner, under the BT365 holding floor, or the book flag is off"}},"security":[{"bearer":[]}],"summary":"The process scorecard over the account’s closed perps positions: average days in trade, trades per year, win rate and winner/loser ratio against their bands, plus open positions past the 60-day time stop","tags":["ai-copilot"]}},"/api/v1/copilot/autopilot/{agentId}/book/catalysts":{"get":{"operationId":"AutopilotController_listCatalysts","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalystListResponseDto"}}}},"403":{"description":"Not the owner, under the BT365 holding floor, or the book flag is off"}},"security":[{"bearer":[]}],"summary":"The owner’s own catalyst calendar (Plan 055 §6): dated events the owner filed for a market or for every market (`*`). Shown on book and Scanner rows beside the EDGAR estimate; never scored.","tags":["ai-copilot"]},"post":{"operationId":"AutopilotController_createCatalyst","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCatalystDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalystRowDto"}}}},"400":{"description":"Bad date, date out of range, or the per-account cap reached"}},"security":[{"bearer":[]}],"summary":"File one catalyst: a symbol or `*`, a kind, a YYYY-MM-DD date and an optional note","tags":["ai-copilot"]}},"/api/v1/copilot/autopilot/{agentId}/book/catalysts/{id}":{"delete":{"operationId":"AutopilotController_removeCatalyst","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","description":"Catalyst UUID","schema":{"type":"string"}}],"responses":{"204":{"description":""},"404":{"description":"No such catalyst on this account"}},"security":[{"bearer":[]}],"summary":"Remove one of the owner’s catalysts","tags":["ai-copilot"]}},"/api/v1/copilot/autopilot/{agentId}/book/backtest":{"post":{"operationId":"AutopilotController_startBacktest","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartBookBacktestDto"}}}},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartBookBacktestResponseDto"}}}},"403":{"description":"Not the owner, under the BT365 holding floor, or the book flag is off"},"409":{"description":"A backtest is already running"},"429":{"description":"A backtest ran recently"}},"security":[{"bearer":[]}],"summary":"Replay the long/short book over the venue’s daily history (Plan 057): the live rank, bias, breadth tilt, Scanner timing, equal-risk sizing and 60-day time stop, with next-open fills and the process scorecard over the closed trades. Runs in the background; poll GET for the result. One run per owner every ten minutes.","tags":["ai-copilot"]},"get":{"operationId":"AutopilotController_latestBacktest","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookBacktestRunDto"}}}},"404":{"description":"No backtest yet"}},"security":[{"bearer":[]}],"summary":"The owner’s latest book backtest: running, done with the replay, or failed","tags":["ai-copilot"]}},"/api/v1/copilot/autopilot/{agentId}/book/backtest/{runId}":{"get":{"operationId":"AutopilotController_backtestById","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"runId","required":true,"in":"path","description":"Run UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookBacktestRunDto"}}}}},"security":[{"bearer":[]}],"summary":"One book backtest by id","tags":["ai-copilot"]}},"/api/v1/copilot/autopilot/{agentId}/scan/recheck":{"post":{"operationId":"AutopilotController_recheck","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanRecheckDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanRecheckResponseDto"}}}},"503":{"description":"The shared market-data budget is spent — try again shortly"}},"security":[{"bearer":[]}],"summary":"Re-read ONE scanned market live before acting on its setup: returns the fresh levels, or says it no longer clears the gate","tags":["ai-copilot"]}},"/api/v1/copilot/autopilot/{agentId}/start":{"post":{"operationId":"AutopilotController_start","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartAutopilotDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutopilotSessionDto"}}}},"403":{"description":"Autopilot execution is off, the wallet is not admitted by the flag, or not the owner"},"409":{"description":"A session is already running, or a position is open"}},"security":[{"bearer":[]}],"summary":"Start an Autopilot execution session (gated by AUTOPILOT_EXECUTION_ENABLED): trades the scan ledger unattended under the given caps","tags":["ai-copilot"]}},"/api/v1/copilot/autopilot/{agentId}/update":{"post":{"operationId":"AutopilotController_update","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartAutopilotDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutopilotSessionDto"}}}},"403":{"description":"Wallet not allowlisted for Autopilot execution, or not the owner"},"404":{"description":"No active session"}},"security":[{"bearer":[]}],"summary":"Re-configure the live Autopilot session in place (admin allowlist only): the new caps apply from the next tick; peak equity and open positions are kept","tags":["ai-copilot"]}},"/api/v1/copilot/autopilot/{agentId}/stop":{"post":{"operationId":"AutopilotController_stop","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutopilotSessionDto"}}}},"404":{"description":"No active session"}},"security":[{"bearer":[]}],"summary":"Stop the active Autopilot session. Open positions are left to the owner.","tags":["ai-copilot"]}},"/api/v1/copilot/autopilot/{agentId}/session":{"get":{"operationId":"AutopilotController_getSession","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutopilotSessionDto"}}}}},"security":[{"bearer":[]}],"summary":"Active Autopilot session for the agent (else the most recently stopped one) + computed quotaUsedToday","tags":["ai-copilot"]}},"/api/v1/copilot/autopilot/{agentId}/history":{"get":{"operationId":"AutopilotController_getHistory","parameters":[{"name":"agentId","required":true,"in":"path","description":"Agent instance UUID","schema":{"type":"string"}},{"name":"window","required":false,"in":"query","description":"Rolling window (default 24h, UTC boundaries)","schema":{"enum":["24h","7d","30d","all"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Suggestion history rows + aggregated stats for the agent","tags":["ai-copilot"]}},"/api/v1/copilot/book-lean/{currency}":{"get":{"operationId":"BookLeanController_lean","parameters":[{"name":"currency","required":true,"in":"path","schema":{"enum":["BTC","ETH"],"type":"string"}},{"name":"riskPerLegUsd","required":false,"in":"query","description":"Dollars at risk per leg; sizes the leg and its option proposal","schema":{"default":50,"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookLeanResponseDto"}}}},"403":{"description":"Under the BT365 holding floor, the book flag is off, or options are not on for this wallet"}},"security":[{"bearer":[]}],"summary":"Where the long/short book stands on BTC or ETH: the leg with its option proposal, the waiting or watch row, or out of the book. The crypto class at the book's default caps.","tags":["ai-copilot"]}},"/api/v1/copilot/access-code/redeem":{"post":{"operationId":"CopilotAccessCodeController_redeem","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemCopilotAccessCodeDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Redeem an access code for the authenticated wallet.","tags":["copilot-access-codes"]}},"/api/v1/strategy-generator/perps":{"post":{"description":"Uses the LLM gateway (OpenRouter BYOA credits or platform compute credits) to write a strategy brief the perps AI interpreter can execute. 402 when the user has no credits.","operationId":"StrategyGeneratorController_generatePerpsStrategy","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneratePerpsStrategyDto"}}}},"responses":{"200":{"description":"Generated strategy text"},"402":{"description":"Insufficient AI credits"}},"security":[{"bearer":[]}],"summary":"Generate a perps strategy prompt from selected assets + direction","tags":["strategy-generator"]}},"/api/v1/investor/auth/login":{"post":{"operationId":"InvestorController_login","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvestorLoginDto"}}}},"responses":{"200":{"description":""}},"tags":["investor"]}},"/api/v1/investor/auth/change-password":{"post":{"operationId":"InvestorController_changePassword","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeInvestorPasswordDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["investor"]}},"/api/v1/investor/me":{"get":{"operationId":"InvestorController_me","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["investor"]}},"/api/v1/investor/overview":{"get":{"operationId":"InvestorController_overview","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["investor"]}},"/api/v1/investor/positions":{"get":{"operationId":"InvestorController_positions","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["investor"]}},"/api/v1/investor/performance":{"get":{"operationId":"InvestorController_performance","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["investor"]}},"/api/v1/investor/trades":{"get":{"operationId":"InvestorController_trades","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}},{"name":"from","required":true,"in":"query","schema":{"type":"string"}},{"name":"to","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["investor"]}},"/api/v1/investor/spot":{"get":{"operationId":"InvestorController_spot","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["investor"]}},"/api/v1/investor/nfts":{"get":{"operationId":"InvestorController_nfts","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["investor"]}},"/api/v1/investor/liquidity":{"get":{"operationId":"InvestorController_liquidity","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["investor"]}},"/api/v1/investor/equity-curve":{"get":{"operationId":"InvestorController_equityCurve","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["investor"]}},"/api/v1/investor/benchmark":{"get":{"operationId":"InvestorController_benchmark","parameters":[{"name":"asset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["investor"]}},"/api/v1/investor/statement.html":{"get":{"operationId":"InvestorController_statement","parameters":[{"name":"print","required":true,"in":"query","schema":{"type":"string"}},{"name":"from","required":true,"in":"query","schema":{"type":"string"}},{"name":"to","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["investor"]}},"/api/v1/investor/trades.csv":{"get":{"operationId":"InvestorController_tradesCsv","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["investor"]}},"/api/v1/investor/otc/offers":{"get":{"operationId":"OtcInvestorController_offers","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["investor-otc"]}},"/api/v1/investor/otc/orders":{"get":{"operationId":"OtcInvestorController_orders","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["investor-otc"]},"post":{"operationId":"OtcInvestorController_createOrder","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOtcPurchaseDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["investor-otc"]}},"/api/v1/investor/otc/offers/{id}":{"get":{"operationId":"OtcInvestorController_offer","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["investor-otc"]}},"/api/v1/investor/otc/orders/{id}/cancel":{"post":{"operationId":"OtcInvestorController_cancelOrder","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelOtcPurchaseDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["investor-otc"]}},"/api/v1/leaderboard":{"get":{"operationId":"LeaderboardController_getLeaderboard","parameters":[{"name":"timeframe","required":false,"in":"query","schema":{"default":"7D","type":"string","enum":["24H","7D","30D","ALL"]}},{"name":"sort","required":false,"in":"query","schema":{"default":"roi","type":"string","enum":["roi","pnl","active","newest"]}},{"name":"markets","required":false,"in":"query","description":"CSV of spot,perps. Omitted = both.","schema":{"type":"array","items":{"type":"string"}}},{"name":"kinds","required":false,"in":"query","description":"CSV of agent,human. Omitted = both.","schema":{"type":"array","items":{"type":"string"}}},{"name":"limit","required":false,"in":"query","schema":{"maximum":100,"default":50,"type":"number"}},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Unified leaderboard across spot and perps, agents and humans.","tags":["leaderboard"]}},"/api/v1/traders/{id}/summary":{"get":{"operationId":"LeaderboardController_getTraderSummary","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"timeframe","required":false,"in":"query","schema":{"default":"7D","type":"string","enum":["24H","7D","30D","ALL"]}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Per-timeframe ROI/PnL, win rate, volume and a longer curve.","tags":["leaderboard"]}},"/api/v1/traders/{id}/follow":{"get":{"operationId":"LeaderboardController_getTraderFollow","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Follow state and follower count for a human trader.","tags":["leaderboard"]},"post":{"operationId":"LeaderboardController_followTrader","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Follow a human trader from the leaderboard.","tags":["leaderboard"]},"delete":{"operationId":"LeaderboardController_unfollowTrader","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Unfollow a human trader.","tags":["leaderboard"]}},"/api/v1/traders/following":{"get":{"operationId":"LeaderboardController_listFollowing","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Board account ids this wallet follows (agents and humans).","tags":["leaderboard"]}},"/api/v1/leaderboard/preferences":{"get":{"operationId":"LeaderboardController_getPreferences","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["leaderboard"]},"post":{"operationId":"LeaderboardController_setPreferences","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaderboardPreferenceDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["leaderboard"]}},"/api/v1/public/wallets/{followeeAddress}/follow":{"post":{"operationId":"UserFollowController_follow","parameters":[{"name":"followeeAddress","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["UserFollow"]},"delete":{"operationId":"UserFollowController_unfollow","parameters":[{"name":"followeeAddress","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["UserFollow"]}},"/api/v1/public/wallets/{address}/followers":{"get":{"operationId":"UserFollowController_followers","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["UserFollow"]}},"/api/v1/public/wallets/{address}/following":{"get":{"operationId":"UserFollowController_following","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["UserFollow"]}},"/api/v1/public/wallets/{address}/follow-counts":{"get":{"operationId":"UserFollowController_counts","parameters":[{"name":"address","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["UserFollow"]}},"/api/v1/public/wallets/{followeeAddress}/is-following":{"get":{"operationId":"UserFollowController_isFollowing","parameters":[{"name":"followeeAddress","required":true,"in":"path","schema":{"type":"string"}},{"name":"followerAddress","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["UserFollow"]}},"/api/v1/feed/global":{"get":{"operationId":"FeedController_getGlobalFeed","parameters":[],"responses":{"200":{"description":""}},"tags":["Feed"]}},"/api/v1/share-cards/{shortId}.png":{"get":{"operationId":"ShareCardsController_image","parameters":[{"name":"shortId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Render a public closed-trade share card.","tags":["share-cards"]}},"/api/v1/share-cards/{shortId}":{"get":{"operationId":"ShareCardsController_landing","parameters":[{"name":"shortId","required":true,"in":"path","schema":{"type":"string"}},{"name":"ref","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Crawler landing page for a public closed-trade share card.","tags":["share-cards"]}}},"info":{"title":"BlockTrader365 API","description":"\n## BT365 AI Agent Trading Infrastructure API\n\nBlockTrader365 provides the financial infrastructure every onchain agent needs.\n\n### Features\n- **Agent Marketplace**: Create, deploy, and manage AI trading agents\n- **Token Launch**: Deploy ERC20 tokens with fair launch protections\n- **Swaps**: Execute token swaps across multiple DEXes\n- **Portfolio**: Track wallet balances and performance\n\n### Authentication\n- Most read endpoints are public\n- Write operations require Privy authentication (Bearer token)\n- SDK users can authenticate with X-API-Key header\n\n### Base URL\n- Production: https://bt365.ai/api/v1\n- Staging: https://bt365stage.eu/api/v1\n\n### Rate Limits\n- Public endpoints: 300 requests/minute\n- Authenticated endpoints: 1000 requests/minute\n\n### AI Agent Integration\n- ERC-8004 Discovery: https://bt365.ai/.well-known/agent.json\n- LLM Guide: https://bt365.ai/llms.txt\n- MCP Server: https://www.npmjs.com/package/@bt365/mcp-server\n    ","version":"1.0","contact":{}},"tags":[{"name":"Agents","description":"AI trading agent management - create, deploy, monitor agents"},{"name":"Agent Templates","description":"Pre-built strategy templates for agents"},{"name":"Swaps","description":"Token swap quotes and execution"},{"name":"Tokens","description":"Token search, prices, and deployment"},{"name":"Wallet","description":"Wallet balances and portfolio tracking"},{"name":"AI Terminal","description":"Natural language trading interface"},{"name":"Pool","description":"Liquidity pool data and management"}],"servers":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http","description":"Privy authentication token"},"api-key":{"type":"apiKey","in":"header","name":"X-API-Key","description":"SDK API key (for external developers)"},"BT365-API-Key":{"type":"apiKey","in":"header","name":"X-BT365-APIKEY","description":"Trading Bot API key id. Requests also require X-BT365-TIMESTAMP and X-BT365-SIGNATURE HMAC headers."}},"schemas":{"ExternalWalletChallengeDto":{"type":"object","properties":{"address":{"type":"string"},"chainType":{"type":"string","enum":["ethereum","solana"]}},"required":["address","chainType"]},"AddExternalWalletDto":{"type":"object","properties":{"address":{"type":"string"},"chainType":{"type":"string","enum":["ethereum","solana"]},"signature":{"type":"string"},"label":{"type":"string","nullable":true}},"required":["address","chainType","signature"]},"ImportSignInWalletDto":{"type":"object","properties":{"address":{"type":"string"},"chainType":{"type":"string","enum":["ethereum","solana"]}},"required":["address","chainType"]},"UpdateExternalWalletLabelDto":{"type":"object","properties":{"label":{"type":"string","nullable":true}},"required":["label"]},"ResponseDto":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"data":{"type":"object"}},"required":["success","message","data"]},"TokensDataDto":{"type":"object","properties":{"token":{"type":"string"},"refresh":{"type":"string"}},"required":["token","refresh"]},"SignInRequestDto":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"}},"required":["email","password"]},"TwoFactorVerifyRequestDto":{"type":"object","properties":{"mfaToken":{"type":"string"},"code":{"type":"string","description":"6-digit TOTP code or a backup code"}},"required":["mfaToken","code"]},"TwoFactorSetupResponseDto":{"type":"object","properties":{"otpauthUrl":{"type":"string"},"qrDataUrl":{"type":"string","description":"data:image/png;base64 QR for the otpauthUrl"}},"required":["otpauthUrl","qrDataUrl"]},"TwoFactorEnableResponseDto":{"type":"object","properties":{"backupCodes":{"description":"Single-use backup codes — shown once","type":"array","items":{"type":"string"}}},"required":["backupCodes"]},"TwoFactorEnableRequestDto":{"type":"object","properties":{"code":{"type":"string","description":"6-digit TOTP code from the authenticator app"}},"required":["code"]},"":{"type":"object","properties":{}},"TwoFactorDisableRequestDto":{"type":"object","properties":{"code":{"type":"string","description":"6-digit TOTP code or a backup code"}},"required":["code"]},"ChangePasswordRequestDto":{"type":"object","properties":{"oldPassword":{"type":"string"},"newPassword":{"type":"string"}},"required":["oldPassword","newPassword"]},"SetPasswordApproveRequestDto":{"type":"object","properties":{"token":{"type":"string"},"password":{"type":"string"},"confirm":{"type":"string"}},"required":["token","password","confirm"]},"RefreshTokenResponseDto":{"type":"object","properties":{"userId":{"type":"string"},"token":{"type":"string"}},"required":["userId","token"]},"RefreshRequestDto":{"type":"object","properties":{}},"ForgotPasswordRequestDto":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"EmptyResponseDto":{"type":"object","properties":{}},"FormMailRequestDto":{"type":"object","properties":{"email":{"type":"string"},"chainId":{"type":"string","enum":["ETHEREUM","HYPEREVM","ROBINHOOD","BASE","ARBITRUM","SOLANA_MAINNET",42161,8453,1,999,4663,900001]},"tokenName":{"type":"string"},"website":{"type":"string"},"message":{"type":"string"}},"required":["email","chainId","tokenName","message"]},"ProfileResponseDto":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","email","createdAt","updatedAt"]},"Token":{"type":"object","properties":{}},"PoolResponseDto":{"type":"object","properties":{"id":{"type":"string"},"address":{"type":"string"},"name":{"type":"string"},"category":{"type":"string"},"chainId":{"type":"number"},"type":{"type":"string"},"listingSource":{"type":"string","enum":["manual","platform_launch","auto"],"description":"How the pool was listed: manual (admin), platform_launch, or auto (auto-listing gate)"},"spotListed":{"type":"boolean","description":"Whether an admin has selected this pool for the public spot catalog. Visibility only — an unlisted pool stays priced, charted and tradable by direct link."},"tokenType":{"type":"string"},"order":{"type":"number"},"webpage":{"type":"string"},"x":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"token0":{"$ref":"#/components/schemas/Token"},"token1":{"$ref":"#/components/schemas/Token"},"pointToken":{"$ref":"#/components/schemas/Token"},"mainToken":{"$ref":"#/components/schemas/Token"},"apy":{"type":"number","nullable":true,"description":"Calculated APY based on pool volume, fee tier, and pool TVL; null when the fee tier is unknown"},"feeTier":{"type":"number","nullable":true,"description":"Fee tier in basis points (e.g., 3000 = 0.3%); null when unavailable"},"poolVolume24h":{"type":"string","description":"Pool-specific 24h trading volume in USD"},"poolTvl":{"type":"string","description":"Pool-specific total value locked (liquidity) in USD"},"isLowLiquidity":{"type":"boolean","description":"True when pool TVL is below $100k - indicates potential liquidity migration"}},"required":["id","address","name","category","chainId","type","tokenType","order","createdAt","updatedAt"]},"PoolInfoResponseDto":{"type":"object","properties":{"webpage":{"type":"string"},"x":{"type":"string"},"logo":{"type":"string"}}},"SubScoresDto":{"type":"object","properties":{"social":{"type":"number","description":"Social sub-score (0-100)"},"onChain":{"type":"number","description":"On-chain sub-score (0-100)"},"safety":{"type":"number","description":"Safety sub-score (0-100)"},"momentum":{"type":"number","description":"Momentum sub-score (0-100)"},"ta":{"type":"number","description":"Technical Analysis sub-score (0-100)"}},"required":["social","onChain","safety","momentum","ta"]},"TradeSignalReasonDto":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code identifying this reason — safe for FE switch statements"},"label":{"type":"string","description":"Short label rendered inline next to the help icon"},"detail":{"type":"string","description":"Plain-English explanation of what this signal means, shown in tooltip"},"impact":{"type":"number","description":"Signed score impact (+ bullish, - bearish)"}},"required":["code","label","detail","impact"]},"TradeSignalDto":{"type":"object","properties":{"action":{"type":"string","description":"Trade action recommendation","enum":["strong_buy","buy","hold","sell","strong_sell"]},"confidence":{"type":"number","description":"Confidence percentage (0-100)"},"reasons":{"description":"Top reasons for the signal with code/label/detail","type":"array","items":{"$ref":"#/components/schemas/TradeSignalReasonDto"}}},"required":["action","confidence","reasons"]},"TokenRatingResponseDto":{"type":"object","properties":{"tokenAddress":{"type":"string"},"chainId":{"type":"number"},"poolAddress":{"type":"string"},"compositeScore":{"type":"number","description":"Composite score (0-100)"},"grade":{"type":"string","enum":["A","B","C","D","F"],"description":"Letter grade: A, B, C, D, or F"},"gradeLabel":{"type":"string","description":"Human-readable grade label"},"subScores":{"$ref":"#/components/schemas/SubScoresDto"},"tradeSignal":{"description":"Buy/sell trade signal","allOf":[{"$ref":"#/components/schemas/TradeSignalDto"}]},"signals":{"type":"object","description":"Detailed signal breakdown"},"computedAt":{"format":"date-time","type":"string"},"cached":{"type":"boolean"}},"required":["tokenAddress","chainId","poolAddress","compositeScore","grade","gradeLabel","subScores","tradeSignal","computedAt","cached"]},"PoolPriceResponseDto":{"type":"object","properties":{"address":{"type":"string"},"price":{"type":"string"},"change24h":{"type":"string"},"volume24h":{"type":"string"},"mktcap":{"type":"string"}},"required":["address"]},"JupiterSwapRequestDto":{"type":"object","properties":{}},"PoolMarketStatsResponseDto":{"type":"object","properties":{"available":{"type":"boolean"},"alertsAvailable":{"type":"boolean"},"intervals":{"type":"object"},"fdvUsd":{"type":"number","nullable":true},"marketCapUsd":{"type":"number","nullable":true},"fetchedAt":{"type":"number"}},"required":["available","alertsAvailable"]},"SwapResponseDto":{"type":"object","properties":{"id":{"type":"string"},"poolAddress":{"type":"string"},"timestamp":{"format":"date-time","type":"string"},"tick":{"type":"number"},"account":{"type":"string"},"points":{"type":"number"},"price":{"type":"number"},"amountMainToken":{"type":"number"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","poolAddress","timestamp","tick","account","points","price","amountMainToken","createdAt","updatedAt"]},"HyperEvmQuoteDto":{"type":"object","properties":{"tokenIn":{"type":"string","description":"Input ERC-20 token address on HyperEVM"},"tokenOut":{"type":"string","description":"Output ERC-20 token address on HyperEVM"},"amountInRaw":{"type":"string","description":"Amount in raw token units"},"recipient":{"type":"string","description":"Final recipient wallet address"},"slippageBps":{"type":"number","description":"Slippage in basis points","default":50},"decimalsIn":{"type":"number","description":"Optional display metadata; validated against the server token catalog and never used for money or signature math"},"decimalsOut":{"type":"number","description":"Optional display metadata; validated against the server token catalog and never used for money or signature math"}},"required":["tokenIn","tokenOut","amountInRaw","recipient"]},"UserStatsResponseDto":{"type":"object","properties":{"points":{"type":"string"},"swapsCount":{"type":"number"},"volumeUsd":{"type":"string"},"balanceUsd":{"type":"string"},"currentPnl":{"type":"string"},"realizedPnl":{"type":"string"},"totalPnl":{"type":"string"},"winRate":{"type":"number"},"profitablePositions":{"type":"number"},"totalPositions":{"type":"number"},"tokensTraded":{"type":"number"},"bestPnl":{"type":"string"},"worstPnl":{"type":"string"},"twitterHandle":{"type":"string"}},"required":["points","swapsCount","volumeUsd","balanceUsd","currentPnl","realizedPnl","totalPnl","winRate","profitablePositions","totalPositions","tokensTraded","bestPnl","worstPnl"]},"UpdateWalletProfileDto":{"type":"object","properties":{"bio":{"type":"string","description":"Plain-text public profile biography. Send null to clear.","example":"On-chain trader and systems builder.","nullable":true},"username":{"type":"string","description":"Unique display name (letters, numbers, underscores). Send null or empty string to clear.","example":"IGME101","nullable":true},"twitterHandle":{"type":"string","description":"Twitter/X username (without @). Send null or empty string to disconnect.","example":"jack","nullable":true},"reconfirm":{"type":"boolean","description":"Forces a live Privy identity read instead of the 60-second cache. Set by the mobile re-confirm control after successful X re-authorization.","example":true}}},"WalletActivitySwapDto":{"type":"object","properties":{"tokenInAddress":{"type":"string"},"tokenInSymbol":{"type":"string","nullable":true},"amountIn":{"type":"string","description":"Raw decimal string as stored"},"tokenOutAddress":{"type":"string"},"tokenOutSymbol":{"type":"string","nullable":true},"amountOut":{"type":"string","description":"Raw decimal string as stored"},"protocol":{"type":"string","nullable":true,"description":"ProtocolList enum value as a string"}},"required":["tokenInAddress","amountIn","tokenOutAddress","amountOut"]},"WalletActivityBridgeDto":{"type":"object","properties":{"sourceChainId":{"type":"number","description":"EVM chain the USDC was burned on"},"destChainId":{"type":"number","description":"EVM chain the USDC is minted on"},"stage":{"type":"string","enum":["auth_relayed","burned","attested","minted","completed","failed","failed_terminal"],"description":"Raw CCTP lifecycle stage, for a progress label. The coarse `status` above is the one to branch on: completed is confirmed; failed and failed_terminal are failed; all forward pipeline stages are pending."},"burnTxHash":{"type":"string","nullable":true,"description":"Source-chain depositForBurn tx"},"mintTxHash":{"type":"string","nullable":true,"description":"Dest-chain receiveMessage (mint) tx"},"finalityThreshold":{"type":"number","nullable":true,"description":"CCTP finality threshold the burn actually ran at — 1000 fast, 2000 standard. Null on rows burned before the tier was recorded; read null as standard."},"feeRaw":{"type":"string","nullable":true,"description":"Fee ceiling authorized as CCTP maxFee, raw USDC. \"0\" on a standard burn."},"feePayer":{"type":"string","nullable":true,"enum":["platform","user"],"description":"Who absorbed the fast-tier fee. Null when no fee applied."},"requestedSpeed":{"type":"string","nullable":true,"enum":["standard","fast"],"description":"The tier the client asked for. Differs from the delivered tier when the bridge degraded to standard."}},"required":["sourceChainId","destChainId","stage"]},"WalletActivityCrossChainSwapDto":{"type":"object","properties":{"label":{"type":"string","enum":["Cross-chain swap"]},"sourceChainId":{"type":"number"},"destChainId":{"type":"number"},"inputTokenAddress":{"type":"string"},"inputTokenSymbol":{"type":"string"},"inputDecimals":{"type":"number"},"inputAmountRaw":{"type":"string","description":"Raw input-token units"},"outputTokenAddress":{"type":"string"},"outputTokenSymbol":{"type":"string"},"outputDecimals":{"type":"number"},"outputAmountRaw":{"type":"string","description":"Actual raw output-token units, falling back to quoted expected output"},"sourceTxHash":{"type":"string","nullable":true},"fulfillTxHash":{"type":"string","nullable":true},"refundTxHash":{"type":"string","nullable":true}},"required":["label","sourceChainId","destChainId","inputTokenAddress","inputTokenSymbol","inputDecimals","inputAmountRaw","outputTokenAddress","outputTokenSymbol","outputDecimals","outputAmountRaw"]},"WalletActivityItemDto":{"type":"object","properties":{"id":{"type":"string","description":"'swap:<uuid>' | 'send:<uuid>' | 'bridge:<uuid>' | 'cross-chain-swap:<uuid>' | 'transfer:<projectionId>'"},"type":{"type":"string","enum":["swap","transfer","bridge","cross_chain_swap"]},"status":{"type":"string","enum":["confirmed","pending","failed"]},"chainId":{"type":"number"},"txHash":{"type":"string","nullable":true},"timestamp":{"type":"string","description":"ISO 8601"},"direction":{"type":"string","enum":["in","out","self"],"nullable":true,"description":"transfers only; null for swaps"},"counterparty":{"type":"string","nullable":true,"description":"transfers only; the other address"},"tokenAddress":{"type":"string","nullable":true,"description":"transfers only"},"tokenSymbol":{"type":"string","nullable":true},"tokenDecimals":{"type":"number","nullable":true},"amount":{"type":"string","nullable":true,"description":"Human decimal string, UNSIGNED — the client signs it by `direction`"},"amountUsd":{"type":"number","nullable":true},"isAddressPoisoningFlagged":{"type":"boolean","description":"True when this transfer matches an address-poisoning defence"},"addressPoisoningFlagReason":{"type":"string","nullable":true,"enum":["blocklisted_counterparty","dust_from_unknown_counterparty"]},"swap":{"nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/WalletActivitySwapDto"}]},"bridge":{"nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/WalletActivityBridgeDto"}]},"crossChainSwap":{"nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/WalletActivityCrossChainSwapDto"}]}},"required":["id","type","status","chainId","timestamp","isAddressPoisoningFlagged"]},"WalletActivityMetaDto":{"type":"object","properties":{"page":{"type":"number"},"limit":{"type":"number"},"total":{"type":"number","description":"Sum of the per-source row counts. Overstates slightly when an indexer row duplicates an app-level row, and UNDERSTATES whenever `degradedSources` is non-empty (a failed source contributes 0)."},"hasMore":{"type":"boolean","description":"True when more rows exist after this page inside the guaranteed-complete window."},"capped":{"type":"boolean","description":"True when the requested page reaches past the per-source fetch ceiling, so this page is NOT guaranteed to be the correct slice of the full merged history. Clients must stop paginating (or warn) rather than trust the rows."},"degradedSources":{"type":"array","description":"Sources that failed to read for this request. Non-empty = the feed is INCOMPLETE; clients must say so instead of rendering the partial list as authoritative.","items":{"type":"string","enum":["swaps","gaslessSends","indexerTransfers","bridges","crossChainSwaps"]}}},"required":["page","limit","total","hasMore","capped","degradedSources"]},"WalletActivityResponseDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WalletActivityItemDto"}},"meta":{"$ref":"#/components/schemas/WalletActivityMetaDto"}},"required":["items","meta"]},"SolanaWalletTokenStatsRequestDto":{"type":"object","properties":{}},"UpdateTwitterHandleDto":{"type":"object","properties":{"twitterHandle":{"type":"string","description":"Twitter/X username (without @). Send null or empty string to disconnect.","example":"jack","nullable":true},"reconfirm":{"type":"boolean","description":"Forces a live Privy identity read instead of the 60-second cache. Set by the web re-confirm button after successful X re-authorization.","example":true}},"required":["twitterHandle"]},"UpdatePreferencesDto":{"type":"object","properties":{"email":{"type":"string","description":"Email address for notifications"},"emailEnabled":{"type":"boolean"},"notifyOrderExecuted":{"type":"boolean"},"notifyOrderFailed":{"type":"boolean"},"notifyAgentTrade":{"type":"boolean"},"notifyAgentStatusChange":{"type":"boolean"},"notifyAgentGasWarning":{"type":"boolean"},"notifyAgentHealthChange":{"type":"boolean"},"notifyAgentReview":{"type":"boolean"},"notifyPriceAlert":{"type":"boolean"},"notifyWalletBalance":{"type":"boolean"},"notifyNewFollower":{"type":"boolean"},"notifySomeoneCopiedYou":{"type":"boolean"},"notifyFollowedTraderOpenedPosition":{"type":"boolean"},"notifyPush":{"type":"boolean","description":"Master switch for mobile push delivery"},"notifyCampaigns":{"type":"boolean","description":"Receive news and event push campaigns"},"walletSummaryFrequency":{"type":"string","enum":["daily","weekly","off"]},"notifyLifecycle":{"type":"boolean","description":"Receive lifecycle mail: onboarding, the weekly agent summary and win-back"}}},"PriceAlertStyleDto":{"type":"object","properties":{"color":{"type":"string","description":"Line colour as #RRGGBB or #RRGGBBAA"},"width":{"type":"number","minimum":1,"maximum":4},"lineStyle":{"type":"string","enum":["solid","dashed","dotted"]},"showLabel":{"type":"boolean"},"showPrice":{"type":"boolean"},"text":{"type":"string","maxLength":32}}},"CreatePriceAlertDto":{"type":"object","properties":{"venue":{"type":"string","enum":["SPOT","HL_PERP"]},"hlCoin":{"type":"string"},"tokenAddress":{"type":"string","description":"Token contract address"},"tokenSymbol":{"type":"string","description":"Token symbol for display (e.g. \"ETH\")"},"chainId":{"type":"number","description":"Chain ID"},"targetPrice":{"type":"string","description":"Positive decimal target price to trigger alert"},"direction":{"type":"string","enum":["ABOVE","BELOW"],"description":"Trigger when price goes above or below target"},"repeating":{"type":"boolean","description":"Whether alert resets after triggering (default: false = one-shot)"},"style":{"$ref":"#/components/schemas/PriceAlertStyleDto"}},"required":["tokenAddress","tokenSymbol","chainId","targetPrice","direction"]},"UpdatePriceAlertDto":{"type":"object","properties":{"targetPrice":{"type":"string","description":"Positive decimal target price"},"direction":{"type":"string","enum":["ABOVE","BELOW"]},"repeating":{"type":"boolean"},"style":{"nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/PriceAlertStyleDto"}]}}},"RegisterDeviceDto":{"type":"object","properties":{"token":{"type":"string","description":"Expo push token (ExponentPushToken[...])"},"platform":{"type":"string","enum":["ios","android"]}},"required":["token","platform"]},"UnregisterDeviceDto":{"type":"object","properties":{"token":{"type":"string","description":"Expo push token to remove"}},"required":["token"]},"ReferralCodeResponseDto":{"type":"object","properties":{"code":{"type":"string","description":"Referral code when the wallet is eligible.","example":"ABC234","nullable":true},"shareUrl":{"type":"string","description":"Share URL when the wallet is eligible.","example":"https://bt365.ai/?ref=ABC234","nullable":true},"eligible":{"type":"boolean","description":"Whether this wallet holds or may now receive a referral code."},"requiredVolumeUsd":{"type":"number","description":"Own-volume threshold from the active referral terms.","example":5000},"currentVolumeUsd":{"type":"number","description":"Wallet own trading volume over the all-time leaderboard window.","example":4999.99}},"required":["code","shareUrl","eligible"]},"AttributeRequestDto":{"type":"object","properties":{"code":{"type":"string","description":"Referral code from ?ref=CODE — 6–8 uppercase base32 (no 0/O/1/I/L).","example":"ABC234"}},"required":["code"]},"SubmitAppProofDto":{"type":"object","properties":{}},"NftPriceAmountDto":{"type":"object","properties":{"amount":{"type":"number","description":"Human-readable amount in `currency`, e.g. 1.25"},"currency":{"type":"string","description":"Symbol the amount is denominated in, e.g. ETH"},"usd":{"type":"number","nullable":true,"description":"Marketplace's own USD conversion at read time. A convenience, not a mark"}},"required":["amount","currency"]},"WalletNftItemDto":{"type":"object","properties":{"id":{"type":"string","description":"Stable client key: `<chainId>:<contract>:<tokenId>`"},"chainId":{"type":"number"},"contractAddress":{"type":"string","description":"Lowercased collection contract address"},"tokenId":{"type":"string","description":"uint256 token id as a decimal string"},"tokenStandard":{"type":"string","enum":["ERC721","ERC1155"]},"name":{"type":"string","nullable":true},"collectionName":{"type":"string","nullable":true},"imageUrl":{"type":"string","nullable":true,"description":"Unrewritten image URL — `ipfs://` and `ar://` are resolved client-side"},"balance":{"type":"number","description":"ERC-1155 copies held; always 1 for ERC-721"},"listingPrice":{"nullable":true,"description":"Best current ask for THIS token. Null means not listed for sale — but ONLY when the response `pricingAvailable` is true; otherwise the price is unknown.","type":"object","allOf":[{"$ref":"#/components/schemas/NftPriceAmountDto"}]},"floorPrice":{"nullable":true,"description":"Cheapest ask across the whole COLLECTION — not this token's price and not an offer on it. Same null semantics as listingPrice.","type":"object","allOf":[{"$ref":"#/components/schemas/NftPriceAmountDto"}]},"listingSource":{"type":"string","nullable":true,"description":"Marketplace carrying the listing, e.g. OpenSea"}},"required":["id","chainId","contractAddress","tokenId","tokenStandard","balance"]},"WalletNftChainStatusDto":{"type":"object","properties":{"chainId":{"type":"number"},"status":{"type":"string","enum":["ok","unavailable"]}},"required":["chainId","status"]},"WalletNftsResponseDto":{"type":"object","properties":{"address":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/WalletNftItemDto"}},"totalCount":{"type":"number","description":"Items found before truncation — greater than items.length when capped"},"chains":{"type":"array","items":{"$ref":"#/components/schemas/WalletNftChainStatusDto"}},"pricingAvailable":{"type":"boolean","description":"Whether a marketplace order book answered. When false, every listingPrice and floorPrice is UNKNOWN rather than absent, and a client must render no price at all — never \"Not listed\", which would report a listed NFT as unlisted on the strength of a failed read."}},"required":["address","items","totalCount","chains","pricingAvailable"]},"TemplateResponseDto":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"capabilities":{"type":"object"},"allowedParameters":{"type":"object"},"isActive":{"type":"boolean"},"isPremium":{"type":"boolean"},"minDeposit":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","type","name","description","capabilities","allowedParameters","isActive","isPremium","createdAt","updatedAt"]},"TemplateListResponseDto":{"type":"object","properties":{"templates":{"type":"array","items":{"$ref":"#/components/schemas/TemplateResponseDto"}},"total":{"type":"number"}},"required":["templates","total"]},"CreateAgentDto":{"type":"object","properties":{"templateType":{"type":"string","description":"Template type identifier (e.g., USDC_YIELD_V1)","example":"USDC_YIELD_V1"},"riskAppetite":{"type":"string","description":"Risk appetite level","enum":["Conservative","Moderate","Aggressive"],"example":"Moderate"},"timeHorizon":{"type":"string","description":"Time horizon for strategy execution","enum":["ShortTerm","MediumTerm","LongTerm"],"example":"MediumTerm"},"goal":{"type":"string","description":"Agent goal (defaults to first allowed goal from template)","enum":["EarnYieldOnUSDC","LPRewards","TrendFollow","Hedge","LiquidityScout","AutoCompound","DegenTrade","BT365Accumulate","DCAAccumulate","VMSHybridTrade","PerpetualTrading","WhaleFollow","MarketMake","TwitterSnipe","HLCopyTrade","PolymarketTrading","PerpsMomentum"],"example":"EarnYieldOnUSDC"},"executionMode":{"type":"string","description":"Execution mode","enum":["Autonomous","SemiAuto","AnalyticsOnly"],"example":"Autonomous"},"depositToken":{"type":"string","description":"Deposit token address (ERC20)","example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},"depositAmount":{"type":"string","description":"Amount to deposit (as string with decimals)","example":"1000000000"},"ownerAddress":{"type":"string","description":"Owner wallet address (if not using auth context)","example":"0x1234567890123456789012345678901234567890"},"contractAddress":{"type":"string","description":"Ignored on create; contract addresses are assigned by the server","example":"0x1234567890123456789012345678901234567890"},"name":{"type":"string","description":"Custom agent name (optional - auto-generated if not provided)","example":"My ETH Accumulator"},"bio":{"type":"string","description":"Custom agent bio/description (optional)","example":"A DCA agent that buys ETH weekly"},"avatarUrl":{"type":"string","description":"URL to the agent avatar image","example":"https://bt365.ai/uploads/avatars/abc123.png"},"targetTokenAddresses":{"description":"Array of token addresses (EVM agents) or asset symbols like \"BTC\" (perps agents)","example":["0x4200000000000000000000000000000000000006","0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"],"type":"array","items":{"type":"string"}},"strategyConfig":{"type":"object","description":"Strategy-specific configuration parameters (varies by template type)","example":{"dcaInterval":"daily","positionSizePct":10}},"walletType":{"type":"string","description":"Wallet type for the agent: legacy (user wallet) or erc4337 (smart account). Defaults to legacy.","example":"erc4337","enum":["legacy","erc4337"]},"strategyPrompt":{"type":"string","description":"Natural language trading strategy prompt for AI interpretation (PERPS_TRADER_V1 only)","example":"Buy when RSI drops below 30, sell when RSI goes above 70. Use 10x leverage for strong signals.","maxLength":2000},"executionTimeframe":{"type":"string","description":"Granular execution timeframe for perps strategy (PERPS_TRADER_V1 only)","example":"15m","enum":["1m","5m","15m","30m","1h","4h","1d","1w"]},"perpsVenue":{"type":"string","description":"Perps venue selection (perps templates only). Defaults to HYPERLIQUID.","enum":["HYPERLIQUID","AVANTIS"],"example":"HYPERLIQUID"},"polymarketTosAccepted":{"type":"boolean","description":"Polymarket TOS attestation flag — must be true for Polymarket templates. The user attests they are not a resident of any restricted jurisdiction.","example":true},"polymarketTosVersion":{"type":"string","description":"Version string of the Polymarket TOS / restricted-region list the user attested to. Must equal the current POLYMARKET_TOS_VERSION served by the backend.","example":"2026-05-06-v1"}},"required":["templateType","riskAppetite","timeHorizon","executionMode","depositToken","depositAmount"]},"AgentParamsResponseDto":{"type":"object","properties":{"riskAppetite":{"type":"string","enum":["Conservative","Moderate","Aggressive"]},"timeHorizon":{"type":"string","enum":["ShortTerm","MediumTerm","LongTerm"]},"goal":{"type":"string","enum":["EarnYieldOnUSDC","LPRewards","TrendFollow","Hedge","LiquidityScout","AutoCompound","DegenTrade","BT365Accumulate","DCAAccumulate","VMSHybridTrade","PerpetualTrading","WhaleFollow","MarketMake","TwitterSnipe","HLCopyTrade","PolymarketTrading","PerpsMomentum"]},"executionMode":{"type":"string","enum":["Autonomous","SemiAuto","AnalyticsOnly"]}},"required":["riskAppetite","timeHorizon","goal","executionMode"]},"AgentBalancesResponseDto":{"type":"object","properties":{"depositToken":{"type":"string"},"depositAmount":{"type":"string","description":"Total deposited amount (TVL) — accumulates all deposits"},"currentBalance":{"type":"string"},"totalEquity":{"type":"string","description":"Total equity for perps agents: deposit + realizedPnl - withdrawn (raw 6-decimal)"},"withdrawableNet":{"type":"string","description":"Net withdrawable collateral for perps agents (raw 6-decimal), mirroring the ledger the withdrawal endpoint validates against: deposit + realizedPnl - lockedMargin - totalWithdrawn. Clients should cap a MAX-withdraw at this value (it can be lower than currentBalance when the live HL balance leads the booked ledger)."},"balanceLive":{"type":"boolean","description":"True when currentBalance/totalEquity are a live HL reading (or a deliberate snapshot: closed agent / bridging deposit). False means a stale DB-recompute fallback (a transient HL read failure) — clients should keep the last-known live value rather than render this number."},"totalPnl":{"type":"string"},"realizedPnl":{"type":"string","description":"Realized PnL only (plain USD, net of fees, settled positions + realized partial-close slices) for perps/outcome agents — the settled complement to a live unrealized reading. totalPnl for those agents is realized + unrealized combined."},"pnlPercent":{"type":"string"},"depositTokenDecimals":{"type":"number","description":"Decimals of the deposit token (e.g. 6 for USDC, 18 for WETH)"}},"required":["depositToken","depositAmount","currentBalance","totalPnl"]},"AgentCreatorResponseDto":{"type":"object","properties":{"twitterHandle":{"type":"string"},"twitterVerifiedAt":{"type":"string","nullable":true},"twitterProfileImageUrl":{"type":"string","description":"Snapshot column on the agent; never populated by the wallet-handle fallback.","nullable":true},"twitterProfileUrl":{"type":"string","nullable":true}}},"AgentInstanceResponseDto":{"type":"object","properties":{"id":{"type":"string"},"contractAddress":{"type":"string"},"ownerAddress":{"type":"string"},"name":{"type":"string"},"bio":{"type":"string"},"avatarUrl":{"type":"string"},"slug":{"type":"string"},"isPublic":{"type":"boolean"},"isDefaultHlAccount":{"type":"boolean","description":"True for the auto-resolved per-user \"Trading balance\" account. Clients show a clean \"Trading\" label instead of the auto-generated \"Manual Trader #<tag>\" name."},"isCopyFollower":{"type":"boolean","description":"True when canonical copy-follower identity classifies this agent as a current or former follower."},"isDefaultOutcomeAccount":{"type":"boolean","description":"True for the auto-resolved per-user Prediction account. Only the canonical HL_OUTCOME_TRADER_V1 template can carry this flag."},"creationSource":{"type":"string","enum":["ai_builder","template","fork","clone"]},"templateId":{"type":"string"},"perpsVenue":{"type":"string","description":"Perps venue for perps agents","enum":["HYPERLIQUID","AVANTIS"]},"template":{"type":"object"},"params":{"$ref":"#/components/schemas/AgentParamsResponseDto"},"balances":{"description":"Owner-only. Live balances/PnL — undefined when the requester is not the agent owner.","allOf":[{"$ref":"#/components/schemas/AgentBalancesResponseDto"}]},"creator":{"$ref":"#/components/schemas/AgentCreatorResponseDto"},"stats":{"type":"object","description":"Percentage/count performance stats — public (no absolute dollar figures)."},"status":{"type":"string","enum":["Active","Paused","Closed"]},"chainId":{"type":"number","enum":[42161,8453,1,999,4663,900001]},"lastExecutedAt":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"closeSweepCompletedAt":{"type":"string","description":"Owner close sweep completion time. Null while funds are still being returned."},"walletType":{"type":"string","description":"Wallet type: legacy (user wallet) or erc4337 (smart account)","enum":["legacy","erc4337"]},"smartAccountAddress":{"type":"string","description":"Owner-only. Smart account address (for erc4337 wallet type) — undefined for non-owners."},"privyWalletAddress":{"type":"string","description":"Owner-only. Privy server wallet address for autonomous trading — undefined for non-owners."},"hlAccountKind":{"type":"string","description":"Which wallet is the Hyperliquid account: \"agent_wallet\" (the platform-held Privy server wallet — every account before ADR-0009) or \"owner_wallet\" (the user's own wallet; the server holds no key and every mutation is signed on the user's device).","enum":["agent_wallet","owner_wallet"]},"hlAccountAddress":{"type":"string","description":"Owner-only. The address that IS this agent's Hyperliquid account — the server wallet for \"agent_wallet\", the owner address for \"owner_wallet\". Owner-scoped for the same reason privyWalletAddress is."},"healthStatus":{"type":"string","description":"Agent health status: GREEN (healthy), YELLOW (warning), RED (critical)","enum":["GREEN","YELLOW","RED"]},"healthReason":{"type":"string","description":"Human-readable reason for the health status"},"pauseReason":{"type":"string","description":"Why the agent was paused. Null when active or closed.","example":"auto_suspended: 5 consecutive errors"},"pipelineVersion":{"type":"string","description":"Pipeline version for perps agents: v1 (legacy) or v2 (multi-layer AI)","enum":["v1","v2"]},"reviewFrequency":{"type":"string","description":"Deprecated legacy review cadence. Manual reviews ignore this field.","deprecated":true},"lastReviewAt":{"type":"string","description":"Timestamp of the last AI review"},"autoAcceptReviews":{"type":"boolean","description":"Deprecated legacy auto-accept flag. Manual reviews always require owner approval.","deprecated":true},"pendingReviewCount":{"type":"number","description":"Number of pending AI reviews awaiting user action"},"preferredModel":{"type":"string","description":"Owner-selected preferred LLM model for billable agent reasoning. Null means platform default."},"tradingAsset":{"type":"string","description":"Trading asset symbol for perps agents (e.g., BTC, ETH, OIL). Always returned for perps agents."},"strategyConfig":{"type":"object","description":"Strategy-specific configuration (owner-only). For perps agents, includes asset from targetTokenAddresses."},"copyConfig":{"type":"object","description":"Copy trading configuration (only for HL_COPY_TRADER_V1 agents, owner-only)"},"allowFork":{"type":"boolean","description":"Whether other users are allowed to fork this agent"},"forkPrice":{"type":"string","description":"USDC price to fork this agent (null = default 1 USDC)"},"blackSwanProtection":{"type":"boolean","description":"Whether Black Swan protection is enabled"},"killSwitchFiredAt":{"type":"number","description":"Unix ms when the kill switch latched. null = inactive. Owner-facing detail only; perps agents only.","nullable":true},"polymarketConfig":{"type":"object","description":"Polymarket-specific config (POLYMARKET_V1 + POLYMARKET_V2 + POLYMARKET_ARB_V1 agents, owner-only). All numeric values are parsed to number. Arb-only fields (maxOpenBaskets, maxBasketSpendUsd, slippageBufferBps) are populated for ARB_V1 agents."},"polymarketReverseBridgeStatus":{"type":"object","description":"Polymarket reverse bridge runtime hint (Polygon → Base). Null when no bridge is in flight. The FE polls the agent every 10s while this is non-null and renders a stage banner."}},"required":["id","contractAddress","ownerAddress","template","params","status","chainId","createdAt","updatedAt"]},"AgentInstanceListResponseDto":{"type":"object","properties":{"agents":{"type":"array","items":{"$ref":"#/components/schemas/AgentInstanceResponseDto"}},"total":{"type":"number"},"page":{"type":"number"},"take":{"type":"number"}},"required":["agents","total","page","take"]},"UpdateAgentStatusDto":{"type":"object","properties":{"status":{"type":"string","description":"New agent status","enum":["Active","Paused","Closed"],"example":"Paused"}},"required":["status"]},"UpdateStrategyConfigFieldsDto":{"type":"object","properties":{"strategyPrompt":{"type":"string","description":"Strategy prompt (natural language rules)","maxLength":2000},"leverage":{"type":"number","description":"Leverage multiplier (1–20). Further capped at runtime by risk appetite: Conservative=3, Moderate=10, Aggressive=20","minimum":1,"maximum":20},"positionSizePct":{"type":"number","description":"Position size as % of balance (1–100)","minimum":1,"maximum":100},"executionTimeframe":{"type":"string","description":"Execution timeframe (e.g. 15m, 1h, 4h)"},"asset":{"type":"string","description":"Target asset/token symbol"},"stopLossPct":{"type":"number","description":"Stop-loss percentage (0–100)","minimum":0,"maximum":100},"takeProfitPct":{"type":"number","description":"Take-profit percentage (0–1000)","minimum":0,"maximum":1000},"copyIntensity":{"type":"number","description":"Copy intensity percentage (1–100, HL_COPY_TRADER_V1)","minimum":1,"maximum":100},"maxPositions":{"type":"number","description":"Max concurrent positions (1–20)","minimum":1,"maximum":20},"maxLeverage":{"type":"number","description":"Max leverage cap for copy trader (1–50)","minimum":1,"maximum":50},"allowedDirection":{"type":"string","description":"Permitted trade directions — enforced only by PERPS_TRADER_V1. Defaults to \"both\" when unset.","enum":["long","short","both"]},"leaderAddress":{"type":"string","description":"Hyperliquid leader wallet to copy (HL_COPY_TRADER_V1 only). 0x-prefixed, 40 hex chars. Inactive leaders (no fills in last 7 days) are accepted with a warning — the agent will sit idle until the leader trades again.","example":"0x99b3ba1c1b7ad83d0164d996e3d271ae8c842551"},"maxHoldTimeHours":{"type":"number","description":"PERPS_TRADER_V1 only. Overrides the timeHorizon-based hard time stop (hours). Unset/null = default 4h/24h/7d by time horizon.","example":12},"staleLossExitHours":{"type":"number","description":"PERPS_TRADER_V1 only. Close a position still underwater (gross, mark vs entry) after this many hours instead of riding to the hard time stop. Unset/null = disabled.","example":8},"spreadPctileMax":{"type":"number","description":"PERPS_TRADER_V1 only. Skip new entries while the 1h spread percentile from HL perception state exceeds this value (thin-book gate, fail-open when perception is unavailable). Unset/null = disabled.","example":75},"sentimentEnabled":{"type":"boolean","description":"BASE_TRADER_V1 only. Toggles the AI (X/Twitter) sentiment leg of token scoring. When false, the strategy skips the Claude sentiment call entirely (no compute-credit usage) and redistributes the sentiment weight to the technical/momentum/liquidity signals. Defaults to true.","example":false}}},"UpdatePolymarketConfigDto":{"type":"object","properties":{}},"UpdateAgentConfigDto":{"type":"object","properties":{"riskAppetite":{"type":"string","description":"Updated risk appetite level","enum":["Conservative","Moderate","Aggressive"],"example":"Moderate"},"timeHorizon":{"type":"string","description":"Updated time horizon for strategy execution","enum":["ShortTerm","MediumTerm","LongTerm"],"example":"MediumTerm"},"executionMode":{"type":"string","description":"Updated execution mode","enum":["Autonomous","SemiAuto","AnalyticsOnly"],"example":"Autonomous"},"goal":{"type":"string","description":"Updated agent goal","enum":["EarnYieldOnUSDC","LPRewards","TrendFollow","Hedge","LiquidityScout","AutoCompound","DegenTrade","BT365Accumulate","DCAAccumulate","VMSHybridTrade","PerpetualTrading","WhaleFollow","MarketMake","TwitterSnipe","HLCopyTrade","PolymarketTrading","PerpsMomentum"],"example":"EarnYieldOnUSDC"},"name":{"type":"string","description":"Updated agent name","example":"My DCA Bot"},"bio":{"type":"string","description":"Updated agent bio/description","example":"A cautious DCA agent for ETH accumulation"},"templateId":{"type":"string","description":"New template ID to switch strategy. Agent must be PAUSED with no open positions."},"strategyConfig":{"description":"Strategy-specific configuration (e.g., strategyPrompt, asset, leverage, executionTimeframe)","example":{"strategyPrompt":"Go long when RSI < 30, short when RSI > 70","leverage":5},"allOf":[{"$ref":"#/components/schemas/UpdateStrategyConfigFieldsDto"}]},"reviewFrequency":{"type":"string","description":"Deprecated. Scheduled AI reviews have been retired.","enum":["weekly","monthly","quarterly"],"example":"monthly"},"autoAcceptReviews":{"type":"boolean","description":"Deprecated. Review recommendations always require owner approval.","example":false},"pipelineVersion":{"type":"string","description":"Pipeline version for perps agents. v1 = legacy single-prompt, v2 = multi-layer AI pipeline.","enum":["v1","v2"],"example":"v2"},"allowFork":{"type":"boolean","description":"Whether other users are allowed to fork this agent."},"forkPrice":{"type":"number","description":"USDC price to fork this agent (80% to owner, 20% platform). Min 0, max 10000. 0 or null = no premium to owner; forker pays only the standard 1 USDC platform creation fee.","example":5},"blackSwanProtection":{"type":"boolean","description":"Enable Black Swan protection to pause trading during extreme market events."},"polymarketConfig":{"description":"Polymarket-specific config (Polymarket agents only). All fields optional — only changed fields are applied.","allOf":[{"$ref":"#/components/schemas/UpdatePolymarketConfigDto"}]}}},"UpdateInvestmentSettingsDto":{"type":"object","properties":{"acceptsInvestments":{"type":"boolean","description":"Whether this agent accepts external investments","example":true},"performanceFeePercent":{"type":"number","description":"Performance fee percentage (0-50)","example":20},"minInvestmentAmount":{"type":"number","description":"Minimum investment amount in raw 6-decimal USDC (max 9007199254740991)","example":10000000},"maxAumCap":{"type":"number","description":"Maximum AUM cap in raw 6-decimal USDC (max 9007199254740991; null to remove cap)","example":1000000000000}}},"WithdrawFundsDto":{"type":"object","properties":{"token":{"type":"string","description":"Token address to withdraw","example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},"amount":{"type":"string","description":"Amount to withdraw (as string with decimals)","example":"500000000"}},"required":["token","amount"]},"AgentActionResponseDto":{"type":"object","properties":{"id":{"type":"string"},"agentId":{"type":"string"},"actionType":{"type":"string","enum":["Deposit","Withdraw","StrategyExecute","StatusChange","FeeCollected","Error","GasDeposit","GasDepletedPause","TickHold","VenueHalt","PolymarketReverseBridgeStarted","PolymarketReverseBridgeCompleted","PolymarketReverseBridgeFailed","PolymarketDecision","PolymarketCandidateRejected","PolymarketOrderReconciled","PolymarketClaimPending","PolymarketClaimCompleted","PolymarketClaimFailed"]},"txHash":{"type":"string"},"blockNumber":{"type":"string"},"details":{"type":"object"},"amount":{"type":"string"},"token":{"type":"string"},"success":{"type":"boolean"},"errorMessage":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","agentId","actionType","txHash","blockNumber","details","success","createdAt"]},"AgentActionListResponseDto":{"type":"object","properties":{"actions":{"type":"array","items":{"$ref":"#/components/schemas/AgentActionResponseDto"}},"total":{"type":"number"},"page":{"type":"number"},"take":{"type":"number"}},"required":["actions","total","page","take"]},"TradeResponseDto":{"type":"object","properties":{"id":{"type":"string"},"tokenSymbol":{"type":"string"},"tokenAddress":{"type":"string"},"side":{"type":"string","enum":["buy","sell"]},"entryPrice":{"type":"string"},"exitPrice":{"type":"string"},"quantity":{"type":"string","nullable":true,"description":"Null when blinded for a non-owner on a public view"},"realizedPnl":{"type":"string","nullable":true,"description":"Null when blinded for a non-owner on a public view"},"pnlPercent":{"type":"string"},"status":{"type":"string","enum":["open","closed","liquidated"]},"entryTime":{"type":"string"},"exitTime":{"type":"string"},"txHash":{"type":"string"},"tradeType":{"type":"string"},"asset":{"type":"string"},"perpsSide":{"type":"string","enum":["LONG","SHORT"]},"leverage":{"type":"number"},"marginUsed":{"type":"string","nullable":true,"description":"Null when blinded for a non-owner on a public view"},"closeReason":{"type":"string"}},"required":["id","tokenSymbol","tokenAddress","side","entryPrice","quantity","status","entryTime"]},"TradeSummaryDto":{"type":"object","properties":{"totalTrades":{"type":"number"},"winningTrades":{"type":"number"},"losingTrades":{"type":"number"},"openPositions":{"type":"number"},"winRate":{"type":"string"},"totalPnl":{"type":"string","nullable":true,"description":"Null when blinded for a non-owner on a public view"},"avgWin":{"type":"string","nullable":true,"description":"Null when blinded for a non-owner on a public view"},"avgLoss":{"type":"string","nullable":true,"description":"Null when blinded for a non-owner on a public view"}},"required":["totalTrades","winningTrades","losingTrades","openPositions","winRate","totalPnl","avgWin","avgLoss"]},"TradeHistoryResponseDto":{"type":"object","properties":{"trades":{"type":"array","items":{"$ref":"#/components/schemas/TradeResponseDto"}},"total":{"type":"number"},"page":{"type":"number"},"take":{"type":"number"},"summary":{"$ref":"#/components/schemas/TradeSummaryDto"}},"required":["trades","total","page","take","summary"]},"StrategyExplanationDto":{"type":"object","properties":{"templateName":{"type":"string"},"templateType":{"type":"string"},"overview":{"type":"string"},"entryConditions":{"type":"array","items":{"type":"string"}},"exitConditions":{"type":"array","items":{"type":"string"}},"positionSizing":{"type":"string"},"riskRules":{"type":"array","items":{"type":"string"}},"executionFrequency":{"type":"string"},"safetyChecks":{"type":"array","items":{"type":"string"}}},"required":["templateName","templateType","overview","entryConditions","exitConditions","positionSizing","riskRules","executionFrequency","safetyChecks"]},"UpdateStrategyConfigDto":{"type":"object","properties":{"style":{"type":"string","enum":["scalper","day_trader","swing","position","custom"]},"bias":{"type":"string","enum":["long_only","short_only","both"]},"timeframe_primary":{"type":"string","enum":["1m","5m","15m","1h","4h","1d"]},"sizing_method":{"type":"string","enum":["fixed_fractional","volatility_scaled","kelly"]},"risk_per_trade_pct":{"type":"number","description":"Risk per trade as percent (0.5-100)"},"max_leverage":{"type":"number","description":"Max leverage (1-10)"},"max_positions":{"type":"number","description":"Max concurrent open positions (1-20)"},"max_daily_trades":{"type":"number","description":"Max trades per day (1-1000)"},"require_multi_tf":{"type":"boolean","description":"Require multi-timeframe confirmation alignment"},"stop_loss_atr_mult":{"type":"number","description":"Stop-loss as ATR multiple"},"take_profit_atr_mult":{"type":"number","description":"Take-profit as ATR multiple"},"trailing_stop_pct":{"type":"number","description":"Trailing stop percent (0 disables)"},"cooldown_minutes":{"type":"number","description":"Cooldown after a trade closes, in minutes"},"entry_conditions":{"description":"Entry conditions array","type":"array","items":{"type":"string"}},"exit_conditions":{"description":"Exit conditions array","type":"array","items":{"type":"string"}}}},"InvestInAgentDto":{"type":"object","properties":{"txHash":{"type":"string","description":"On-chain USDC transfer transaction hash","example":"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"}},"required":["txHash"]},"InvestorWithdrawDto":{"type":"object","properties":{"amount":{"type":"number","description":"Amount to withdraw in USD","example":100}},"required":["amount"]},"RecordForkPaymentDto":{"type":"object","properties":{}},"CloneAgentRequestDto":{"type":"object","properties":{}},"WithdrawFromAgentDto":{"type":"object","properties":{}},"CopyMobileAgentDto":{"type":"object","properties":{"sourceAgentId":{"type":"string","description":"Public source agent id to copy into the requesting wallet."},"name":{"type":"string","description":"Optional custom name for the copied agent.","maxLength":100}},"required":["sourceAgentId"]},"RouteDto":{"type":"object","properties":{"protocol":{"type":"string"},"protocolName":{"type":"string"},"amountOut":{"type":"string"},"amountOutFormatted":{"type":"string"},"priceImpact":{"type":"number"},"priceImpactKnown":{"type":"boolean","description":"False when the pool mid price could not be read: priceImpact is then 0 and means \"unknown\", not \"no impact\""},"gasEstimate":{"type":"string"},"route":{"type":"array","items":{"type":"string"}},"isBest":{"type":"boolean"},"fee":{"type":"number"},"savingsPercent":{"type":"number"}},"required":["protocol","protocolName","amountOut","amountOutFormatted","priceImpact","priceImpactKnown","gasEstimate","route","isBest"]},"QuoteResponseDto":{"type":"object","properties":{"amountOut":{"type":"string","description":"Best output amount"},"amountOutFormatted":{"type":"string","description":"Best output amount formatted"},"protocol":{"type":"string","description":"Best protocol to use"},"priceImpact":{"type":"number","description":"Price impact percentage"},"priceImpactKnown":{"type":"boolean","description":"False when the pool mid price could not be read: priceImpact is then 0 and means \"unknown\", not \"no impact\""},"gasEstimate":{"type":"string","description":"Estimated gas cost"},"routes":{"description":"All available routes","type":"array","items":{"$ref":"#/components/schemas/RouteDto"}},"volumeUsd":{"type":"number","description":"Estimated USD volume of this swap"},"pointsEstimate":{"type":"number","description":"Estimated points for this swap"},"isBt365Pair":{"type":"boolean","description":"BT365 pair multiplier applied"},"expiresAt":{"type":"string","description":"Quote expiration time"}},"required":["amountOut","amountOutFormatted","protocol","priceImpact","priceImpactKnown","gasEstimate","routes","volumeUsd","pointsEstimate","isBt365Pair","expiresAt"]},"SwapRequestDto":{"type":"object","properties":{"tokenIn":{"type":"string","description":"Input token address","example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},"tokenOut":{"type":"string","description":"Output token address","example":"0x4200000000000000000000000000000000000006"},"amountIn":{"type":"string","description":"Input amount in smallest units","example":"1000000"},"minAmountOut":{"type":"string","description":"Minimum output amount (slippage protection)","example":"990000"},"recipient":{"type":"string","description":"Recipient address for output tokens","example":"0x..."},"chainId":{"type":"number","description":"Chain ID","example":8453},"protocol":{"type":"string","description":"Preferred protocol","example":"UNISWAP_V3_500"},"agentAddress":{"type":"string","description":"Agent address for points attribution"}},"required":["tokenIn","tokenOut","amountIn","minAmountOut","recipient","chainId"]},"UnsignedTransactionDto":{"type":"object","properties":{"to":{"type":"string","description":"BT365 swap helper contract address (NOT the DEX router). Approve tokens to THIS address.","example":"0x03ef6b3474409b6DB4BeBa3d77D2A9F073580961"},"data":{"type":"string","description":"Encoded swap calldata"},"value":{"type":"string","description":"REQUIRED: ETH fee (0.35% of swap value in wei). This MUST be sent as msg.value or the transaction will revert.","example":"1234567890000000"},"chainId":{"type":"number","description":"Chain ID (8453 for Base)"},"gasLimit":{"type":"string","description":"Estimated gas limit (includes 20% buffer)"},"gasEstimateIsFallback":{"type":"boolean","description":"True when gas estimation failed and gasLimit is the fallback value"}},"required":["to","data","value","chainId","gasLimit"]},"SwapMetadataDto":{"type":"object","properties":{"payer":{"type":"string","description":"Payer who paid for this API call"},"requestedAt":{"type":"string","description":"Request timestamp"},"bt365Version":{"type":"string","description":"API version"}},"required":["payer","requestedAt","bt365Version"]},"ApprovalInfoDto":{"type":"object","properties":{"token":{"type":"string","description":"Token address to approve","example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},"spender":{"type":"string","description":"Spender address (the swap helper contract)","example":"0x35267174E4F42e185982d84088ecB2CD90F78990"},"amount":{"type":"string","description":"Amount to approve (use this or max uint256)","example":"1000000"},"approveData":{"type":"string","description":"Pre-encoded approve transaction data. Send this to the token contract.","example":"0x095ea7b3..."}},"required":["token","spender","amount","approveData"]},"AgentSwapResponseDto":{"type":"object","properties":{"unsignedTransaction":{"description":"Unsigned transaction to sign and submit","allOf":[{"$ref":"#/components/schemas/UnsignedTransactionDto"}]},"protocol":{"type":"string","description":"Protocol used for the swap"},"priceImpact":{"type":"number","description":"Price impact of the selected direct route, when a route was quoted"},"priceImpactKnown":{"type":"boolean","description":"Whether the selected direct route price impact was measured"},"tokenIn":{"type":"string","description":"Input token"},"tokenOut":{"type":"string","description":"Output token"},"amountIn":{"type":"string","description":"Input amount"},"minAmountOut":{"type":"string","description":"Minimum output amount"},"recipient":{"type":"string","description":"Recipient address"},"volumeUsd":{"type":"number","description":"Estimated USD volume of this swap"},"pointsEstimate":{"type":"number","description":"Points estimate for this swap"},"deadline":{"type":"number","description":"Unix timestamp deadline — do not submit after this time","example":1739750400},"expiresAt":{"type":"string","description":"Transaction expiration time (ISO 8601)"},"metadata":{"description":"Swap metadata","allOf":[{"$ref":"#/components/schemas/SwapMetadataDto"}]},"approval":{"description":"Approval info - user MUST approve tokenIn to the swap helper before executing the swap transaction","allOf":[{"$ref":"#/components/schemas/ApprovalInfoDto"}]}},"required":["unsignedTransaction","protocol","tokenIn","tokenOut","amountIn","minAmountOut","recipient","volumeUsd","pointsEstimate","deadline","expiresAt","metadata"]},"SwapExecuteRequestDto":{"type":"object","properties":{"tokenIn":{"type":"string","description":"Input token address","example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},"tokenOut":{"type":"string","description":"Output token address","example":"0x4200000000000000000000000000000000000006"},"amountIn":{"type":"string","description":"Input amount in smallest units (e.g., 1000000 for 1 USDC)","example":"1000000"},"slippageBps":{"type":"number","description":"Slippage tolerance in basis points (100 = 1%). Minimum 50 bps.","example":100,"default":100},"chainId":{"type":"number","description":"Chain ID (default: 8453 for Base)","example":8453,"default":8453},"estimatedUsd":{"type":"number","description":"Advisory USD value of the swap. Per-tx / daily volume caps are enforced against a SERVER-computed value (tokenIn price × amountIn); this field is used only as a floor when the server cannot price the token.","example":100.5}},"required":["tokenIn","tokenOut","amountIn"]},"SwapExecuteResponseDto":{"type":"object","properties":{"txHash":{"type":"string","description":"Transaction hash of the executed swap"},"amountOut":{"type":"string","description":"Output amount received (in smallest units)"},"protocol":{"type":"string","description":"Protocol used (e.g., UNISWAP_V3_3000)"},"explorerUrl":{"type":"string","description":"Block explorer URL"}},"required":["txHash","amountOut","protocol","explorerUrl"]},"CreateAdvancedOrderDto":{"type":"object","properties":{"orderType":{"type":"string","enum":["LIMIT","STOP_LOSS","TWAP","DCA"],"description":"Type of advanced order"},"poolAddress":{"type":"string","description":"Pool address where the order will be executed"},"chainId":{"type":"number","enum":[42161,8453,1,999,4663,900001],"description":"Chain ID for the order"},"tokenIn":{"type":"string","description":"Token address to swap from"},"tokenOut":{"type":"string","description":"Token address to swap to"},"amount":{"type":"string","description":"Amount to swap (in smallest unit, e.g., wei)"},"triggerPrice":{"type":"string","description":"Trigger price for LIMIT and STOP_LOSS orders"},"duration":{"type":"number","description":"Duration in seconds for TWAP and DCA orders"},"interval":{"type":"number","description":"Interval in seconds for TWAP and DCA orders"},"tokenInSymbol":{"type":"string","description":"Human-readable symbol for tokenIn (e.g. \"USDC\")"},"tokenOutSymbol":{"type":"string","description":"Human-readable symbol for tokenOut (e.g. \"ETH\")"}},"required":["orderType","poolAddress","chainId","tokenIn","tokenOut","amount"]},"PageRankLeaderboardDto":{"type":"object","properties":{}},"AgentReputationResponseDto":{"type":"object","properties":{"agentAddress":{"type":"string","description":"Agent wallet address"},"agentName":{"type":"string","description":"Agent name"},"agentDescription":{"type":"string","description":"Agent description"},"isRegistered":{"type":"boolean","description":"Is registered on ERC-8004 registry"},"reputationScore":{"type":"string","description":"Reputation score (0-100)"},"totalSwaps":{"type":"number","description":"Total number of swaps"},"totalVolumeUsd":{"type":"string","description":"Total volume traded in USD"},"successfulSwaps":{"type":"number","description":"Number of successful swaps"},"failedSwaps":{"type":"number","description":"Number of failed swaps"},"successRate":{"type":"string","description":"Success rate percentage"},"averageSlippage":{"type":"string","description":"Average slippage percentage"},"positiveFeedbackCount":{"type":"number","description":"Positive feedback count"},"negativeFeedbackCount":{"type":"number","description":"Negative feedback count"},"createdAt":{"format":"date-time","type":"string","description":"Account creation date"},"updatedAt":{"format":"date-time","type":"string","description":"Last activity date"}},"required":["agentAddress","isRegistered","reputationScore","totalSwaps","totalVolumeUsd","successfulSwaps","failedSwaps","successRate","averageSlippage","positiveFeedbackCount","negativeFeedbackCount","createdAt","updatedAt"]},"SubmitAttestationDto":{"type":"object","properties":{}},"AttestationResponseDto":{"type":"object","properties":{}},"AttestationListResponseDto":{"type":"object","properties":{}},"RegisterAgentDto":{"type":"object","properties":{"name":{"type":"string","description":"Agent name"},"description":{"type":"string","description":"Agent description"},"agentAddress":{"type":"string","description":"Agent wallet address"},"signature":{"type":"string","description":"EIP-191 signature from `agentAddress` over \"Register agent <name> on BT365\\nAgent: <agentAddress>\\nTimestamp: <timestamp>\", proving control of the agent key. Required on the public /register-reputation endpoint; omitted only by trusted internal quickstart flows."},"timestamp":{"type":"number","description":"Unix timestamp (seconds) used in the signed message"},"template":{"type":"string","description":"Template type (e.g., DCA_AGENT_V1)"},"category":{"type":"string","description":"Agent category (e.g., CONSERVATIVE)"},"agentId":{"type":"string","description":"Agent ID (UUID)"},"agentSlug":{"type":"string","description":"Agent slug for profile URL"},"createdAt":{"type":"string","description":"Agent creation date (ISO-8601)"}},"required":["name","agentAddress"]},"RegisterAgentResponseDto":{"type":"object","properties":{"success":{"type":"boolean","description":"Success status"},"agentAddress":{"type":"string","description":"Agent address"},"isRegistered":{"type":"boolean","description":"Registration status"},"registryTxHash":{"type":"string","description":"On-chain registration tx hash (if deployed)"},"message":{"type":"string","description":"Message"}},"required":["success","agentAddress","isRegistered","message"]},"ReputationFeedbackDto":{"type":"object","properties":{"agentAddress":{"type":"string","description":"Agent address to provide feedback for"},"positive":{"type":"boolean","description":"Positive or negative feedback"},"swapTxHash":{"type":"string","description":"Swap transaction hash that this feedback relates to"},"comment":{"type":"string","description":"Optional comment (max 280 chars)"}},"required":["agentAddress","positive","swapTxHash"]},"FeedbackResponseDto":{"type":"object","properties":{"success":{"type":"boolean","description":"Success status"},"agentAddress":{"type":"string","description":"Agent address"},"newReputationScore":{"type":"string","description":"New reputation score"},"message":{"type":"string","description":"Message"}},"required":["success","agentAddress","newReputationScore","message"]},"ProgrammaticAgentCreateDto":{"type":"object","properties":{"templateType":{"type":"string","description":"Template type identifier. Available: PERPS_TRADER_V1 (Hyperliquid AI perps), PERPS_SCALPER_V1 (HL scalper), PERPS_MOMENTUM_V1 (HL momentum), HIP3_FLOW_SCALPER_V1 (HIP-3 TradFi), HL_OUTCOME_TRADER_V1 / HL_OUTCOME_FV_TRADER_V1 (HL outcome trading). Programmatic perps agents default to Hyperliquid; HL_OUTCOME_TRADER_V1 defaults to AnalyticsOnly.","example":"PERPS_TRADER_V1"},"riskAppetite":{"type":"string","description":"Risk appetite level","enum":["Conservative","Moderate","Aggressive"],"example":"Moderate"},"timeHorizon":{"type":"string","description":"Time horizon for strategy execution","enum":["ShortTerm","MediumTerm","LongTerm"],"example":"MediumTerm"},"ownerAddress":{"type":"string","description":"Owner wallet address (Ethereum address)","example":"0x1234567890123456789012345678901234567890"},"goal":{"type":"string","description":"Agent goal (defaults to first allowed goal from template)","enum":["EarnYieldOnUSDC","LPRewards","TrendFollow","Hedge","LiquidityScout","AutoCompound","DegenTrade","BT365Accumulate","DCAAccumulate","VMSHybridTrade","PerpetualTrading","WhaleFollow","MarketMake","TwitterSnipe","HLCopyTrade","PolymarketTrading","PerpsMomentum"],"example":"DCAAccumulate"},"executionMode":{"type":"string","description":"Execution mode (defaults to AUTONOMOUS)","enum":["Autonomous","SemiAuto","AnalyticsOnly"],"example":"Autonomous"},"name":{"type":"string","description":"Custom agent name (max 50 chars, auto-generated if not provided)","example":"My DCA Strategy"},"bio":{"type":"string","description":"Agent bio/description (max 500 chars)","example":"A DCA agent that buys ETH every week to accumulate over time"},"tokens":{"description":"Tokens to trade (symbol array, e.g., [\"ETH\", \"USDC\"])","example":["ETH","USDC"],"type":"array","items":{"type":"string"}},"triggerConditions":{"type":"string","description":"Strategy trigger conditions description","example":"Buy $100 ETH every Monday at 9AM UTC when RSI < 30"}},"required":["templateType","riskAppetite","timeHorizon","ownerAddress"]},"ProgrammaticAgentResponseDto":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the operation was successful"},"message":{"type":"string","description":"Human-readable message"},"data":{"type":"object","description":"Created agent data"}},"required":["success","message","data"]},"QuickstartDto":{"type":"object","properties":{}},"QuickstartResponseDto":{"type":"object","properties":{}},"RegisterAgentApiDto":{"type":"object","properties":{"name":{"type":"string","description":"Agent display name","example":"Nova","minLength":1,"maxLength":64},"wallet":{"type":"string","description":"Wallet address (EVM)","example":"0x8e2Aec961519d0F0C096802144C2D5856FFBCf75"},"signature":{"type":"string","description":"EIP-191 personal_sign of: \"Register agent {name} on BT365\\nWallet: {wallet}\\nTimestamp: {timestamp}\"","example":"0x..."},"timestamp":{"type":"number","description":"Unix timestamp (seconds) used in the signed message","example":1708430000}},"required":["name","wallet","signature","timestamp"]},"RegisterAgentApiResponseDto":{"type":"object","properties":{"agentId":{"type":"string","description":"Unique agent ID (UUID)"},"name":{"type":"string","description":"Agent display name"},"wallet":{"type":"string","description":"Registered wallet address"},"apiKey":{"type":"string","description":"API key (returned only once — store securely)","example":"bt365_live_a1b2c3d4e5f6..."},"registeredAt":{"type":"string","description":"Registration timestamp (ISO 8601)"}},"required":["agentId","name","wallet","apiKey","registeredAt"]},"PointsTierDto":{"type":"object","properties":{"name":{"type":"string","description":"Tier name"},"badge":{"type":"string","description":"Tier badge"},"minPoints":{"type":"number","description":"Points required for this tier"}},"required":["name","badge","minPoints"]},"RecentSwapDto":{"type":"object","properties":{"txHash":{"type":"string","description":"Swap transaction hash"},"volumeUsd":{"type":"string","description":"Volume in USD"},"points":{"type":"string","description":"Points earned"},"multiplier":{"type":"string","description":"Multiplier applied"},"isBt365Pair":{"type":"boolean","description":"Was this a BT365 pair"},"createdAt":{"format":"date-time","type":"string","description":"Timestamp"}},"required":["txHash","volumeUsd","points","multiplier","isBt365Pair","createdAt"]},"PointsResponseDto":{"type":"object","properties":{"walletAddress":{"type":"string","description":"Wallet address"},"totalPoints":{"type":"string","description":"Total accumulated points"},"tier":{"description":"Current tier","allOf":[{"$ref":"#/components/schemas/PointsTierDto"}]},"pointsToNextTier":{"type":"string","description":"Points to next tier"},"totalVolumeUsd":{"type":"string","description":"Total volume traded in USD"},"totalSwaps":{"type":"number","description":"Total number of swaps"},"recentSwaps":{"description":"Recent swap history","type":"array","items":{"$ref":"#/components/schemas/RecentSwapDto"}},"rank":{"type":"number","description":"Rank on leaderboard"}},"required":["walletAddress","totalPoints","tier","pointsToNextTier","totalVolumeUsd","totalSwaps","recentSwaps"]},"LeaderboardEntryDto":{"type":"object","properties":{"rank":{"type":"number","description":"Rank position"},"walletAddress":{"type":"string","description":"Wallet address"},"totalPoints":{"type":"string","description":"Total points"},"totalVolumeUsd":{"type":"string","description":"Total volume traded in USD"},"totalSwaps":{"type":"number","description":"Total number of swaps"},"tier":{"description":"Current tier","allOf":[{"$ref":"#/components/schemas/PointsTierDto"}]},"agentAddress":{"type":"string","description":"Agent address if registered"},"isRegisteredAgent":{"type":"boolean","description":"Is registered agent"}},"required":["rank","walletAddress","totalPoints","totalVolumeUsd","totalSwaps","tier"]},"LeaderboardResponseDto":{"type":"object","properties":{"entries":{"description":"Leaderboard entries","type":"array","items":{"$ref":"#/components/schemas/LeaderboardEntryDto"}},"totalCount":{"type":"number","description":"Total number of participants"},"offset":{"type":"number","description":"Offset used"},"limit":{"type":"number","description":"Limit used"}},"required":["entries","totalCount","offset","limit"]},"CreateApiKeyDto":{"type":"object","properties":{"name":{"type":"string","description":"Name for the API key (for identification)","example":"My Trading Bot"},"permissions":{"type":"array","description":"Permissions for the API key","default":["read"],"items":{"type":"string","enum":["read","write","admin"]}},"rateLimit":{"type":"number","description":"Rate limit (requests per window)","default":100,"minimum":1,"maximum":10000},"rateLimitWindow":{"type":"number","description":"Rate limit window in seconds","default":60,"minimum":1,"maximum":3600},"expiresAt":{"type":"string","description":"Expiration date for the API key (ISO 8601)","example":"2027-01-01T00:00:00Z"}},"required":["name"]},"ApiKeyCreatedResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"API Key ID"},"name":{"type":"string","description":"Name of the API key"},"keyPrefix":{"type":"string","description":"First 8 characters of the key (for identification)"},"permissions":{"type":"array","description":"Permissions","items":{"type":"string","enum":["read","write","admin"]}},"status":{"type":"string","description":"Status","enum":["active","revoked","expired"]},"rateLimit":{"type":"number","description":"Rate limit (requests per window)"},"rateLimitWindow":{"type":"number","description":"Rate limit window in seconds"},"totalRequests":{"type":"string","description":"Total requests made"},"lastUsedAt":{"format":"date-time","type":"string","description":"Last used timestamp"},"expiresAt":{"format":"date-time","type":"string","description":"Expiration date"},"createdAt":{"format":"date-time","type":"string","description":"Created timestamp"},"apiKey":{"type":"string","description":"The full API key (only shown once at creation)","example":"bt365_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6"}},"required":["id","name","keyPrefix","permissions","status","rateLimit","rateLimitWindow","totalRequests","createdAt","apiKey"]},"ApiKeyResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"API Key ID"},"name":{"type":"string","description":"Name of the API key"},"keyPrefix":{"type":"string","description":"First 8 characters of the key (for identification)"},"permissions":{"type":"array","description":"Permissions","items":{"type":"string","enum":["read","write","admin"]}},"status":{"type":"string","description":"Status","enum":["active","revoked","expired"]},"rateLimit":{"type":"number","description":"Rate limit (requests per window)"},"rateLimitWindow":{"type":"number","description":"Rate limit window in seconds"},"totalRequests":{"type":"string","description":"Total requests made"},"lastUsedAt":{"format":"date-time","type":"string","description":"Last used timestamp"},"expiresAt":{"format":"date-time","type":"string","description":"Expiration date"},"createdAt":{"format":"date-time","type":"string","description":"Created timestamp"}},"required":["id","name","keyPrefix","permissions","status","rateLimit","rateLimitWindow","totalRequests","createdAt"]},"CreateWebhookDto":{"type":"object","properties":{"url":{"type":"string","description":"Webhook endpoint URL","example":"https://api.example.com/webhooks/bt365"},"events":{"type":"array","description":"Events to subscribe to","example":["agent.trade","agent.status_changed"],"items":{"type":"string","enum":["agent.created","agent.trade","agent.status_changed","agent.go_live","token.launched","swap.executed"]}}},"required":["url","events"]},"OpenRouterConnectDto":{"type":"object","properties":{}},"PurchaseVerifyDto":{"type":"object","properties":{}},"CreditTransferDto":{"type":"object","properties":{"recipientAddress":{"type":"string","description":"Recipient account address"},"amount":{"type":"number","description":"Credits to transfer (1-10000, purchased balance only)"},"idempotencyKey":{"type":"string","description":"Idempotency key (UUID) for safe retries"}},"required":["recipientAddress","amount","idempotencyKey"]},"SetBudgetDto":{"type":"object","properties":{}},"SetModelDto":{"type":"object","properties":{}},"OpenManualPerpsPositionDto":{"type":"object","properties":{"clientRequestId":{"type":"string","description":"Caller-generated idempotency key. Reusing the same key with the same body replays the original result; a different body returns HTTP 409.","example":"manual-open-01J2YQG2J96V6R5K8X6B0S4W1Z","minLength":8,"maxLength":128},"asset":{"type":"string","description":"Hyperliquid asset symbol. Crypto: \"BTC\", \"ETH\". HIP-3 TradFi: \"xyz:TSLA\", \"xyz:GOLD\".","example":"BTC"},"side":{"type":"string","description":"Position direction","enum":["LONG","SHORT"]},"size":{"type":"string","description":"Position size in base units (decimal string, e.g. \"0.01\")","example":"0.01"},"leverage":{"type":"number","description":"Leverage (1-50x)","minimum":1,"maximum":50,"example":5},"marginMode":{"type":"string","description":"Margin mode for this open: cross (the whole trading balance backs the position) or isolated (only the posted margin). Omitted = isolated. Requires the margin-mode feature.","enum":["cross","isolated"]},"orderType":{"type":"string","description":"Order type. stop_market / stop_limit open a position when the mark price crosses triggerPrice (requires the stop-orders feature).","enum":["market","limit","stop_market","stop_limit"]},"limitPrice":{"type":"string","description":"Limit price (required when orderType = \"limit\") and the limit price of a stop_limit. Decimal string, same units as HL mark price.","example":"65000"},"triggerPrice":{"type":"string","description":"Trigger price for stop_market / stop_limit entries. A buy stop must be above the current mark price, a sell stop below it. Requires the stop-orders feature.","example":"70000"},"tif":{"type":"string","description":"Time in force for limit orders: Gtc (rest until filled or cancelled), Ioc (fill what is possible now, cancel the rest), Alo (post-only: rejected if it would fill immediately). Only valid with orderType \"limit\".","enum":["Gtc","Ioc","Alo"],"example":"Gtc"},"reduceOnly":{"type":"boolean","description":"Only valid with orderType \"limit\". Shrinks the existing opposite position and never opens a new position."},"stopLoss":{"type":"string","description":"Stop-loss trigger price. If set, a HL stop-market trigger order is placed immediately after the entry fills. Not accepted on stop_market / stop_limit entries.","example":"63000"},"stopLossLimitPrice":{"type":"string","description":"Limit price for the stop-loss trigger: when the trigger price is hit, a reduce-only LIMIT order is placed at this price instead of a market order. Requires stopLoss. Market entries only. Requires the advanced TP/SL feature.","example":"62950"},"stopLossSize":{"type":"string","description":"Absolute size in base units for the stop-loss trigger; omit for the full position. Requires stopLoss, market entries only, at most the order size. Requires the advanced TP/SL feature.","example":"0.005"},"takeProfit":{"type":"string","description":"Take-profit trigger price. If set, a HL take-profit-market trigger order is placed immediately after the entry fills. Not accepted on stop_market / stop_limit entries.","example":"68000"},"takeProfitLimitPrice":{"type":"string","description":"Limit price for the take-profit trigger: when the trigger price is hit, a reduce-only LIMIT order is placed at this price instead of a market order. Requires takeProfit. Market entries only. Requires the advanced TP/SL feature.","example":"67950"},"takeProfitSize":{"type":"string","description":"Absolute size in base units for the take-profit trigger; omit for the full position. Requires takeProfit, market entries only, at most the order size. Requires the advanced TP/SL feature.","example":"0.005"},"slippageBps":{"type":"number","description":"Slippage tolerance in basis points for market orders (default 50 = 0.5%). Ignored for limit and stop orders.","example":50,"minimum":1,"maximum":1000},"targetCap":{"type":"string","description":"Internal structural target cap for unattended entries. The final venue-rounded IOC limit must stay strictly inside this price.","example":"68000"}},"required":["asset","side","size","leverage","orderType"]},"CloseManualPerpsPositionDto":{"type":"object","properties":{"clientRequestId":{"type":"string","description":"Caller-generated idempotency key. Reusing the same key with the same body replays the original result; a different body returns HTTP 409.","example":"manual-close-01J2YQG2J96V6R5K8X6B0S4W1Z","minLength":8,"maxLength":128},"asset":{"type":"string","description":"Hyperliquid asset symbol of the open position to close.","example":"BTC"},"size":{"type":"string","description":"Partial close size in base units. If omitted, the entire position is closed at market. Must be ≤ current position size.","example":"0.005"}},"required":["asset"]},"CancelManualPerpsOrderDto":{"type":"object","properties":{"asset":{"type":"string","description":"Hyperliquid asset symbol the order was placed against.","example":"BTC"},"oid":{"type":"number","description":"Hyperliquid numeric order id (oid) returned when the order was placed.","example":1234567890}},"required":["asset","oid"]},"EditManualPerpsLimitOrderDto":{"type":"object","properties":{"asset":{"type":"string","description":"Hyperliquid asset symbol of the resting order.","example":"BTC"},"oid":{"type":"number","description":"Hyperliquid numeric order id (oid) of the order being replaced.","example":1234567890},"side":{"type":"string","description":"Position direction","enum":["LONG","SHORT"]},"size":{"type":"string","description":"New position size in base units (decimal string, e.g. \"0.01\")","example":"0.01"},"limitPrice":{"type":"string","description":"New limit price (decimal string).","example":"65000"}},"required":["asset","oid","side","size","limitPrice"]},"ManualPerpsTrailingStopDto":{"type":"object","properties":{"distancePct":{"type":"number","description":"Trail distance as a percent of price (0.1–50). LONG stop = highest price × (1 − pct/100); SHORT stop = lowest price × (1 + pct/100).","example":3},"activationPrice":{"type":"string","description":"Optional arming price. Trailing stays dormant (any fixed stop-loss is left alone) until the mark reaches this level in the position's favour. Omit to arm immediately from the current mark.","example":"0.0190"}},"required":["distancePct"]},"UpdateManualPerpsTpSlDto":{"type":"object","properties":{"asset":{"type":"string","description":"Hyperliquid asset symbol of the open position whose SL/TP is being updated.","example":"BTC"},"stopLoss":{"type":"string","description":"New stop-loss trigger price as a decimal string. Omit to leave unchanged; pass \"\" to clear an existing stop-loss.","example":"63000"},"takeProfit":{"type":"string","description":"New take-profit trigger price as a decimal string. Omit to leave unchanged; pass \"\" to clear an existing take-profit.","example":"68000"},"trailingStop":{"description":"Trailing stop config. Omit to leave unchanged; pass null to switch trailing off (the stop-loss stays where it is); pass an object to switch it on.","nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/ManualPerpsTrailingStopDto"}]}},"required":["asset"]},"PlaceManualPerpsTriggerDto":{"type":"object","properties":{"asset":{"type":"string","description":"Hyperliquid asset symbol of the OPEN position to protect (e.g. \"ADA\", \"xyz:TSLA\").","example":"ADA"},"triggerPrice":{"type":"string","description":"Trigger price as a decimal string. For a long stop it must sit BELOW the entry price (and above the liquidation price); for a short stop, above entry.","example":"0.16350"},"tpsl":{"type":"string","description":"Trigger kind. \"sl\" = stop-loss (default), \"tp\" = take-profit.","enum":["sl","tp"],"default":"sl"},"grouping":{"type":"string","description":"HL trigger grouping. \"na\" (default) is a plain independent reduce-only trigger that rests and echoes its resting oid; \"positionTpsl\" is the position-level standalone stop (rests the same on-chain but omits the oid from the /exchange response — the endpoint recovers it via an exact cloid-based order-status read); \"normalTpsl\" is the order-level bracket grouping. Exposed so the resting behaviour can be tuned from the bot without a backend redeploy if a venue rejects the default.","enum":["na","positionTpsl","normalTpsl"],"default":"na"}},"required":["asset","triggerPrice"]},"AddManualPerpsMarginDto":{"type":"object","properties":{"asset":{"type":"string","description":"Asset symbol (e.g. \"AVNT\", \"BTC\"). Must have an open position.","example":"AVNT"},"amount":{"type":"string","description":"Decimal USDC amount, positive to add margin, negative to remove. Must be non-zero.","example":"50.00"},"direction":{"type":"string","description":"Direction of the change — \"add\" or \"remove\".","enum":["add","remove"],"example":"add"}},"required":["asset","amount","direction"]},"WithdrawManualPerpsDto":{"type":"object","properties":{"amount":{"type":"string","description":"USDC amount to withdraw, as a decimal string (e.g. \"25.00\"). Must be ≤ available HL balance. HL deducts a $1 flat fee from the withdrawn amount.","example":"25.00"},"clientRequestId":{"type":"string","description":"Client-generated idempotency key for this withdrawal request. Retrying with the same value returns the existing request status.","example":"6b4b72e5-4c9d-4bbf-9a6b-9f4e7f5d8972"}},"required":["amount","clientRequestId"]},"CreateTradingApiKeyDto":{"type":"object","properties":{"label":{"type":"string","description":"Human-readable label to identify this key (e.g. \"Freqtrade bot\").","example":"My grid bot"},"scopes":{"type":"array","description":"Scopes this key grants. READ is always included. Omit to create a read-only key.","example":["read","trade"],"items":{"type":"string","enum":["read","trade","withdraw"]}},"ipAllowlist":{"description":"Optional IP allowlist. When set, requests are only accepted from these IPs.","example":["203.0.113.7"],"type":"array","items":{"type":"array"}},"rateLimit":{"type":"number","description":"Per-key request budget: max requests per window (default 600).","minimum":1,"maximum":6000,"example":600},"rateLimitWindow":{"type":"number","description":"Rate-limit window in seconds (default 60).","minimum":1,"maximum":3600,"example":60},"expiresAt":{"type":"string","description":"Optional expiry (ISO 8601). After this time the key stops working.","example":"2026-12-31T23:59:59.000Z"}},"required":["label"]},"TradingApiKeyCreatedResponseDto":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"apiKeyId":{"type":"string","description":"Public key id sent in the X-BT365-APIKEY header."},"scopes":{"type":"array","items":{"type":"string","enum":["read","trade","withdraw"]}},"status":{"type":"string","enum":["active","revoked","expired"]},"ipAllowlist":{"type":"array","items":{"type":"string"}},"rateLimit":{"type":"number"},"rateLimitWindow":{"type":"number"},"totalRequests":{"type":"string"},"lastUsedAt":{"format":"date-time","type":"string"},"expiresAt":{"format":"date-time","type":"string"},"createdAt":{"format":"date-time","type":"string"},"secret":{"type":"string","description":"The signing secret. Shown only once — store it securely."}},"required":["id","label","apiKeyId","scopes","status","rateLimit","rateLimitWindow","totalRequests","createdAt","secret"]},"TradingApiKeyResponseDto":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"apiKeyId":{"type":"string","description":"Public key id sent in the X-BT365-APIKEY header."},"scopes":{"type":"array","items":{"type":"string","enum":["read","trade","withdraw"]}},"status":{"type":"string","enum":["active","revoked","expired"]},"ipAllowlist":{"type":"array","items":{"type":"string"}},"rateLimit":{"type":"number"},"rateLimitWindow":{"type":"number"},"totalRequests":{"type":"string"},"lastUsedAt":{"format":"date-time","type":"string"},"expiresAt":{"format":"date-time","type":"string"},"createdAt":{"format":"date-time","type":"string"}},"required":["id","label","apiKeyId","scopes","status","rateLimit","rateLimitWindow","totalRequests","createdAt"]},"ProvisionOwnerWalletAccountDto":{"type":"object","properties":{"ownerAddress":{"type":"string","description":"The Hyperliquid account address — the end user's own wallet. For an OWNER key it must equal the key's wallet; for a TENANT_OPERATOR key it is any address the tenant onboards.","example":"0x1111111111111111111111111111111111111111"}},"required":["ownerAddress"]},"ManualPerpsSetupAgentDto":{"type":"object","properties":{"address":{"type":"string","description":"Approved Hyperliquid agent address."},"name":{"type":"string","nullable":true,"description":"Name signed into the approveAgent action."},"approvedAt":{"format":"date-time","type":"string","nullable":true,"description":"When BT365 observed the venue accepting the approval."},"validUntil":{"format":"date-time","type":"string","nullable":true,"description":"Venue-reported expiry, when available."}},"required":["address"]},"ManualPerpsSetupStatusDto":{"type":"object","properties":{"builderFeeApproved":{"type":"boolean","description":"True once this account has approved our builder fee at the current rate."},"referrerSet":{"type":"boolean","description":"True once the referral code is settled — either attached, or proven unattachable because the account has already traded. Both are terminal; neither needs another signature."},"abstractionMode":{"type":"string","description":"The account's live Hyperliquid abstraction mode, read fresh on every call.","enum":["unifiedAccount","portfolioMargin","disabled","default","dexAbstraction"]},"unified":{"type":"boolean","description":"Shorthand for `abstractionMode === \"unifiedAccount\"`."},"setupRequired":{"type":"boolean","description":"True when `items` is non-empty — show the setup prompt."},"items":{"type":"array","description":"What is still needed, in the order the setup flow handles it. `risk-attestation` appears only on the Trading API owner-wallet lane and is recorded by BT365.","items":{"type":"string","enum":["risk-attestation","unified-account","builder-fee","referrer"]}},"agent":{"nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/ManualPerpsSetupAgentDto"}]}},"required":["builderFeeApproved","referrerSet","abstractionMode","unified","setupRequired","items"]},"PrepareOwnerWalletSetupDto":{"type":"object","properties":{"agentAddress":{"type":"string","description":"Public address of the client-held Hyperliquid trading key. Its private key stays with the client and BT365 never receives it.","example":"0x1111111111111111111111111111111111111111"},"agentName":{"type":"string","description":"Non-empty Hyperliquid agent name; defaults to bt365-api.","example":"bt365-api"}}},"ManualPerpsPreparedItemDto":{"type":"object","properties":{"id":{"type":"string","description":"Stable item id — echo it back with the signature.","example":"order"},"scheme":{"type":"string","description":"Hyperliquid signing scheme. `l1` is the phantom-agent scheme (orders, cancels, leverage, margin); `user` is the readable user-signed scheme. Pick the wallet call from it; the server never trusts it back.","enum":["l1","user"]},"typedData":{"type":"object","description":"The EIP-712 payload to sign, verbatim: { domain, types, primaryType, message }.","additionalProperties":true},"action":{"type":"object","description":"The exact action the server will POST to Hyperliquid. Already normalized, so the signed bytes and the wire bytes are the same bytes. Informational — the server posts its own copy.","additionalProperties":true},"nonce":{"type":"number","description":"Nonce allocated for the account, for this item only.","example":1758240000123},"description":{"type":"string","description":"Human-readable line to show next to the signature prompt.","example":"Buy 0.01 BTC at market"}},"required":["id","scheme","typedData","action","nonce","description"]},"ManualPerpsPreparedBundleDto":{"type":"object","properties":{"prepareId":{"type":"string","description":"Single-use token to submit these signatures with."},"expiresAt":{"type":"string","description":"ISO timestamp after which the bundle is gone.","example":"2026-09-19T10:00:60.000Z"},"kind":{"type":"string","description":"Which mutation this bundle performs.","enum":["open","close","update-tpsl","cancel-order","edit-limit-order","add-margin","update-leverage","setup","open-triggers","close-triggers"]},"continuation":{"type":"boolean","description":"True when this bundle continues an earlier one (triggers sized from a fill, or the replacement leg of an edit), so a further round trip is expected rather than an error."},"items":{"description":"Items to sign, IN ORDER. The server posts them in this order and stops at the first failure.","type":"array","items":{"$ref":"#/components/schemas/ManualPerpsPreparedItemDto"}}},"required":["prepareId","expiresAt","kind","continuation","items"]},"ManualPerpsSetupPrepareResponseDto":{"type":"object","properties":{"setupRequired":{"type":"boolean","description":"False when the account is already fully set up."},"bundle":{"description":"Present only when `setupRequired` is true. Submit it to `:agentId/submit` like any other bundle.","allOf":[{"$ref":"#/components/schemas/ManualPerpsPreparedBundleDto"}]}},"required":["setupRequired"]},"ManualPerpsPrepareResponseDto":{"type":"object","properties":{"status":{"type":"string","description":"`prepared` starts a signing flow. `replayed` is a stored idempotent outcome, `refused` a validation or venue-state failure, and `completed` a mutation that needed no venue action at all — all three carry the same result envelope the legacy single-shot routes return.","enum":["prepared","replayed","refused","completed"]},"bundle":{"description":"Present when `status` is `prepared`.","allOf":[{"$ref":"#/components/schemas/ManualPerpsPreparedBundleDto"}]},"result":{"type":"object","description":"Present when `status` is `replayed`, `refused` or `completed`.","additionalProperties":true},"phase":{"type":"string","description":"Edit-limit-order only. `pre_cancel` means the resting order is untouched; `replacement_attempted` means the cancel landed and the original order is gone.","enum":["pre_cancel","cancel_ambiguous","replacement_attempted"]}},"required":["status"]},"ManualPerpsPreparedSignatureDto":{"type":"object","properties":{"id":{"type":"string","description":"Item id from the prepare response.","example":"order"},"signature":{"type":"string","description":"65-byte hex EIP-712 signature produced by the account wallet.","example":"0xababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab"}},"required":["id","signature"]},"TradingApiSubmitSignaturesDto":{"type":"object","properties":{"prepareId":{"type":"string","description":"The prepareId returned by the matching prepare call.","example":"2b0c2f3a-6f2a-4b3d-9f1e-6d2b3a4c5e6f"},"signatures":{"description":"One signature per prepared item.","type":"array","items":{"$ref":"#/components/schemas/ManualPerpsPreparedSignatureDto"}},"clientIp":{"type":"string","description":"End user IP address as seen by the tenant server. Recorded with the risk attestation; when absent the calling server's IP is recorded instead. Honoured for tenant operator keys only."}},"required":["prepareId","signatures"]},"ManualPerpsSubmitResponseDto":{"type":"object","properties":{"result":{"type":"object","description":"The mutation result, in the same envelope the legacy single-shot route returns.","additionalProperties":true},"next":{"description":"A further bundle to sign — SL/TP sized from the actual fill, the re-sized triggers after a partial close, or the replacement order of an edit. Submit it to the same route.","allOf":[{"$ref":"#/components/schemas/ManualPerpsPreparedBundleDto"}]},"setup":{"type":"object","description":"Setup bundles only. Which steps completed, in bundle order, so a client that stopped halfway prompts for what is actually left rather than for everything again. Venue steps are idempotent; `risk-attestation` is recorded by BT365 only on the Trading API owner-wallet lane.","additionalProperties":true},"phase":{"type":"string","description":"Edit-limit-order only — see the prepare response.","enum":["pre_cancel","cancel_ambiguous","replacement_attempted"]}},"required":["result"]},"TokenLaunchChainResponseDto":{"type":"object","properties":{"chainId":{"type":"number"},"launchMode":{"type":"string"},"available":{"type":"boolean"},"unavailableMessage":{"type":"string"},"unavailableReason":{"type":"string","enum":["feature_flag"]},"requiresPayment":{"type":"boolean"},"requiresEscrow":{"type":"boolean","description":"True when the creator must pre-fund a native gas escrow (chain 999)"},"singleSidedLp":{"type":"boolean"},"explorerBaseUrl":{"type":"string"},"wrappedNativeAddress":{"type":"string"},"wrappedNativeSymbol":{"type":"string"},"creatorFeeShareBps":{"type":"number"},"supportsTokenizedPairs":{"type":"boolean","description":"True when this chain accepts an optional pairTokenAddress (tokenized-asset pairing). Robinhood Chain only, gated on ROBINHOOD_TOKENIZED_PAIRS_ENABLED."}},"required":["chainId","launchMode","available","requiresPayment","requiresEscrow","singleSidedLp","explorerBaseUrl","wrappedNativeAddress","wrappedNativeSymbol","creatorFeeShareBps"]},"LaunchTokenDto":{"type":"object","properties":{}},"ConfirmFirstBuyDto":{"type":"object","properties":{}},"UpdateTokenMetadataDto":{"type":"object","properties":{}},"AssociateClickDto":{"type":"object","properties":{}},"DepositOrderDto":{"type":"object","properties":{"depositTxHash":{"type":"string","description":"Transaction hash of the deposit to the order wallet"}},"required":["depositTxHash"]},"CreatePermit2OrderDto":{"type":"object","properties":{"chainId":{"type":"number","enum":[42161,8453,1,999,4663,900001],"description":"Chain ID (currently Base only)"},"tokenIn":{"type":"string","description":"Token address to sell"},"tokenOut":{"type":"string","description":"Token address to buy"},"amount":{"type":"string","description":"Amount of tokenIn in raw units (e.g. \"1000000\" for 1 USDC)"},"limitPrice":{"type":"string","description":"Desired token-pair rate (e.g. \"1823.17\" = 1 tokenIn per 1823.17 tokenOut)"},"permit2Signature":{"type":"string","description":"EIP-712 Permit2 signature from user"},"permit2Nonce":{"type":"string","description":"Permit2 nonce used in the signature"},"permit2Deadline":{"type":"number","description":"Unix timestamp when the Permit2 signature expires"},"expiry":{"type":"number","description":"Order expiry in seconds (86400=1d, 604800=1w, 2592000=1mo, 31536000=1yr)"},"tokenInSymbol":{"type":"string","description":"Human-readable symbol for tokenIn"},"tokenOutSymbol":{"type":"string","description":"Human-readable symbol for tokenOut"},"tokenInDecimals":{"type":"number","description":"Decimals for tokenIn (read from contract if omitted)"},"tokenOutDecimals":{"type":"number","description":"Decimals for tokenOut (read from contract if omitted)"}},"required":["chainId","tokenIn","tokenOut","amount","limitPrice","permit2Signature","permit2Nonce","permit2Deadline","expiry"]},"PartnerAttributeRequestDto":{"type":"object","properties":{}},"StartHlOutcomeHyperEvmFundingDto":{"type":"object","properties":{"clientRequestId":{"type":"string","description":"Idempotency key generated by the client for this funding intent","example":"funding-1700000000000"},"amountRaw":{"type":"string","description":"USDH amount in 6-decimal raw units","example":"10000000"}},"required":["clientRequestId","amountRaw"]},"StartHlOutcomeArbUsdcFundingDto":{"type":"object","properties":{"clientRequestId":{"type":"string","description":"Idempotency key generated by the client for this funding intent","example":"arb-funding-1700000000000"},"usdcAmountRaw":{"type":"string","description":"USDC amount in 6-decimal raw base units. Min 20 USDC (20000000) — see MIN_ARB_USDC_FUNDING_RAW.","example":"20000000"}},"required":["clientRequestId","usdcAmountRaw"]},"MoveHlPocketFundsDto":{"type":"object","properties":{"clientRequestId":{"type":"string","description":"Idempotency key generated by the client for this move intent","example":"move-funds-1700000000000"},"direction":{"type":"string","description":"Transfer direction: toPrediction = Trading balance -> Prediction account; toTradingBalance = reverse.","enum":["toPrediction","toTradingBalance"]},"usdcAmountRaw":{"type":"string","description":"USDC amount in 6-decimal raw base units. Min 2 USDC (2000000); min 5 USDC on the first transfer into a never-activated HL account.","example":"5000000"}},"required":["clientRequestId","direction","usdcAmountRaw"]},"PlaceHlOutcomeOrderDto":{"type":"object","properties":{"clientRequestId":{"type":"string","description":"Idempotency key generated by the client for this order intent","example":"order-ticket-1700000000000"},"outcomeId":{"type":"number","example":0},"sideIndex":{"type":"number","example":0,"enum":[0,1]},"direction":{"type":"string","enum":["buy","sell"]},"sizeShares":{"type":"string","example":"1"},"limitPrice":{"type":"string","example":"0.42"},"timeInForce":{"type":"string","enum":["Ioc","Gtc"]}},"required":["clientRequestId","outcomeId","sideIndex","direction","sizeShares","limitPrice","timeInForce"]},"CancelHlOutcomeOrderDto":{"type":"object","properties":{"outcomeId":{"type":"number","example":0},"sideIndex":{"type":"number","example":0,"enum":[0,1]},"oid":{"type":"string","description":"Hyperliquid oid"},"cloid":{"type":"string","description":"Client order id"}},"required":["outcomeId","sideIndex"]},"BuyHypercoreSpotOrderDto":{"type":"object","properties":{"clientRequestId":{"type":"string","description":"Caller-generated idempotency key","minLength":8,"maxLength":128},"sizeBase":{"type":"string","description":"HYPE size in base-token units","example":"1.25"},"slippageBps":{"type":"number","default":50,"minimum":1,"maximum":300}},"required":["clientRequestId","sizeBase"]},"SellHypercoreSpotOrderDto":{"type":"object","properties":{"clientRequestId":{"type":"string","description":"Caller-generated idempotency key","minLength":8,"maxLength":128},"sizeBase":{"type":"string","description":"HYPE size in base-token units","example":"1.25"},"fullClose":{"type":"boolean","description":"Sell the entire post-sync HYPE balance","default":false},"slippageBps":{"type":"number","default":50,"minimum":1,"maximum":300}},"required":["clientRequestId"]},"CoreToEvmHypercoreSpotTransferDto":{"type":"object","properties":{"clientRequestId":{"type":"string","description":"Caller-generated idempotency key","minLength":8,"maxLength":128},"amountRaw":{"type":"string","description":"HYPE amount in canonical HyperCore atomic units","example":"125000000"}},"required":["clientRequestId","amountRaw"]},"EvmToCoreHypercoreSpotTransferDto":{"type":"object","properties":{"clientRequestId":{"type":"string","description":"Caller-generated idempotency key","minLength":8,"maxLength":128},"amountRaw":{"type":"string","description":"HYPE amount in canonical HyperCore atomic units","example":"125000000"}},"required":["clientRequestId","amountRaw"]},"PerpsToSpotHypercoreUsdcTransferDto":{"type":"object","properties":{"clientRequestId":{"type":"string","description":"Caller-generated idempotency key","minLength":8,"maxLength":128},"amount":{"type":"string","description":"USDC amount with at most 6 decimal places","example":"25.5"}},"required":["clientRequestId","amount"]},"SpotToPerpsHypercoreUsdcTransferDto":{"type":"object","properties":{"clientRequestId":{"type":"string","description":"Caller-generated idempotency key","minLength":8,"maxLength":128},"amount":{"type":"string","description":"USDC amount with at most 6 decimal places","example":"25.5"}},"required":["clientRequestId","amount"]},"WithdrawToOwnerHypercoreSpotTransferDto":{"type":"object","properties":{"clientRequestId":{"type":"string","description":"Caller-generated idempotency key","minLength":8,"maxLength":128},"amountRaw":{"type":"string","description":"HYPE amount in canonical HyperCore atomic units","example":"125000000"}},"required":["clientRequestId","amountRaw"]},"UpdateManualPerpsLeverageDto":{"type":"object","properties":{"asset":{"type":"string","description":"Asset symbol (e.g. \"AVNT\", \"BTC\"). Must have an open position.","example":"BTC"},"leverage":{"type":"number","description":"Exact leverage multiplier to set. The asset-specific venue maximum may be lower than 100.","example":10,"minimum":1,"maximum":100}},"required":["asset","leverage"]},"SubmitManualPerpsSignaturesDto":{"type":"object","properties":{"prepareId":{"type":"string","description":"The prepareId returned by the matching prepare call.","example":"2b0c2f3a-6f2a-4b3d-9f1e-6d2b3a4c5e6f"},"signatures":{"description":"One signature per prepared item.","type":"array","items":{"$ref":"#/components/schemas/ManualPerpsPreparedSignatureDto"}}},"required":["prepareId","signatures"]},"GenerateAgentReviewDto":{"type":"object","properties":{}},"RelayFundingDto":{"type":"object","properties":{}},"RelaySendDto":{"type":"object","properties":{}},"ReportSwapFailureDto":{"type":"object","properties":{"chainId":{"type":"number","description":"Chain ID where the swap reverted","example":8453},"txHash":{"type":"string","description":"Hash of the reverted swap transaction"},"error":{"type":"string","description":"Chain or receipt error observed by the client"}},"required":["chainId","txHash","error"]},"BuildSwapRequestDto":{"type":"object","properties":{"tokenIn":{"type":"string","description":"Input token address","example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},"tokenOut":{"type":"string","description":"Output token address","example":"0x4200000000000000000000000000000000000006"},"amountIn":{"type":"string","description":"Input amount in smallest units","example":"1000000"},"chainId":{"type":"number","description":"Chain ID — Ethereum (1), Base (8453), Arbitrum One (42161), HyperEVM (999) or Robinhood Chain (4663)","example":8453},"slippageBps":{"type":"number","description":"Slippage tolerance in basis points (default 100 = 1%). Capped server-side.","example":100,"minimum":1,"maximum":500},"protocol":{"type":"string","description":"Preferred protocol (otherwise best route is chosen)","example":"UNISWAP_V3_500"},"allowNativeInput":{"type":"boolean","description":"Opt in to paying with native ETH (tokenIn = the 0xEeee… sentinel). Honoured only on Base when tokenOut is a Coinbase B20 stock; the native step then has no approval and its value is amountIn plus the fee. Without it a native input is refused, so clients that expect an approval on every step never receive a step without one.","example":true}},"required":["tokenIn","tokenOut","amountIn","chainId"]},"SponsorSendGasRequestDto":{"type":"object","properties":{"tokenAddress":{"type":"string","description":"ERC-20 token being sent","example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},"chainId":{"type":"number","description":"Chain ID — only Base (8453) is sponsored","example":8453},"amount":{"type":"string","description":"Send amount in HUMAN units (used only for the min-value guard)","example":"12.5"},"recipient":{"type":"string","description":"Recipient address (informational; the drip funds the sender, not the recipient)","example":"0x5Ffb4829848b388BF8414C05335d9e58E3398b39"}},"required":["tokenAddress","chainId","amount"]},"RobinhoodStockDto":{"type":"object","properties":{"address":{"type":"string","example":"0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9"},"symbol":{"type":"string","example":"AAPL"},"name":{"type":"string","example":"Apple"},"decimals":{"type":"number","example":18},"chainId":{"type":"number","example":4663},"logo":{"type":"string","nullable":true},"priceUsd":{"type":"string","nullable":true,"example":"227.34"},"priceAsOf":{"type":"number","nullable":true,"description":"Epoch milliseconds of the price snapshot"},"priceStale":{"type":"boolean","description":"True only when the supplied price is last-known"},"priceAgeMs":{"type":"number","nullable":true,"example":41000,"description":"Age of the supplied price in milliseconds at response time, or null when the token has no price. Prefer this over `priceStale` for display: a boolean can only say \"old\", while an age lets a client render \"price 6 min old\" and lets an operator tell a slow refresh from a dead one. `priceStale` stays for backward compatibility."},"feeTier":{"type":"number","nullable":true,"example":3000},"quoteToken":{"type":"string","nullable":true,"description":"Quote-token address of the selected Uniswap V3 pool"},"poolAddress":{"type":"string","nullable":true,"description":"Address of the Uniswap V3 pool the price is read from. This is the key a client passes to `GET /swap?poolAddress=…` for the price history behind a sparkline or chart — null while the token has no live pool."},"tradable":{"type":"boolean","description":"Whether the token can actually be bought right now: a live pool with non-zero liquidity backs it. A catalog entry with no pool is listed here but must not be offered as a swap target."},"change24hPct":{"type":"number","nullable":true,"example":-1.42,"description":"Percent change over the last 24h of recorded pool history. Null until the token has at least two history buckets — never a fabricated zero."},"tvlUsd":{"type":"string","nullable":true,"example":"665000.5","description":"USD value of both token balances the price pool actually holds, read on-chain together with the price — real deposits plus uncollected fees, never the V3 virtual reserve. Null while the token has no live pool or the pool has not been read since discovery."},"volume30dUsd":{"type":"string","nullable":true,"example":"1250000","description":"USD swap volume through the price pool over the last 30 days, from the first-party DEX trade tape. Null when the pool has never been indexed; a funded pool that traded nothing reports \"0\"."},"volume24hUsd":{"type":"string","nullable":true,"example":"41250","description":"USD swap volume through the price pool over the last 24 hours, from the same first-party DEX trade tape as `volume30dUsd`. Null when the pool has never been indexed; a funded pool that traded nothing today reports \"0\"."},"feeApr30dPct":{"type":"number","nullable":true,"example":4.37,"description":"Fee APR in percent: the swap fees the pool earned over its covered window (up to 30 days, from its first priced trade) as a share of `tvlUsd`, annualised. Null — never 0 — unless the pool has at least 7 days of priced coverage, a TVL of at least $1,000 and a known fee tier; a covered, funded pool that traded nothing is an honest 0."}},"required":["address","symbol","name","decimals","chainId","logo","priceUsd","priceAsOf","priceStale","priceAgeMs","feeTier","quoteToken","poolAddress","tradable","change24hPct","tvlUsd","volume30dUsd","volume24hUsd","feeApr30dPct"]},"RobinhoodStocksResponseDto":{"type":"object","properties":{"tokens":{"type":"array","items":{"$ref":"#/components/schemas/RobinhoodStockDto"}},"asOf":{"type":"number","nullable":true,"description":"Epoch milliseconds of the price snapshot"},"stale":{"type":"boolean","description":"True when the price snapshot is last-known or not initialized"},"ageMs":{"type":"number","nullable":true,"example":41000,"description":"Age of the price snapshot in milliseconds at response time; null when no snapshot has ever been taken. Recomputed per request, so it stays truthful even when the body was served from the SWR cache."},"tradableCount":{"type":"number","description":"How many catalog entries are backed by a live, funded pool"}},"required":["tokens","asOf","stale","ageMs","tradableCount"]},"StockDto":{"type":"object","properties":{"address":{"type":"string","example":"0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9"},"symbol":{"type":"string","example":"AAPL"},"name":{"type":"string","example":"Apple"},"decimals":{"type":"number","example":18},"chainId":{"type":"number","example":4663},"logo":{"type":"string","nullable":true},"priceUsd":{"type":"string","nullable":true,"example":"227.34"},"priceAsOf":{"type":"number","nullable":true,"description":"Epoch milliseconds of the price snapshot"},"priceStale":{"type":"boolean","description":"True only when the supplied price is last-known"},"priceAgeMs":{"type":"number","nullable":true,"example":41000,"description":"Age of the supplied price in milliseconds at response time, or null when the token has no price. Prefer this over `priceStale` for display: a boolean can only say \"old\", while an age lets a client render \"price 6 min old\" and lets an operator tell a slow refresh from a dead one. `priceStale` stays for backward compatibility."},"feeTier":{"type":"number","nullable":true,"example":3000},"quoteToken":{"type":"string","nullable":true,"description":"Quote-token address of the selected Uniswap V3 pool"},"poolAddress":{"type":"string","nullable":true,"description":"Address of the Uniswap V3 pool the price is read from. This is the key a client passes to `GET /swap?poolAddress=…` for the price history behind a sparkline or chart — null while the token has no live pool."},"tradable":{"type":"boolean","description":"Whether the token can actually be bought right now: a live pool with non-zero liquidity backs it. A catalog entry with no pool is listed here but must not be offered as a swap target."},"change24hPct":{"type":"number","nullable":true,"example":-1.42,"description":"Percent change over the last 24h of recorded pool history. Null until the token has at least two history buckets — never a fabricated zero."},"tvlUsd":{"type":"string","nullable":true,"example":"665000.5","description":"USD value of both token balances the price pool actually holds, read on-chain together with the price — real deposits plus uncollected fees, never the V3 virtual reserve. Null while the token has no live pool or the pool has not been read since discovery."},"volume30dUsd":{"type":"string","nullable":true,"example":"1250000","description":"USD swap volume through the price pool over the last 30 days, from the first-party DEX trade tape. Null when the pool has never been indexed; a funded pool that traded nothing reports \"0\"."},"volume24hUsd":{"type":"string","nullable":true,"example":"41250","description":"USD swap volume through the price pool over the last 24 hours, from the same first-party DEX trade tape as `volume30dUsd`. Null when the pool has never been indexed; a funded pool that traded nothing today reports \"0\"."},"feeApr30dPct":{"type":"number","nullable":true,"example":4.37,"description":"Fee APR in percent: the swap fees the pool earned over its covered window (up to 30 days, from its first priced trade) as a share of `tvlUsd`, annualised. Null — never 0 — unless the pool has at least 7 days of priced coverage, a TVL of at least $1,000 and a known fee tier; a covered, funded pool that traded nothing is an honest 0."},"issuer":{"type":"string","description":"Who stands behind the share. Identity is (chainId, address), never the ticker.","enum":["robinhood","coinbase"]},"venue":{"type":"string","nullable":true,"enum":["uniswap_v3","uniswap_v4","aerodrome_v3"],"description":"Venue of the price pool behind `poolAddress`: a Uniswap V3 or Aerodrome Slipstream pool address, or a Uniswap V4 pool id (bytes32). Absent on Robinhood rows (always Uniswap V3); null when the token has no live pool."},"totalTvlUsd":{"type":"string","nullable":true,"example":"1904000.12","description":"USD value of the balances held by EVERY readable USDC pool for the token — each Uniswap V3 and Aerodrome Slipstream pool, routable or not — at the price pool's mid. `tvlUsd` stays the price pool's own (the denominator of `feeApr30dPct`). Uniswap V4 pools have no per-pool balances and are not counted. Null when the token is unpriced, a read failed (never a partial sum) or it has no readable pool. Absent on Robinhood rows."},"totalTvlIsLowerBound":{"type":"boolean","description":"True when a Uniswap V4 pool for the token also holds real depth (it filled the price probe). V4 pools have no per-pool balances, so `totalTvlUsd` is then a floor, not the whole depth. Absent on Robinhood rows."},"sector":{"type":"object","description":"Sector badge (`{ key, label }`, e.g. `chips` / `CHIPS`) from the backend sector map — the one source the clients read. Absent when the ticker is not in the map; never a guess."}},"required":["address","symbol","name","decimals","chainId","logo","priceUsd","priceAsOf","priceStale","priceAgeMs","feeTier","quoteToken","poolAddress","tradable","change24hPct","tvlUsd","volume30dUsd","volume24hUsd","feeApr30dPct","issuer"]},"StocksIssuerSummaryDto":{"type":"object","properties":{"issuer":{"type":"string","enum":["robinhood","coinbase"]},"available":{"type":"boolean","description":"False when this issuer's venue is on but it failed to list for this response: its rows are absent and a client should keep its last-good copy. An issuer whose venue is off is not listed at all."},"asOf":{"type":"number","nullable":true,"description":"Epoch milliseconds of this issuer's price snapshot"},"ageMs":{"type":"number","nullable":true,"description":"Age of that snapshot as of this response, in ms"},"stale":{"type":"boolean","description":"True when this issuer's snapshot is last-known or older than its display window"},"tradableCount":{"type":"number","description":"Rows of this issuer backed by a live, funded pool"}},"required":["issuer","available","asOf","ageMs","stale","tradableCount"]},"StocksResponseDto":{"type":"object","properties":{"tokens":{"type":"array","items":{"$ref":"#/components/schemas/StockDto"}},"asOf":{"type":"number","nullable":true,"description":"Oldest contributing snapshot (epoch ms) — worst case across issuers"},"ageMs":{"type":"number","nullable":true,"description":"Largest snapshot age across issuers, in ms, as of this response"},"stale":{"type":"boolean","description":"True when any contributing issuer is stale, or no issuer contributed"},"tradableCount":{"type":"number","description":"Rows across all issuers backed by a live, funded pool"},"issuers":{"description":"Per-issuer provenance; one entry per issuer whose venue is on (`available: false` when it failed to list)","type":"array","items":{"$ref":"#/components/schemas/StocksIssuerSummaryDto"}}},"required":["tokens","asOf","ageMs","stale","tradableCount","issuers"]},"InitiateBridgeDto":{"type":"object","properties":{}},"BuildSolanaBridgeDto":{"type":"object","properties":{}},"RegisterSolanaBridgeDto":{"type":"object","properties":{}},"ReclaimSolanaRentDto":{"type":"object","properties":{}},"RegisterBridgeDepositDto":{"type":"object","properties":{}},"QuoteRequestDto":{"type":"object","properties":{}},"BuildRequestDto":{"type":"object","properties":{}},"RegisterRequestDto":{"type":"object","properties":{}},"ChatMessageDto":{"type":"object","properties":{"message":{"type":"string","description":"The user message text","example":"What is the current price of ETH?"},"walletAddress":{"type":"string","description":"User wallet address for context-aware responses","example":"0x1234567890abcdef1234567890abcdef12345678"},"chainId":{"type":"number","description":"Chain ID for network-specific queries","example":8453,"default":8453},"conversationId":{"type":"string","description":"Conversation ID for context continuity","example":"conv_abc123"},"balanceSummary":{"type":"string","description":"Summary of user balances across chains for AI context","example":"Base: $1,234 (0.5 ETH, 34 USDC) | Solana: $89 (0.5 SOL)"}},"required":["message"]},"ChatActionDto":{"type":"object","properties":{"type":{"type":"string","description":"Type of action","enum":["DISPLAY","PROPOSE_SWAP","EXTERNAL_LINK","NAVIGATE","CONFIRM_AGENT_CREATE","RECOMMEND_TEMPLATES","GUIDED_FLOW_STEP","STRATEGY_UPDATE"],"example":"DISPLAY"},"agentDetails":{"type":"object","description":"Agent creation details for CONFIRM_AGENT_CREATE action"},"recommendedTemplates":{"description":"Recommended templates for RECOMMEND_TEMPLATES action","type":"array","items":{"type":"string"}},"guidedFlowStep":{"type":"object","description":"Guided flow step data for GUIDED_FLOW_STEP action"},"agentId":{"type":"string","description":"Agent ID for STRATEGY_UPDATE action"},"url":{"type":"string","description":"URL for EXTERNAL_LINK action"},"route":{"type":"string","description":"Route for NAVIGATE action"},"swapProposal":{"type":"object","description":"Swap proposal for PROPOSE_SWAP action"}},"required":["type"]},"ChatResponseDto":{"type":"object","properties":{"response":{"type":"string","description":"The AI response text (may contain markdown)","example":"The current price of ETH is $3,245.67"},"intentType":{"type":"string","description":"The detected intent type (legacy, may be omitted in tool_use mode)","enum":["PRICE_QUERY","BALANCE_QUERY","PORTFOLIO_INFO","MARKET_ANALYSIS","TRADE_ORDER","EDUCATIONAL","GENERAL","CREATE_AGENT"],"example":"PRICE_QUERY"},"action":{"description":"Action for frontend to handle","allOf":[{"$ref":"#/components/schemas/ChatActionDto"}]},"toolsUsed":{"description":"Which tools Claude called during this request","example":["get_token_price","get_wallet_balance"],"type":"array","items":{"type":"string"}},"data":{"type":"object","description":"Additional data from the query (price, balance, etc)"},"timestamp":{"type":"string","description":"Timestamp of the response","example":"2026-01-22T10:30:00.000Z"},"conversationId":{"type":"string","description":"Conversation ID for context continuity","example":"conv_abc123"},"tokensUsed":{"type":"number","description":"Total tokens used across all LLM calls in this request","example":150},"estimatedCost":{"type":"number","description":"Estimated credit cost for this request","example":0.005}},"required":["response","timestamp"]},"ExecuteAgentCreationDto":{"type":"object","properties":{"agentDetails":{"type":"object","description":"Agent creation details from confirmation"},"name":{"type":"string","description":"User-provided name override"},"bio":{"type":"string","description":"User-provided bio override"},"category":{"type":"string","description":"User-provided category override"}},"required":["agentDetails"]},"HealthCheckDto":{"type":"object","properties":{"status":{"type":"string","description":"Overall status","example":"ok"},"anthropic":{"type":"boolean","description":"Anthropic API configured","example":true},"timestamp":{"type":"string","description":"Timestamp","example":"2026-02-06T10:30:00.000Z"}},"required":["status","anthropic","timestamp"]},"StartGuidedFlowDto":{"type":"object","properties":{"walletAddress":{"type":"string","description":"Wallet address"},"chainId":{"type":"number","description":"Chain ID"}}},"GuidedFlowAnswerDto":{"type":"object","properties":{"sessionId":{"type":"string","description":"Session ID for tracking flow state"},"stepId":{"type":"string","description":"Current step ID","enum":["welcome","strategy_type","risk_level","time_horizon","tokens","triggers","review"]},"answer":{"type":"string","description":"User selected answer value"},"walletAddress":{"type":"string","description":"Wallet address"},"chainId":{"type":"number","description":"Chain ID"}},"required":["sessionId","stepId","answer"]},"ChatConversationSummaryDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique conversation identifier","example":"550e8400-e29b-41d4-a716-446655440000"},"title":{"type":"string","description":"Conversation title (auto-generated from first message)","example":"What is the price of ETH"},"messageCount":{"type":"number","description":"Number of messages in the conversation","example":5},"isArchived":{"type":"boolean","description":"Whether the conversation is archived","example":false},"updatedAt":{"type":"string","description":"When the conversation was last updated","example":"2026-02-12T10:30:00.000Z"},"createdAt":{"type":"string","description":"When the conversation was created","example":"2026-02-12T10:00:00.000Z"}},"required":["id","title","messageCount","isArchived","updatedAt","createdAt"]},"ListConversationsResponseDto":{"type":"object","properties":{"conversations":{"description":"List of conversations","type":"array","items":{"$ref":"#/components/schemas/ChatConversationSummaryDto"}},"total":{"type":"number","description":"Total count of conversations matching the query","example":42}},"required":["conversations","total"]},"ChatMessageSummaryDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique message identifier","example":"550e8400-e29b-41d4-a716-446655440001"},"role":{"type":"string","description":"Message role","enum":["user","assistant"],"example":"user"},"content":{"type":"string","description":"Message content text","example":"What is the current price of ETH?"},"action":{"type":"object","description":"Action associated with this message (for assistant messages)"},"createdAt":{"type":"string","description":"When the message was created","example":"2026-02-12T10:00:00.000Z"}},"required":["id","role","content","createdAt"]},"ChatConversationWithMessagesDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique conversation identifier","example":"550e8400-e29b-41d4-a716-446655440000"},"title":{"type":"string","description":"Conversation title (auto-generated from first message)","example":"What is the price of ETH"},"messageCount":{"type":"number","description":"Number of messages in the conversation","example":5},"isArchived":{"type":"boolean","description":"Whether the conversation is archived","example":false},"updatedAt":{"type":"string","description":"When the conversation was last updated","example":"2026-02-12T10:30:00.000Z"},"createdAt":{"type":"string","description":"When the conversation was created","example":"2026-02-12T10:00:00.000Z"},"messages":{"description":"Messages in this conversation","type":"array","items":{"$ref":"#/components/schemas/ChatMessageSummaryDto"}}},"required":["id","title","messageCount","isArchived","updatedAt","createdAt","messages"]},"CreateLeadDto":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"company":{"type":"string"},"role":{"type":"string"},"phone":{"type":"string"},"password":{"type":"string","description":"Legacy field; no longer required"}},"required":["name","email","company","role"]},"SlideViewDto":{"type":"object","properties":{"slideIndex":{"type":"number"},"slideId":{"type":"string"},"slideLabel":{"type":"string"},"durationMs":{"type":"number"}},"required":["slideIndex","slideId","slideLabel","durationMs"]},"SubmitAnalyticsDto":{"type":"object","properties":{"leadId":{"type":"string"},"slides":{"type":"array","items":{"$ref":"#/components/schemas/SlideViewDto"}}},"required":["leadId","slides"]},"WalletAuthDto":{"type":"object","properties":{"wallet":{"type":"string","description":"Wallet address (EVM)","example":"0x8e2Aec961519d0F0C096802144C2D5856FFBCf75"},"signature":{"type":"string","description":"EIP-191 personal_sign of: \"Sign in to BT365 Mini App\\nWallet: {wallet}\\nTimestamp: {timestamp}\"","example":"0x..."},"timestamp":{"type":"number","description":"Unix timestamp (seconds) used in the signed message","example":1708430000}},"required":["wallet","signature","timestamp"]},"WalletAuthResponseDto":{"type":"object","properties":{"token":{"type":"string","description":"JWT token for authenticated requests"},"expiresAt":{"type":"string","description":"Token expiration time (ISO 8601)"}},"required":["token","expiresAt"]},"CreateBacktestDto":{"type":"object","properties":{"agentId":{"type":"string","description":"Pre-populate config from existing agent"},"strategyType":{"type":"string","enum":["PERPS_TRADER_V1","PERPS_SCALPER_V1","HIP3_FLOW_SCALPER_V1","HIP3_OVERNIGHT_GAP_REVERSION_V1"]},"assets":{"description":"Assets to backtest (e.g. [\"BTC\",\"ETH\"])","type":"array","items":{"type":"string"}},"durationDays":{"type":"number","description":"Backtest duration in days","enum":[7,30,90,180]},"timeframe":{"type":"string","description":"Candle timeframe","enum":["1h","4h","1d"]},"initialEquity":{"type":"number","description":"Starting equity in USDC (simulated)","default":"1000"},"strategyConfig":{"type":"object","description":"Strategy config override (optional if agentId provided)"}},"required":["strategyType","assets","durationDays","timeframe","initialEquity"]},"BacktestCreatedResponseDto":{"type":"object","properties":{"backtestRunId":{"type":"string"},"status":{"type":"string","enum":["pending","running","completed","failed"]},"estimatedSeconds":{"type":"number","description":"Estimated seconds until completion"}},"required":["backtestRunId","status","estimatedSeconds"]},"ReflectionResponseDto":{"type":"object","properties":{"id":{"type":"string"},"agentId":{"type":"string"},"weekStart":{"type":"string","description":"Week start (Monday UTC), YYYY-MM-DD"},"weekEnd":{"type":"string","description":"Week end (Sunday UTC), YYYY-MM-DD"},"summary":{"type":"string"},"whatWorked":{"type":"string"},"whatFailed":{"type":"string"},"whatChanged":{"type":"string"},"nextWeekFocus":{"type":"string"},"metrics":{"type":"object"},"model":{"type":"string"},"generatedAt":{"format":"date-time","type":"string"}},"required":["id","agentId","weekStart","weekEnd","summary","whatWorked","whatFailed","whatChanged","nextWeekFocus","metrics","model","generatedAt"]},"ReflectionListResponseDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReflectionResponseDto"}},"total":{"type":"number"}},"required":["items","total"]},"WalletTotalsValueDto":{"type":"object","properties":{"usd":{"type":"number"},"change24hUsd":{"type":"number","nullable":true},"change24hPct":{"type":"number","nullable":true},"complete":{"type":"boolean"}},"required":["usd","change24hUsd","change24hPct","complete"]},"WalletTotalsLegDto":{"type":"object","properties":{"usd":{"type":"number","nullable":false},"change24hUsd":{"type":"number","nullable":true},"complete":{"type":"boolean"},"unpricedCount":{"type":"number"},"hiddenTokenCount":{"type":"number"},"hiddenTokens":{"type":"array","items":{"type":"string"}},"countedInChange":{"type":"boolean"}},"required":["usd","change24hUsd","complete","unpricedCount","hiddenTokenCount","hiddenTokens","countedInChange"]},"WalletTotalsLegsDto":{"type":"object","properties":{"walletEvm":{"$ref":"#/components/schemas/WalletTotalsLegDto"},"walletSolana":{"$ref":"#/components/schemas/WalletTotalsLegDto"},"tradingAccount":{"$ref":"#/components/schemas/WalletTotalsLegDto"},"prediction":{"$ref":"#/components/schemas/WalletTotalsLegDto"},"agents":{"$ref":"#/components/schemas/WalletTotalsLegDto"}},"required":["walletEvm","walletSolana","tradingAccount","prediction","agents"]},"WalletTotalsInBt365Dto":{"type":"object","properties":{"usd":{"type":"number"},"change24hUsd":{"type":"number","nullable":true},"change24hPct":{"type":"number","nullable":true},"complete":{"type":"boolean"},"unpricedCount":{"type":"number"},"hiddenTokenCount":{"type":"number"},"changeBasis":{"type":"string","enum":["history","price_move"],"nullable":true},"legs":{"$ref":"#/components/schemas/WalletTotalsLegsDto"}},"required":["usd","change24hUsd","change24hPct","complete","unpricedCount","hiddenTokenCount","changeBasis","legs"]},"WalletTotalsExternalWalletDto":{"type":"object","properties":{"usd":{"type":"number","nullable":true},"change24hUsd":{"type":"number","nullable":true},"complete":{"type":"boolean"},"unpricedCount":{"type":"number"},"hiddenTokenCount":{"type":"number"},"hiddenTokens":{"type":"array","items":{"type":"string"}},"id":{"type":"string","nullable":true},"address":{"type":"string"},"chainType":{"type":"string","enum":["ethereum","solana"]},"label":{"type":"string","nullable":true},"source":{"type":"string","enum":["signature","privy_link","sign_in"]}},"required":["usd","change24hUsd","complete","unpricedCount","hiddenTokenCount","hiddenTokens","id","address","chainType","label","source"]},"WalletTotalsExternalDto":{"type":"object","properties":{"usd":{"type":"number"},"change24hUsd":{"type":"number","nullable":true},"change24hPct":{"type":"number","nullable":true},"complete":{"type":"boolean"},"unpricedCount":{"type":"number"},"hiddenTokenCount":{"type":"number"},"wallets":{"type":"array","items":{"$ref":"#/components/schemas/WalletTotalsExternalWalletDto"}}},"required":["usd","change24hUsd","change24hPct","complete","unpricedCount","hiddenTokenCount","wallets"]},"WalletTotalsDto":{"type":"object","properties":{"total":{"$ref":"#/components/schemas/WalletTotalsValueDto"},"inBt365":{"$ref":"#/components/schemas/WalletTotalsInBt365Dto"},"external":{"$ref":"#/components/schemas/WalletTotalsExternalDto"},"asOf":{"type":"string","format":"date-time"}},"required":["total","inBt365","external","asOf"]},"InAppDeleteAccountDto":{"type":"object","properties":{"confirm":{"type":"string","description":"Must be the literal string \"DELETE\" to confirm.","example":"DELETE"}},"required":["confirm"]},"PublicDeleteChallengeDto":{"type":"object","properties":{"address":{"type":"string","description":"The wallet address to delete."}},"required":["address"]},"PublicDeleteConfirmDto":{"type":"object","properties":{"address":{"type":"string","description":"The wallet address to delete."},"signature":{"type":"string","description":"The signature over the challenge message."}},"required":["address","signature"]},"PlacePolymarketBuyDto":{"type":"object","properties":{"conditionId":{"type":"string","description":"Polymarket conditionId (Gamma)","example":"0xabc…"},"marketSlug":{"type":"string","description":"Market slug (audit/log only)","example":"will-x-happen"},"marketQuestion":{"type":"string","description":"Market question (audit/log only)"},"tokenId":{"type":"string","description":"Outcome tokenId from CLOB","example":"12345"},"outcome":{"type":"string","description":"Outcome side","enum":["YES","NO"]},"price":{"type":"number","description":"Limit price in USDC (must be tick-aligned, 0 < price < 1)","example":0.42,"minimum":0.0001,"maximum":0.9999},"shares":{"type":"number","description":"Shares to buy. Notional = price * shares must be ≥ POLYMARKET_MIN_ORDER_NOTIONAL_USDC.","example":25,"minimum":0.01},"negRisk":{"type":"boolean","description":"Treat as a NegRisk market (sets the CLOB negRisk flag).","default":false},"executionIntentId":{"type":"string","description":"Idempotency key — caller-provided UUID for the execution intent. Two requests with the same id are deduped at the CLOB ledger layer."}},"required":["conditionId","marketSlug","marketQuestion","tokenId","outcome","price","shares"]},"SubscribeDto":{"type":"object","properties":{}},"SubscribePrecheckDto":{"type":"object","properties":{}},"UnsubscribeDto":{"type":"object","properties":{}},"PatchSubscriptionDto":{"type":"object","properties":{}},"ResumeSubscriptionDto":{"type":"object","properties":{}},"LeaderConfigDto":{"type":"object","properties":{}},"CopyPlatformAgentDto":{"type":"object","properties":{}},"DeriveFundPotDto":{"type":"object","properties":{"currency":{"type":"string","description":"Option currency to fund, as the venue lists it","example":"SOL"},"marginType":{"type":"string","enum":["SM","PM2"],"description":"Standard (shared per universe) or portfolio (this currency only)"}},"required":["currency","marginType"]},"DeriveOwnerAuthDto":{"type":"object","properties":{"timestamp":{"type":"string","description":"Unix milliseconds the wallet signed, as a decimal string","example":"1793197425312"},"signature":{"type":"string","description":"EIP-191 signature over the timestamp string"}},"required":["timestamp","signature"]},"DeriveAuthorizePrepareDto":{"type":"object","properties":{"auth":{"$ref":"#/components/schemas/DeriveOwnerAuthDto"}},"required":["auth"]},"DeriveAuthorizeSubmitDto":{"type":"object","properties":{"keyId":{"type":"string","description":"The `keyId` returned by prepare"},"actionSignature":{"type":"string","description":"EIP-712 signature (`eth_signTypedData_v4`) over the typed data returned by prepare"},"auth":{"$ref":"#/components/schemas/DeriveOwnerAuthDto"}},"required":["keyId","actionSignature","auth"]},"DeriveOrderRequestDto":{"type":"object","properties":{"instrument":{"type":"string","example":"ETH-20261016-2500-C"},"side":{"type":"string","enum":["buy","sell"]},"amount":{"type":"string","description":"Contracts, decimal string; rounded down to the amount step","example":"0.5"},"orderType":{"type":"string","enum":["limit","market"]},"limitPrice":{"type":"string","description":"Confirmed worst price in USDC per contract, including market orders","example":"35.5"},"timeInForce":{"type":"string","enum":["gtc","post_only","ioc","fok"]},"intent":{"type":"string","enum":["open","close"],"description":"Plan 068.4: open or close, never inferred. Omitted: a buy opens and a sell closes, as before. A sell `open` writes a cash-secured put (DERIVE_SHORT_OPTIONS_ENABLED); a buy `close` buys back a short."}},"required":["instrument","side","amount","orderType","limitPrice"]},"DeriveCancelRequestDto":{"type":"object","properties":{"orderId":{"type":"string"},"intentId":{"type":"string"},"instrument":{"type":"string"}}},"DeriveWithdrawPrepareDto":{"type":"object","properties":{"amount":{"type":"string","description":"USDC amount as a decimal string, or `max`","example":"25.5"},"subaccountId":{"type":"string","description":"Plan 068.2: the pot (venue subaccount) to withdraw from; the PRIME pot when omitted","example":"120102"}},"required":["amount"]},"DeriveWithdrawSubmitDto":{"type":"object","properties":{"withdrawalId":{"type":"string","description":"The `withdrawalId` returned by prepare"},"actionSignature":{"type":"string","description":"EIP-712 signature (`eth_signTypedData_v4`) over the typed data returned by prepare"},"auth":{"$ref":"#/components/schemas/DeriveOwnerAuthDto"}},"required":["withdrawalId","actionSignature","auth"]},"DeriveWithdrawCancelDto":{"type":"object","properties":{"withdrawalId":{"type":"string","description":"The `withdrawalId` returned by prepare"}},"required":["withdrawalId"]},"DeriveWithdrawalsRecheckDto":{"type":"object","properties":{"auth":{"$ref":"#/components/schemas/DeriveOwnerAuthDto"}},"required":["auth"]},"DeriveSpreadLegDto":{"type":"object","properties":{"instrument":{"type":"string","example":"BTC-20261106-83000-C"},"direction":{"type":"string","enum":["buy","sell"]}},"required":["instrument","direction"]},"DeriveSpreadRequestDto":{"type":"object","properties":{"legs":{"type":"array","items":{"$ref":"#/components/schemas/DeriveSpreadLegDto"}},"amount":{"type":"string","example":"0.1"},"intent":{"type":"string","enum":["open","close"]},"maxTotalCost":{"type":"string","example":"120"}},"required":["legs","amount"]},"DeriveSpreadExecuteDto":{"type":"object","properties":{"quoteId":{"type":"string"},"maxTotalCost":{"type":"string","example":"120"}},"required":["quoteId","maxTotalCost"]},"AnalyzeDto":{"type":"object","properties":{"preset":{"type":"string","description":"Curated preset selecting risk profile + R:R target. v1 ships 3 — no user-defined presets.","enum":["DAY_MAX_GAIN","SCALP_TIGHT_RR","SWING_TREND"]},"symbol":{"type":"string","description":"Hyperliquid perp symbol (main DEX or HIP-3 USDC-collateralized). Bare (\"BTC\") or prefixed (\"xyz:GOLD\").","example":"BTC"},"primaryTf":{"type":"string","description":"Primary timeframe to analyze (chart's currently-selected TF). Confluence TF is auto-derived per `CONFLUENCE_TF_MAP`.","enum":["1m","5m","15m","1h","4h","1d"]},"allTimeframes":{"type":"boolean","description":"When true, analyze all supported primary timeframes in one request and return every tradeable setup."}},"required":["preset","symbol","primaryTf"]},"CopilotTargetCapDto":{"type":"object","properties":{"levelPrice":{"type":"number","description":"Price of the level that blocked the ATR target"},"levelStrength":{"type":"number","description":"0–100 ordering strength of that level"},"levelTouches":{"type":"number","description":"How many times that level was tested"},"uncappedTp":{"type":"number","description":"The target the ATR geometry alone would have produced, so the UI can show what was given up"}},"required":["levelPrice","levelStrength","levelTouches","uncappedTp"]},"CopilotTargetBeyondRangeDto":{"type":"object","properties":{"rangeExtreme":{"type":"number","description":"Lowest low (short) or highest high (long) of the measured bars"},"bars":{"type":"number","description":"Bars that range covers — the whole history on a young listing"},"beyondPct":{"type":"number","description":"Distance from the extreme to the target, as a % of the extreme"}},"required":["rangeExtreme","bars","beyondPct"]},"CopilotStopDto":{"type":"object","properties":{"price":{"type":"number","description":"The stop with structure applied: past the anchor, then clamped"},"anchorPrice":{"type":"number","description":"The level the stop sits past; absent when none stood on the stop side"},"anchorKind":{"type":"string","enum":["swing","extreme","atr","max"],"description":"`swing`: the last lower high (short) / higher low (long) in the pattern window; `extreme`: the window high/low; `atr`: the ATR stop stood (anchor inside it, or none on the stop side); `max`: clamped at the preset’s widest stop."},"distanceAtr":{"type":"number","description":"|entry − price| in ATR"},"atrDistanceAtr":{"type":"number","description":"The preset’s ATR stop in ATR — the floor the stop never tightens past"},"applied":{"type":"boolean","description":"Whether `sl` is this stop (flag on) or the ATR stop (flag off)"}},"required":["price","anchorKind","distanceAtr","atrDistanceAtr","applied"]},"CopilotStageDto":{"type":"object","properties":{"stage":{"type":"string","enum":["early","mid","late","exhausted"]},"extensionAtr":{"type":"number","description":"Distance past EMA21 in ATR, positive in the trade's direction"},"runBars":{"type":"number","nullable":true,"description":"Closes in a row in the trade's direction ending at the latest bar, negative when the last closes went against it; null when the bar sequence was not measured"},"progress":{"type":"number","nullable":true,"description":"Share of the window's range already travelled, 0 at the origin, 1 at the extreme; null when not measured"},"barsSinceExtreme":{"type":"number","nullable":true,"description":"Bars since the window's extreme on the trade's side; null when not measured"},"change24hPct":{"type":"number","description":"The market's 24h move, when the row carried one"},"waitFor":{"type":"number","description":"Late only: the pullback level an entry would wait for — EMA9, at least half an ATR back towards the mean and never past EMA21 (EMA21 itself when it is nearer). Absent on a late entry whose mark has not passed EMA21."},"waitBars":{"type":"number","description":"Late only: how many primary bars the wait level stands for"},"reasons":{"description":"One line per measure that decided the stage","type":"array","items":{"type":"string"}}},"required":["stage","extensionAtr","runBars","progress","barsSinceExtreme","reasons"]},"CopilotLevelDto":{"type":"object","properties":{"price":{"type":"number","description":"Level price, full precision"},"strength":{"type":"number","description":"0–100 ordering strength — NOT a probability"},"touches":{"type":"number","description":"How many times the level was tested"}},"required":["price","strength","touches"]},"CopilotLevelsDto":{"type":"object","properties":{"support":{"description":"Pivot lows below price, strongest first","type":"array","items":{"$ref":"#/components/schemas/CopilotLevelDto"}},"resistance":{"description":"Pivot highs above price, strongest first","type":"array","items":{"$ref":"#/components/schemas/CopilotLevelDto"}}},"required":["support","resistance"]},"CopilotHorizonDto":{"type":"object","properties":{"barsToTarget":{"type":"number","description":"Central estimate in primary-timeframe bars (rounded up, minimum 1)"},"barMs":{"type":"number","description":"Wall-clock length of one primary-timeframe bar, ms"},"typicalMs":{"type":"number","description":"Central estimate, ms (`barsToTarget × barMs`)"},"fastMs":{"type":"number","description":"Optimistic end of the estimate band, ms"},"slowMs":{"type":"number","description":"Pessimistic end of the estimate band, ms"}},"required":["barsToTarget","barMs","typicalMs","fastMs","slowMs"]},"CopilotNoSetupDto":{"type":"object","properties":{"lean":{"type":"string","enum":["long","short","neutral"],"description":"Directional lean of the raw score, even when below the gate"},"directionScore":{"type":"number","description":"Raw directionScore, −1..+1 (2dp)"},"directionThreshold":{"type":"number","description":"|directionScore| required to register a direction"},"conviction":{"type":"number","description":"0–100 conviction actually scored"},"minConviction":{"type":"number","description":"0–100 conviction this preset requires"},"confluence":{"type":"string","enum":["agrees","conflicts","neutral","unavailable"],"description":"Whether the confluence timeframe backed the primary one. `neutral` means the higher timeframe was read and had no direction of its own; `unavailable` means there was no higher timeframe to read (too little history at that timeframe, or the fetch failed) — `confluenceTf` is then `none`."},"funding":{"type":"string","enum":["supports","crowded","neutral","unavailable"],"description":"What funding said about crowding, read contrarian (funding is paid by the crowded side). `neutral` means funding was read and sat below the level where it carries signal; `unavailable` means the venue reported none."},"blockers":{"description":"Human-readable reasons the setup was rejected, most-binding first","type":"array","items":{"type":"string"}}},"required":["lean","directionScore","directionThreshold","conviction","minConviction","confluence","funding","blockers"]},"CopilotDirectionTermDto":{"type":"object","properties":{"key":{"type":"string","enum":["ema","macd","rsi","bollinger","adx"],"description":"Which indicator produced the term. A stable key, not a label — the client owns wording."},"contribution":{"type":"number","description":"Signed contribution BEFORE the volume multiplier. That multiplier scales the whole sum, so no share of it is attributed to any single term."},"state":{"type":"string","enum":["bullish","bearish","partial","neutral"],"description":"How the indicator read. `partial` means it had no clean signal (EMAs unaligned, no MACD crossover) and the score fell back to a graduated proxy — never render it as a crossover."},"value":{"type":"number","description":"The reading behind the term (RSI 63, ADX 34, %B 0.71), when it has one"}},"required":["key","contribution","state"]},"CopilotDirectionBreakdownDto":{"type":"object","properties":{"terms":{"type":"array","items":{"$ref":"#/components/schemas/CopilotDirectionTermDto"}},"volumeMultiplier":{"type":"number","description":"1, 1.05 (volume ratio > 1.2) or 1.15 (volume spike)"},"rawScore":{"type":"number","description":"`sum(terms) × volumeMultiplier`, before the clamp"},"directionScore":{"type":"number","description":"`rawScore` clamped to [-1, 1] — the number the gate reads"}},"required":["terms","volumeMultiplier","rawScore","directionScore"]},"CopilotConvictionMathDto":{"type":"object","properties":{"base":{"type":"number","description":"Scorer conviction ×100 — direction magnitude plus trend strength"},"confluence":{"type":"number","description":"Confluence adjustment ×100: +8 agreeing, −10 conflicting, else 0"},"funding":{"type":"number","description":"Funding adjustment ×100: 0 to ±5, ramped by how crowded the book is"},"final":{"type":"number","description":"The 0–100 integer the gate used and the bar shows — authoritative"},"floor":{"type":"number","description":"The preset's `minConviction` this had to clear"},"clamped":{"type":"boolean","description":"True when the 0–1 clamp moved the total, so the components deliberately do not add up to `final`. Render `final` as the answer, never the sum."}},"required":["base","confluence","funding","final","floor","clamped"]},"CopilotRationaleDto":{"type":"object","properties":{"direction":{"$ref":"#/components/schemas/CopilotDirectionBreakdownDto"},"directionThreshold":{"type":"number","description":"|directionScore| the setup had to clear to register a direction"},"trendStrength":{"type":"number","description":"0–100 trend strength — the other input to conviction"},"adxValue":{"type":"number","description":"ADX of the primary timeframe: the trend gate and the horizon input"},"conviction":{"$ref":"#/components/schemas/CopilotConvictionMathDto"},"confluence":{"type":"string","enum":["agrees","conflicts","neutral","unavailable"]},"confluenceTfLabel":{"type":"string","description":"Timeframe `confluence` refers to, when one was read"},"funding":{"type":"string","enum":["supports","crowded","neutral","unavailable"]},"structure":{"type":"string","enum":["capped","clear","no_levels","uncapped_blocker"],"description":"Why the target sits where it does. `clear` means structure was read and nothing was in the way; `no_levels` means the market has none on that side — do not read the second as the first. `uncapped_blocker` means a nearby level could not produce a valid buffered cap."}},"required":["direction","directionThreshold","trendStrength","adxValue","conviction","confluence","funding","structure"]},"SuggestionResponseDto":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["OK","NO_SETUP"]},"symbol":{"type":"string"},"direction":{"type":"string","enum":["long","short","none"]},"entry":{"type":"string"},"sl":{"type":"string"},"tp":{"type":"string"},"riskReward":{"type":"number","description":"TP distance / SL distance"},"conviction":{"type":"number","description":"0–100 conviction score from IndicatorScoringService"},"preset":{"type":"string","enum":["DAY_MAX_GAIN","SCALP_TIGHT_RR","SWING_TREND"]},"primaryTf":{"type":"string"},"confluenceTf":{"type":"string","description":"The higher timeframe actually scored against the primary, or `none` when no higher timeframe could be read. Never the primary's own timeframe."},"funding":{"type":"string","enum":["supports","crowded","neutral","unavailable"],"description":"How funding scored for this suggestion, read contrarian. Derived from the live snapshot, so absent on `suggestions/latest`."},"targetCap":{"description":"Present when structure pulled the target in. Its absence means nothing was in the way — `riskReward` is then the preset geometry, and when it IS present `riskReward` is lower than the preset by design.","allOf":[{"$ref":"#/components/schemas/CopilotTargetCapDto"}]},"targetBeyondRange":{"description":"Present when the target lies past every price the measured bars printed. Derived from the live snapshot, so absent on `suggestions/latest`.","allOf":[{"$ref":"#/components/schemas/CopilotTargetBeyondRangeDto"}]},"stop":{"description":"Where the thesis is wrong, on every reading with a direction. `sl` is it only when `applied`. Derived from the live snapshot, so absent on `suggestions/latest`.","allOf":[{"$ref":"#/components/schemas/CopilotStopDto"}]},"stage":{"nullable":true,"description":"Where in the move the entry sits. Present on a setup only; `null` when the reading could not be staged (no ATR or EMA21). Derived from the live snapshot, so absent on `suggestions/latest`.","type":"object","allOf":[{"$ref":"#/components/schemas/CopilotStageDto"}]},"levels":{"description":"Support/resistance on the primary timeframe, for drawing. Empty arrays are meaningful — a market in price discovery has no resistance overhead.","allOf":[{"$ref":"#/components/schemas/CopilotLevelsDto"}]},"maxLeverage":{"type":"number","description":"Leverage ceiling the resolved preset trades under — echoed so the FE sizing UI never has to mirror the preset table"},"allowedTimeframes":{"description":"Primary timeframes this preset accepts (`allowedPrimaryTfs`); anything else is rejected by `analyze` with a 400","type":"array","items":{"type":"string"}},"narrativeText":{"type":"string","description":"1–3 sentence narrative; empty string if Claude failed or NO_SETUP"},"feeChargedUsdc":{"type":"string","description":"USDC charged for this call — always \"0\" (Copilot is free); kept for client compatibility"},"createdAt":{"type":"string"},"horizon":{"description":"Estimated time to reach the target. Absent on a NO_SETUP, on a replayed row, and whenever the snapshot cannot support an estimate — render nothing rather than a placeholder.","allOf":[{"$ref":"#/components/schemas/CopilotHorizonDto"}]},"noSetup":{"description":"Present only on a NO_SETUP returned by `analyze` — never on OK, never on replayed rows","allOf":[{"$ref":"#/components/schemas/CopilotNoSetupDto"}]},"rationale":{"description":"Why an OK setup scored what it scored. Present only on an OK returned by `analyze` — never on NO_SETUP (see `noSetup`), never on replayed rows","allOf":[{"$ref":"#/components/schemas/CopilotRationaleDto"}]},"setups":{"description":"Tradeable setups from an all-timeframes Analyze request, ordered 1m through 1d. Absent on the legacy single-timeframe path; empty when no timeframe has a setup.","type":"array","items":{"$ref":"#/components/schemas/SuggestionResponseDto"}},"failedTimeframes":{"description":"Timeframes whose market data could not be loaded on an all-timeframes Analyze request; absent on the single-timeframe path","type":"array","items":{"type":"string"}}},"required":["id","status","symbol","direction","entry","sl","tp","riskReward","conviction","preset","primaryTf","confluenceTf","maxLeverage","allowedTimeframes","narrativeText","feeChargedUsdc","createdAt"]},"LinkTradeDto":{"type":"object","properties":{"tradeId":{"type":"string","description":"agent_perps_position.id of the resulting trade"}},"required":["tradeId"]},"AutopilotExecutionAccessDto":{"type":"object","properties":{"allowed":{"type":"boolean","description":"True when the execution flag is on (enabled + rollout 100) AND the requesting wallet is admitted by its allowlist (empty = nobody). The UI shows the Start/Stop controls only on true."}},"required":["allowed"]},"ScanDto":{"type":"object","properties":{"readOnly":{"type":"boolean","description":"Read current progress without starting cold candle builds."},"preset":{"type":"string","description":"Curated preset — selects the conviction floor + R:R geometry every symbol is gated on.","enum":["DAY_MAX_GAIN","SCALP_TIGHT_RR","SWING_TREND"]},"primaryTf":{"type":"string","description":"Primary timeframe every symbol is analyzed on. Must be in the preset's `allowedPrimaryTfs`.","enum":["1m","5m","15m","1h","4h","1d"]},"universeSize":{"type":"number","description":"How many of the most-traded (24h volume) symbols to cover. Defaults to the whole venue on `4h`/`1d` and to the most-traded 40-60 on the faster timeframes; max 250.","minimum":1,"maximum":250},"limit":{"type":"number","description":"How many ranked setups to return. Default 10, max 25.","minimum":1,"maximum":25},"gates":{"type":"array","description":"Which gates' rows to return. Default `['trend']` — exactly the response the scan has always given. Add `reversal` for the rows the reversal gate admitted, under their own section; ignored while `AUTOPILOT_SCAN_REVERSAL_ENABLED` is off (`reversalGate` says so).","items":{"type":"string","enum":["trend","reversal"]}},"market":{"type":"string","enum":["all","crypto","stocks","commodities","forex","indices"],"description":"Which markets to read. Default `all` — the most-traded markets on the venue. Any other value is the most-traded markets OF THAT CLASS, plus its own movers lane, so a class the all-markets cut never reaches (stocks, FX, commodities on a fast timeframe) is still covered."},"symbols":{"description":"Only return rows for these venue symbols (a theme or sector, resolved by the client). Filters the rows, not the universe. Max 250.","type":"array","items":{"type":"string"}},"setups":{"type":"array","description":"Only return rows of these kinds — `momentum`, `pullback`, `breakout` (a trend row's `pattern`), `reversal` (reversal-gate rows), `movers` (movers-lane rows). Listing `reversal` returns reversal rows whatever `gates` says; leaving it out drops them. Absent: every kind `gates` admits.","items":{"type":"string","enum":["breakout","pullback","momentum","reversal","movers"]}},"stages":{"type":"array","description":"Only return trend rows at these stages (`services/setup-stage.ts`): `early`, `mid`, `late`, `exhausted`. A reversal row has no stage and never matches; a trend row whose stage could not be measured (`stage: null`) never matches. Absent: every stage.","items":{"type":"string","enum":["early","mid","late","exhausted"]}},"direction":{"type":"string","enum":["long","short"],"description":"Only return rows on this side. Absent: both."},"strength":{"type":"string","enum":["strong","top"],"description":"Only return rows whose own score reaches the tier: `strong` ≥ 60, `top` ≥ 70. Absent: everything the gates admitted."}},"required":["preset","primaryTf"]},"ScanReversalEvidenceDto":{"type":"object","properties":{"id":{"type":"string","description":"A1–A4 structure, B1–B3 momentum, C1–C2 participation, D1–D2 exhaustion"},"group":{"type":"string","enum":["structure","momentum","participation","exhaustion"]},"label":{"type":"string","description":"Worded for the side: \"Higher low\" on a long, \"Lower high\" on a short"},"fired":{"type":"boolean"},"points":{"type":"number","description":"Points scored; 0 when not fired"}},"required":["id","group","label","fired","points"]},"ScanReversalConvictionDto":{"type":"object","properties":{"score":{"type":"number","description":"Evidence points, 0–100, before adjustments"},"htf":{"type":"number","description":"Higher-timeframe adjustment: −8 leaning against, +5 agreeing, else 0"},"funding":{"type":"number","description":"Funding adjustment, 0 to ±5"},"final":{"type":"number","description":"The 0–100 integer the floor was compared against"},"floor":{"type":"number"}},"required":["score","htf","funding","final","floor"]},"ScanReversalPrerequisitesDto":{"type":"object","properties":{"window":{"type":"number","description":"Bars the prior trend was measured over"},"priorMoveAtr":{"type":"number","description":"Window high to window low, in ATR"},"trendEmaShare":{"type":"number","description":"Share of closes on the trend side of the trend EMA, 0–1"},"swingsWith":{"type":"number","description":"Lower lows (higher highs) before the turn"},"swingsAgainst":{"type":"number","description":"Lower highs (higher lows) before the turn"},"distanceFromExtremeAtr":{"type":"number","description":"Mark's distance from the extreme the turn is measured from, in ATR"},"retrace":{"type":"number","description":"Share of the window move the mark has retraced, 0–1"},"barsSinceExtreme":{"type":"number"},"change24hPct":{"type":"number","description":"24h change the venue reported, percent"}},"required":["window","priorMoveAtr","trendEmaShare","swingsWith","swingsAgainst","distanceFromExtremeAtr","retrace","barsSinceExtreme"]},"ScanReversalStopDto":{"type":"object","properties":{"anchorPrice":{"type":"number","description":"The defended level the stop sits beyond"},"anchorKind":{"type":"string","enum":["break","swing","climax","extreme"],"description":"`break`: the lower high the confirmation closed through; `swing`: the higher low; `climax`: the capitulation extreme; `extreme`: the window low/high"},"distanceAtr":{"type":"number","description":"|entry − sl| in ATR"}},"required":["anchorPrice","anchorKind","distanceAtr"]},"ScanReversalRationaleDto":{"type":"object","properties":{"side":{"type":"string","enum":["long","short"]},"stage":{"type":"string","enum":["forming","confirmed"]},"evidence":{"type":"array","items":{"$ref":"#/components/schemas/ScanReversalEvidenceDto"}},"score":{"type":"number","description":"Evidence points before adjustments"},"conviction":{"$ref":"#/components/schemas/ScanReversalConvictionDto"},"prerequisites":{"$ref":"#/components/schemas/ScanReversalPrerequisitesDto"},"htf":{"type":"string","enum":["waterfall","against","neutral","agrees","unavailable"],"description":"What the higher timeframe said, read for a turn: `waterfall` vetoes and never reaches a setup"},"htfTfLabel":{"type":"string"},"funding":{"type":"string","enum":["supports","crowded","neutral","unavailable"]},"stop":{"$ref":"#/components/schemas/ScanReversalStopDto"},"structure":{"type":"string","enum":["capped","clear","no_levels","uncapped_blocker"]}},"required":["side","stage","evidence","score","conviction","prerequisites","htf","funding","stop","structure"]},"ScanReversalDto":{"type":"object","properties":{"stage":{"type":"string","enum":["forming","confirmed"],"description":"`forming`: a higher low or a divergence has printed, the last lower high still stands — a watch row. `confirmed`: price has closed through the last lower high of the trend — the only stage Autopilot execution may take."},"rationale":{"$ref":"#/components/schemas/ScanReversalRationaleDto"}},"required":["stage","rationale"]},"ScanSetupDto":{"type":"object","properties":{"symbol":{"type":"string"},"direction":{"type":"string","enum":["long","short"]},"entry":{"type":"string"},"sl":{"type":"string"},"tp":{"type":"string"},"riskReward":{"type":"number","description":"TP distance / SL distance of the FINAL levels"},"conviction":{"type":"number","description":"0–100, after confluence + funding adjustments"},"confluenceTf":{"type":"string","description":"The higher timeframe actually scored, or `none` when none could be read."},"funding":{"type":"string","enum":["supports","crowded","neutral","unavailable"]},"targetCap":{"$ref":"#/components/schemas/CopilotTargetCapDto"},"stop":{"description":"The structural stop (Plan 060 §4) on a trend row; `sl` is it only when `applied`, which follows `COPILOT_STRUCTURAL_STOP_ENABLED` at the time the row was read. Absent on a row stored before the stop existed and on a reversal row (whose `reversal.rationale.stop` is its own). A row whose `applied` no longer matches the flag is re-read from its cached snapshot on the next advance.","allOf":[{"$ref":"#/components/schemas/CopilotStopDto"}]},"targetBeyondRange":{"$ref":"#/components/schemas/CopilotTargetBeyondRangeDto"},"horizon":{"$ref":"#/components/schemas/CopilotHorizonDto"},"levels":{"$ref":"#/components/schemas/CopilotLevelsDto"},"rationale":{"description":"Why this setup scored what it scored — the itemised direction score and the conviction arithmetic behind `conviction`.","allOf":[{"$ref":"#/components/schemas/CopilotRationaleDto"}]},"volume24h":{"type":"string","description":"24h notional volume on the venue, USD string"},"change24hPct":{"type":"number","description":"24h price change, percent"},"lane":{"type":"string","enum":["volume","movers"],"description":"How the symbol entered the scan: `volume` for the most-traded universe, `movers` for a market taken in on the size of its 24h move. A `movers` setup may stand on the relaxed movers conviction floor — `rationale.conviction.floor` says which."},"pattern":{"type":"string","enum":["breakout","pullback","momentum"],"description":"What a trend row looks like (`services/setup-pattern.ts`): `breakout` — pressing a fresh extreme with participation; `pullback` — back at value inside an intact trend; `momentum` — a trend under way. A label, never a gate. Absent on reversal rows and on a reading stored before the label existed."},"stage":{"nullable":true,"description":"Where in the move the entry sits (`services/setup-stage.ts`): `early`, `mid`, `late` (with the pullback level to wait for) or `exhausted`, with the measures and reasons behind it. `null` when the reading could not be staged (no ATR or EMA21). Absent only on a row stored before the label existed, which the next advance re-labels from its cached snapshot. A label, never a gate: execution honours it only behind `AUTOPILOT_STAGE_VETO_ENABLED` (Plan 060).","type":"object","allOf":[{"$ref":"#/components/schemas/CopilotStageDto"}]},"readAt":{"type":"string","description":"ISO timestamp of when THIS setup was read. Setups in one result are read at different times, so each card carries its own age."},"gate":{"type":"string","enum":["trend","reversal"],"description":"Which decision admitted the row. Absent means `trend`. A `reversal` row carries `reversal` (its stage and rationale) instead of `rationale`, and its `conviction` is the reversal score — never compare it with a trend row's."},"reversal":{"$ref":"#/components/schemas/ScanReversalDto"},"rs":{"type":"object","description":"Where this market ranks inside its asset class (Plan 053, `services/book/`): percentile, leader/laggard/middle, and the basis — `consensus` or `reported` fundamentals, or `price` momentum. Present only while the long/short book flag is on and the class has been read; absent means not measured."},"htf":{"type":"object","description":"The daily/weekly chart bias (`services/book/higher-timeframe-bias.ts`): which side the higher timeframes allow, and how strongly. Same presence rule as `rs`."},"catalyst":{"type":"object","description":"The next dated catalyst for this market (Plan 055, `services/book/catalyst.ts`): kind, ISO date, days until, where it falls against the 20–60 day window (`before` = the news lands before a trade entered today could mature; `inside`; `after`), and whether the date is scheduled or estimated from the filer’s cadence. Surfaced, never scored. Absent when no source covers the market or nothing is ahead."}},"required":["symbol","direction","entry","sl","tp","riskReward","conviction","confluenceTf","funding","volume24h","lane"]},"ScanResponseDto":{"type":"object","properties":{"preset":{"type":"string","enum":["DAY_MAX_GAIN","SCALP_TIGHT_RR","SWING_TREND"]},"primaryTf":{"type":"string"},"scannedAt":{"type":"string","description":"ISO timestamp of the most recent reading in this result. A scan accumulates: symbols read on earlier presses (or by the background warmer) are carried, so this is when the result was last ADVANCED, not when every symbol in it was read."},"oldestReadAt":{"type":"string","description":"ISO timestamp of the OLDEST reading in this result — the freshness this ranking is really bounded by. Absent when nothing has been read yet."},"universeSize":{"type":"number","description":"How many symbols this scan covers — the denominator of `scanned`"},"moversCount":{"type":"number","description":"How many of them are in the movers lane — markets taken in on their 24h move rather than their volume rank. Counted inside `universeSize`."},"scanned":{"type":"number","description":"How many of them have a current reading"},"truncated":{"type":"boolean","description":"True while symbols in the universe are still unread. The reading continues in the background between presses, so this is a progress flag, not a failure."},"noSetupCount":{"type":"number","description":"Symbols read that produced no setup"},"failedCount":{"type":"number","description":"Symbols without an analysis, including those waiting for history"},"insufficientHistoryCount":{"type":"number","description":"Subset of failedCount waiting for enough required candles; retried at a later bar boundary"},"cached":{"type":"boolean","description":"True when this press read no new market data — every symbol in the result was already known. Not an error: it is the steady state once the universe is covered."},"warming":{"type":"boolean","description":"True when the background warmer is alive, including a temporary budget pause."},"warmerState":{"type":"string","enum":["running","paused_budget","unavailable"]},"refreshAfterSeconds":{"type":"number","description":"Seconds after which a reading is re-read in the background. Present only while the HL candle ledger is serving, which is what makes a re-read free of venue weight; absent means readings live for half the primary bar."},"maxLeverage":{"type":"number","description":"Leverage ceiling the preset trades under"},"allowedTimeframes":{"type":"array","items":{"type":"string"}},"reversalCount":{"type":"number","description":"How many reversal-gate rows the scan holds for this preset + timeframe (at most `SCAN_REVERSAL_LANE_LIMIT`), whether or not `gates` asked for them. Counted OUTSIDE the `scanned` arithmetic (`scanned = trend setups + noSetupCount + failedCount`): a market with a trend row can have a reversal row too."},"reversalGate":{"type":"string","enum":["on","off"],"description":"Whether the reversal gate ran (`AUTOPILOT_SCAN_REVERSAL_ENABLED`). `off` means no reversal rows exist, whatever `gates` asked for."},"market":{"type":"string","enum":["all","crypto","stocks","commodities","forex","indices"],"description":"The market this result read (`ScanDto.market`); `universeSize`, `scanned` and the counts are of that market."},"matchedCount":{"type":"number","description":"Present when a row filter was set (`symbols`, `setups`, `stages`, `direction`, `strength`): the rows matching it before `limit` cut the ranking — every matching trend row, plus the matching reversal rows (at most `SCAN_REVERSAL_LANE_LIMIT`). The coverage counts are never filtered."},"setups":{"description":"Volume-lane setups ranked by conviction (highest first, at most `limit`), followed by every movers-lane setup ranked by the size of its 24h move, followed — when `gates` includes `reversal` and the gate is on — by reversal rows, `confirmed` first then by conviction, at most `SCAN_REVERSAL_LANE_LIMIT`. `lane` and `gate` on each row say which.","type":"array","items":{"$ref":"#/components/schemas/ScanSetupDto"}}},"required":["preset","primaryTf","scannedAt","universeSize","moversCount","scanned","truncated","noSetupCount","failedCount","cached","warming","maxLeverage","allowedTimeframes","setups"]},"MacroRegimeDto":{"type":"object","properties":{"regime":{"type":"string","enum":["risk_on","risk_off","mixed","unmeasured"]},"score":{"type":"number","description":"Σ votes over measured inputs"},"measured":{"type":"number"},"total":{"type":"number"},"inputs":{"description":"One row per input: value, quarterly change, z against its own history, vote, observation date","type":"array","items":{"type":"string"}},"reason":{"type":"string","enum":["disabled","too_few_inputs","unavailable"],"description":"Why unmeasured, when it is"},"asOf":{"type":"string","description":"ISO timestamp the snapshot was measured at; absent while nothing is read yet"}},"required":["regime","score","measured","total","inputs"]},"TiltDto":{"type":"object","properties":{"regime":{"type":"string","enum":["risk_on","risk_off","mixed","unmeasured"],"description":"The regime the side caps were built with"},"from":{"type":"string","enum":["macro","breadth","conflict"],"description":"`macro`: the macro regime decided; `breadth`: macro unmeasured, the class’s own breadth decided (the Plan 053 proxy); `conflict`: macro and breadth point opposite ways, the book stays even"}},"required":["regime","from"]},"ClassBookDto":{"type":"object","properties":{"market":{"type":"string","enum":["all","crypto","stocks","commodities","forex","indices"]},"regime":{"type":"string","enum":["risk_on","risk_off","mixed","unmeasured"]},"breadth":{"type":"object","description":"Breadth over the measured members (`class-breadth.ts`)"},"tilt":{"description":"The tilt the book was built with and where it came from (Plan 056)","allOf":[{"$ref":"#/components/schemas/TiltDto"}]},"book":{"type":"object","description":"The book (`book-builder.ts`): legs, pairs, waiting, watch, exposure"},"coverage":{"type":"object","description":"Members with a daily reading over members in the class"},"bases":{"type":"object","description":"How many measured members stand on each basis"},"catalysts":{"type":"object","description":"Catalyst calendar coverage (Plan 055): members a source covers, members with a dated catalyst ahead, and those whose date falls inside the 20–60 day window"},"asOf":{"type":"string","description":"ISO timestamp of the newest reading, absent while nothing is read yet"},"warming":{"type":"boolean","description":"True while members are still unread and a refresh is running or pending"}},"required":["market","regime","breadth","tilt","book","coverage","bases","catalysts","warming"]},"BookResponseDto":{"type":"object","properties":{"requested":{"type":"string","enum":["all","crypto","stocks","commodities","forex","indices"]},"generatedAt":{"type":"string"},"timing":{"type":"object","description":"The preset and timeframe the timing layer is read on"},"macro":{"description":"The venue-wide macro regime the tilts were decided from (Plan 056)","allOf":[{"$ref":"#/components/schemas/MacroRegimeDto"}]},"classes":{"type":"array","items":{"$ref":"#/components/schemas/ClassBookDto"}},"leadership":{"description":"Each class’s median momentum against the venue median, leaders first","type":"array","items":{"type":"string"}}},"required":["requested","generatedAt","timing","macro","classes","leadership"]},"ScorecardResponseDto":{"type":"object","properties":{"agentId":{"type":"string"},"generatedAt":{"type":"string"},"sample":{"type":"number","description":"Closed trades inside the window"},"windowDays":{"type":"number"},"statistics":{"type":"object","description":"Average days in trade (20–25), trades per year (~150), win rate (≥ 60%, aim 65%), winner/loser dollar ratio (≥ 1.5, aim 2); each with its band and diagnosis (`on_target`, `overtrading`, `investing`, `idea_quality`, `cut_losers_sooner`, `insufficient_sample` under 30 trades, `unmeasured`)."},"timeStops":{"type":"object","description":"Open positions at or past 60 days, oldest first — the time stop"}},"required":["agentId","generatedAt","sample","windowDays","statistics","timeStops"]},"CatalystRowDto":{"type":"object","properties":{"id":{"type":"string"},"symbol":{"type":"string"},"kind":{"type":"string","enum":["earnings","unlock","macro","owner"]},"at":{"type":"string","description":"ISO date-time of the event’s day (UTC midnight)"},"note":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","symbol","kind","at","createdAt"]},"CatalystListResponseDto":{"type":"object","properties":{"catalysts":{"description":"The owner’s catalysts, soonest first","type":"array","items":{"$ref":"#/components/schemas/CatalystRowDto"}},"remaining":{"type":"number","description":"Rows the owner may still add before the cap"}},"required":["catalysts","remaining"]},"CreateCatalystDto":{"type":"object","properties":{"symbol":{"type":"string","description":"Venue symbol (`xyz:TSLA`, `BTC`), or `*` for every market (a macro release)","example":"xyz:TSLA"},"kind":{"type":"string","enum":["earnings","unlock","macro","owner"]},"at":{"type":"string","description":"The event’s day as `YYYY-MM-DD` (UTC)","example":"2026-11-12"},"note":{"type":"string","description":"What the event is, in the owner’s words","maxLength":280}},"required":["symbol","kind","at"]},"StartBookBacktestDto":{"type":"object","properties":{"market":{"type":"string","enum":["all","crypto","stocks","commodities","forex","indices"],"default":"all","description":"One asset class, or `all` for every class"},"years":{"type":"number","enum":[1,2],"default":1,"description":"Years of daily history to replay"},"riskPerLegUsd":{"type":"number","description":"Dollars at risk per leg between entry and stop"},"maxLegsPerSide":{"type":"number"},"maxLegsPerTheme":{"type":"number"},"grossCapUsd":{"type":"number","description":"Gross notional ceiling, USD. Absent = none."}}},"StartBookBacktestResponseDto":{"type":"object","properties":{"runId":{"type":"string"},"status":{"type":"string","enum":["running"]}},"required":["runId","status"]},"BookBacktestRunDto":{"type":"object","properties":{"runId":{"type":"string"},"status":{"type":"string","enum":["running","done","failed"]},"market":{"type":"string","enum":["all","crypto","stocks","commodities","forex","indices"]},"years":{"type":"number","enum":[1,2]},"caps":{"type":"object","description":"The caps the book was built with"},"startedAt":{"type":"string"},"finishedAt":{"type":"string"},"reason":{"type":"string","description":"Why a failed run failed, in safe words"},"skipped":{"description":"Markets whose candles could not be loaded in the budget and were left out","type":"array","items":{"type":"string"}},"result":{"type":"object","description":"The replay (`book-replay.ts`), present when done"}},"required":["runId","status","market","years","caps","startedAt"]},"ScanRecheckDto":{"type":"object","properties":{"preset":{"type":"string","enum":["DAY_MAX_GAIN","SCALP_TIGHT_RR","SWING_TREND"]},"primaryTf":{"type":"string","enum":["1m","5m","15m","1h","4h","1d"]},"symbol":{"type":"string","description":"Venue symbol as the scan returned it, e.g. `BTC` or `xyz:TSLA`."},"gate":{"type":"string","enum":["trend","reversal"],"description":"Which gate's row is being re-checked. Default `trend`."},"market":{"type":"string","enum":["all","crypto","stocks","commodities","forex","indices"],"description":"The market the row was scanned under, so a symbol outside the all-markets universe is still found. Default `all`."}},"required":["preset","primaryTf","symbol"]},"ScanRecheckResponseDto":{"type":"object","properties":{"symbol":{"type":"string"},"status":{"type":"string","enum":["setup","no_setup","failed"],"description":"`setup` — still clears the gate, `setup` holds the fresh levels; `no_setup` — it no longer does; `failed` — the market could not be read."},"readAt":{"type":"string","description":"ISO timestamp of this reading"},"setup":{"$ref":"#/components/schemas/ScanSetupDto"}},"required":["symbol","status","readAt"]},"StartAutopilotDto":{"type":"object","properties":{"preset":{"type":"string","description":"Built-in preset the scan ledger is read under.","enum":["DAY_MAX_GAIN","SCALP_TIGHT_RR","SWING_TREND"]},"primaryTf":{"type":"string","description":"Primary timeframe. Must be in the preset's `allowedPrimaryTfs`; one entry decision per closed bar.","enum":["1m","5m","15m","1h","4h","1d"]},"maxPositionUsd":{"type":"number","description":"Notional ceiling (USD) of ONE position. Size = maxPositionUsd / entry.","minimum":1,"maximum":1000000,"example":100},"maxOpenPositions":{"type":"number","description":"How many positions may be open on the account at once.","minimum":1,"maximum":20,"example":3},"minConviction":{"type":"number","description":"0–100 conviction floor a scan setup must clear. Applied on top of the preset's own floor, so a value below it changes nothing.","minimum":0,"maximum":100,"example":60},"leverage":{"type":"number","description":"Leverage every entry is placed at (default 1; capped by the market max).","minimum":1,"maximum":50,"default":1},"ddThresholdPct":{"type":"number","description":"Per-session drawdown kill switch, percent below peak equity (negative). Trips → every position is flattened and the session stops. Default -15.","minimum":-50,"maximum":-1,"default":-15},"direction":{"type":"string","description":"Trade direction the session may take: only long setups, only short setups, or both. Default 'both'.","enum":["long","short","both"],"default":"both"},"entryGates":{"type":"string","description":"Which Scanner gates the session may enter from: the trend ranking, confirmed reversal rows, or both. Default 'trend'. Reversal rows exist only while the reversal gate's flag is on.","enum":["trend","reversal","both","book"],"default":"trend"},"riskPerLegUsd":{"type":"number","description":"Dollars at risk per leg between entry and stop. Required by the `book` gate, which sizes each leg on equal risk (notional = risk ÷ stop distance), capped by `maxPositionUsd`; ignored by the other gates.","minimum":1}},"required":["preset","primaryTf","maxPositionUsd","maxOpenPositions","minConviction"]},"AutopilotSessionDto":{"type":"object","properties":{"id":{"type":"string"},"agentId":{"type":"string"},"ownerAddress":{"type":"string"},"presetId":{"type":"string","nullable":true},"builtInPresetKey":{"type":"string","nullable":true,"description":"One of v1 built-in keys: DAY_MAX_GAIN | SCALP_TIGHT_RR | SWING_TREND."},"active":{"type":"boolean"},"startedAt":{"type":"string"},"stoppedAt":{"type":"string","nullable":true},"stopReason":{"type":"string","enum":["owner_stop","kill_switch","pause_reason_external","manual_position_open"],"nullable":true},"peakEquity":{"type":"string"},"currentDrawdownPct":{"type":"string"},"ddThresholdPct":{"type":"string"},"riskPerTradeUsd":{"type":"string"},"maxAccountRiskUsd":{"type":"string"},"primaryTf":{"type":"string"},"maxPositionUsd":{"type":"string","description":"Notional ceiling (USD) of one position."},"maxOpenPositions":{"type":"number","description":"Concurrent open-position ceiling."},"minConviction":{"type":"number","description":"0–100 conviction floor a setup must clear."},"leverage":{"type":"number","description":"Leverage every entry is placed at."},"direction":{"type":"string","enum":["long","short","both"],"description":"Trade direction the session may take."},"entryGates":{"type":"string","enum":["trend","reversal","both"],"description":"Which Scanner gates the session may enter from. `reversal` and `both` take confirmed-stage reversal rows; `trend` is the ranking alone; `book` takes the long/short book’s legs only (Plan 053), sized on `riskPerTradeUsd` and closed by the 60-day time stop."},"lastTickAt":{"type":"string","nullable":true},"lastSuggestionId":{"type":"string","nullable":true},"quotaUsedToday":{"type":"number","description":"UTC-day count of paid suggestions for the agent."}},"required":["id","agentId","ownerAddress","presetId","builtInPresetKey","active","startedAt","stoppedAt","stopReason","peakEquity","currentDrawdownPct","ddThresholdPct","riskPerTradeUsd","maxAccountRiskUsd","primaryTf","maxPositionUsd","maxOpenPositions","minConviction","leverage","direction","entryGates","lastTickAt","lastSuggestionId","quotaUsedToday"]},"HistoryStatsDto":{"type":"object","properties":{"winRate":{"type":"number","description":"Wins / (wins + losses), 0–1."},"avgR":{"type":"number","description":"Average R outcome across closed trades."},"expectancy":{"type":"number","description":"winRate × avgR (R-units)."},"realizedPnlUsd":{"type":"number","description":"Sum of realized PnL in USD across the window."},"streak":{"type":"number","description":"Current win/loss streak (positive=wins, negative=losses)."}},"required":["winRate","avgR","expectancy","realizedPnlUsd","streak"]},"SuggestionHistoryRowDto":{"type":"object","properties":{"id":{"type":"string"},"symbol":{"type":"string"},"direction":{"type":"string","enum":["long","short","none"]},"entry":{"type":"string"},"sl":{"type":"string"},"tp":{"type":"string"},"rOutcome":{"type":"number","nullable":true,"description":"Realized PnL in R-units (entry-→-exit / |entry−sl|)."},"realizedPnlUsd":{"type":"number","nullable":true,"description":"Realized PnL in USD."},"conviction":{"type":"number"},"preset":{"type":"string","enum":["DAY_MAX_GAIN","SCALP_TIGHT_RR","SWING_TREND"]},"primaryTf":{"type":"string"},"narrativeText":{"type":"string"},"createdAt":{"type":"string"},"status":{"type":"string","enum":["executed","skipped (no setup)","skipped (cap)","skipped (sub-floor flip)","reversed"]}},"required":["id","symbol","direction","entry","sl","tp","rOutcome","realizedPnlUsd","conviction","preset","primaryTf","narrativeText","createdAt","status"]},"HistoryResponseDto":{"type":"object","properties":{"stats":{"$ref":"#/components/schemas/HistoryStatsDto"},"rows":{"type":"array","items":{"$ref":"#/components/schemas/SuggestionHistoryRowDto"}}},"required":["stats","rows"]},"BookLeanResponseDto":{"type":"object","properties":{"currency":{"type":"string","description":"The options underlying asked about (BTC or ETH)"},"symbol":{"type":"string","description":"The venue market the book reads for it; null when none is listed","nullable":true},"status":{"type":"string","enum":["long","short","waiting","watch","out","not_listed"]},"leg":{"type":"object","description":"The leg, with its option proposal, when the status is long or short"},"row":{"type":"object","description":"The waiting or watch row, with its reason"},"regime":{"type":"string","enum":["risk_on","risk_off","mixed","unmeasured"]},"tilt":{"description":"The tilt the crypto class was built with","allOf":[{"$ref":"#/components/schemas/TiltDto"}]},"coverage":{"type":"object","description":"Members with a daily reading over members in the class"},"asOf":{"type":"string"},"warming":{"type":"boolean"},"riskPerLegUsd":{"type":"number","description":"The risk per leg the leg and its proposal were sized at: the book default"},"generatedAt":{"type":"string"}},"required":["currency","symbol","status","regime","tilt","coverage","warming","riskPerLegUsd","generatedAt"]},"RedeemCopilotAccessCodeDto":{"type":"object","properties":{}},"GeneratePerpsStrategyDto":{"type":"object","properties":{"assets":{"description":"Perps asset symbols the agent will trade (HL symbols, incl. HIP-3 like \"xyz:TSLA\")","example":["BTC","ETH"],"type":"array","items":{"type":"string"}},"direction":{"type":"string","description":"Allowed trade direction","enum":["long","short","both"]},"leverage":{"type":"number","description":"Max leverage the agent may use","minimum":1,"maximum":100},"positionSizePct":{"type":"number","description":"Position size as % of balance","minimum":1,"maximum":100},"executionTimeframe":{"type":"string","description":"Execution timeframe","enum":["1m","5m","15m","30m","1h","4h","1d","1w"]}},"required":["assets","direction"]},"InvestorLoginDto":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"}},"required":["email","password"]},"ChangeInvestorPasswordDto":{"type":"object","properties":{"currentPassword":{"type":"string"},"newPassword":{"type":"string"}},"required":["currentPassword","newPassword"]},"CancelOtcPurchaseDto":{"type":"object","properties":{"reason":{"type":"string"}}},"CreateOtcPurchaseDto":{"type":"object","properties":{"offerId":{"type":"string"},"tokenAmount":{"type":"string","description":"Whole token amount, decimal string"},"receivingWalletAddress":{"type":"string"},"investorNote":{"type":"string"},"expectedPricePerTokenUsd":{"type":"string"}},"required":["offerId","tokenAmount"]},"LeaderboardPreferenceDto":{"type":"object","properties":{"hidden":{"type":"boolean","description":"Hide this wallet from the leaderboard entirely."},"showDollarPnl":{"type":"boolean","description":"Show this wallet’s dollar PnL publicly."}}}}}}