{"openapi":"3.1.0","info":{"title":"lp.xyz Partner API","version":"1.0.0","description":"Versioned market data, portfolio, quote, and unsigned transaction-building API."},"servers":[{"url":"https://api.lp.xyz"}],"paths":{"/v1/openapi.json":{"get":{"operationId":"openapi","summary":"OpenAPI document","description":"OpenAPI document","tags":["openapi"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":null,"x-lpx-upstream-class":"none"}},"/v1/chains":{"get":{"operationId":"chains_list","summary":"List supported chains","description":"List supported chains","tags":["chains"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/ChainsListResponse"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":null,"x-lpx-upstream-class":"none"}},"/v1/tokens/search":{"get":{"operationId":"market_token_search","summary":"Search tokens","description":"Search tokens","tags":["market"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/TokenSearchResponse"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"market:read","x-lpx-upstream-class":"provider","security":[{"ApiKey":[]}],"parameters":[{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc","all"]},"description":"Search defaults to solana. Trending/hot/new default to all enabled chains. Explicit all searches enabled chains."},{"name":"q","in":"query","required":true,"schema":{"type":"string"},"description":"Token name, symbol or address (minimum 2 characters)."}]}},"/v1/tokens/{mint}":{"get":{"operationId":"market_token_profile","summary":"Token profile","description":"Token profile","tags":["market"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/TokenResolution"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"market:read","x-lpx-upstream-class":"enriched","security":[{"ApiKey":[]}],"parameters":[{"name":"mint","in":"path","required":true,"schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"description":"Defaults to solana. Batch portfolio uses chain-qualified owner refs."}]}},"/v1/tokens/{mint}/price":{"get":{"operationId":"market_token_price","summary":"Token price","description":"Token price","tags":["market"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/TokenPrice"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"market:read","x-lpx-upstream-class":"cached","security":[{"ApiKey":[]}],"parameters":[{"name":"mint","in":"path","required":true,"schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"description":"Defaults to solana. Batch portfolio uses chain-qualified owner refs."}]}},"/v1/tokens/{mint}/history":{"get":{"operationId":"market_token_history","summary":"Token price history","description":"Token price history","tags":["market"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/PriceHistoryResponse"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"market:read","x-lpx-upstream-class":"provider","security":[{"ApiKey":[]}],"parameters":[{"name":"mint","in":"path","required":true,"schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"description":"Defaults to solana. Batch portfolio uses chain-qualified owner refs."},{"name":"pool","in":"query","required":false,"schema":{"type":"string"},"description":"Exact pool address or singleton pool ID from discovery."},{"name":"window","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":300,"default":90,"description":"Recent price window in seconds."}}]}},"/v1/tokens/{mint}/stats":{"get":{"operationId":"market_token_stats","summary":"Token market statistics","description":"Token market statistics","tags":["market"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/TokenStatsResponse"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"market:read","x-lpx-upstream-class":"provider","security":[{"ApiKey":[]}],"parameters":[{"name":"mint","in":"path","required":true,"schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"description":"Defaults to solana. Batch portfolio uses chain-qualified owner refs."}]}},"/v1/tokens/{mint}/holders":{"get":{"operationId":"market_token_holders","summary":"Token holders","description":"Token holders","tags":["market"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/TopHoldersResponse"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"market:read","x-lpx-upstream-class":"provider","security":[{"ApiKey":[]}],"parameters":[{"name":"mint","in":"path","required":true,"schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"description":"Defaults to solana. Batch portfolio uses chain-qualified owner refs."}]}},"/v1/tokens/{mint}/trades":{"get":{"operationId":"market_token_trades","summary":"Token trades","description":"Token trades","tags":["market"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/TradesResponse"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"market:read","x-lpx-upstream-class":"provider","security":[{"ApiKey":[]}],"parameters":[{"name":"mint","in":"path","required":true,"schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"description":"Defaults to solana. Batch portfolio uses chain-qualified owner refs."},{"name":"pool","in":"query","required":false,"schema":{"type":"string"},"description":"Exact pool address or singleton pool ID from discovery."}]}},"/v1/tokens/{mint}/top-traders":{"get":{"operationId":"market_token_top_traders","summary":"Token top traders","description":"Token top traders","tags":["market"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/TopTradersResponse"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"market:read","x-lpx-upstream-class":"provider","security":[{"ApiKey":[]}],"parameters":[{"name":"mint","in":"path","required":true,"schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"description":"Defaults to solana. Batch portfolio uses chain-qualified owner refs."}]}},"/v1/markets/trending":{"get":{"operationId":"market_trending","summary":"Trending tokens","description":"Trending tokens","tags":["market"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/TrendingResponse"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"market:read","x-lpx-upstream-class":"cached","security":[{"ApiKey":[]}],"parameters":[{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc","all"]},"description":"Search defaults to solana. Trending/hot/new default to all enabled chains. Explicit all searches enabled chains."},{"name":"amm","in":"query","required":false,"schema":{"type":"string","enum":["Orca","Meteora","Raydium","PumpSwap","Uniswap","PancakeSwap"]}}]}},"/v1/pools/hot":{"get":{"operationId":"market_pools_hot","summary":"Hot pools","description":"Hot pools","tags":["market"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/HotPoolsResult"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"market:read","x-lpx-upstream-class":"cached","security":[{"ApiKey":[]}],"parameters":[{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc","all"]},"description":"Search defaults to solana. Trending/hot/new default to all enabled chains. Explicit all searches enabled chains."}]}},"/v1/pools/new":{"get":{"operationId":"market_pools_new","summary":"New pools","description":"New pools","tags":["market"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/HotPoolsResult"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"market:read","x-lpx-upstream-class":"cached","security":[{"ApiKey":[]}],"parameters":[{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc","all"]},"description":"Search defaults to solana. Trending/hot/new default to all enabled chains. Explicit all searches enabled chains."}]}},"/v1/pools/{pool}":{"get":{"operationId":"market_pool_details","summary":"Pool details","description":"Pool details","tags":["market"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/PoolDetailsResponse"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"market:read","x-lpx-upstream-class":"enriched","security":[{"ApiKey":[]}],"parameters":[{"name":"pool","in":"path","required":true,"schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"description":"Defaults to solana. Batch portfolio uses chain-qualified owner refs."}]}},"/v1/pools/{pool}/reserves":{"get":{"operationId":"market_pool_reserves","summary":"Pool reserves","description":"Pool reserves","tags":["market"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/PoolReserves"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"market:read","x-lpx-upstream-class":"provider","security":[{"ApiKey":[]}],"parameters":[{"name":"pool","in":"path","required":true,"schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"description":"Defaults to solana. Batch portfolio uses chain-qualified owner refs."},{"name":"amm","in":"query","required":true,"schema":{"type":"string","enum":["Orca","Meteora","Raydium","PumpSwap","Uniswap","PancakeSwap"]}},{"name":"kind","in":"query","required":false,"schema":{"type":"string"}},{"name":"base","in":"query","required":true,"schema":{"type":"string"}},{"name":"quote","in":"query","required":true,"schema":{"type":"string"}}]}},"/v1/pools/{pool}/bins":{"get":{"operationId":"market_pool_bins","summary":"Pool bins","description":"Pool bins","tags":["market"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/PoolBinsResult"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"market:read","x-lpx-upstream-class":"provider","security":[{"ApiKey":[]}],"parameters":[{"name":"pool","in":"path","required":true,"schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"description":"Defaults to solana. Batch portfolio uses chain-qualified owner refs."},{"name":"amm","in":"query","required":true,"schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string"}},{"name":"quote","in":"query","required":false,"schema":{"type":"string"}}]}},"/v1/pools/{pool}/chart":{"get":{"operationId":"market_pool_chart","summary":"Pool chart","description":"Pool chart","tags":["market"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/PoolChartResponse"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"market:read","x-lpx-upstream-class":"provider","security":[{"ApiKey":[]}],"parameters":[{"name":"pool","in":"path","required":true,"schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"description":"Defaults to solana. Batch portfolio uses chain-qualified owner refs."},{"name":"resolution","in":"query","required":false,"schema":{"type":"string"},"description":"Candle interval; defaults to 15 (minutes)."},{"name":"before","in":"query","required":false,"schema":{"type":"integer"},"description":"Unix seconds."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"mint","in":"query","required":false,"schema":{"type":"string"}}]}},"/v1/pools/{pool}/audit":{"get":{"operationId":"market_pool_audit","summary":"Pool audit","description":"Pool audit","tags":["market"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/PoolAuditResponse"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"market:read","x-lpx-upstream-class":"enriched","security":[{"ApiKey":[]}],"parameters":[{"name":"pool","in":"path","required":true,"schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"description":"Defaults to solana. Batch portfolio uses chain-qualified owner refs."},{"name":"token","in":"query","required":false,"schema":{"type":"string"},"description":"Token address hint for singleton pools."}]}},"/v1/portfolio/{owner}/holdings":{"get":{"operationId":"portfolio_holdings","summary":"Wallet holdings","description":"Wallet holdings","tags":["portfolio"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/HoldingsResult"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"portfolio:read","x-lpx-upstream-class":"enriched","security":[{"ApiKey":[]}],"parameters":[{"name":"owner","in":"path","required":true,"schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"description":"Defaults to solana. Batch portfolio uses chain-qualified owner refs."}]}},"/v1/portfolio/holdings":{"get":{"operationId":"portfolio_holdings_batch","summary":"Batch wallet holdings","description":"Batch wallet holdings","tags":["portfolio"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/HoldingsBatchResponse"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"portfolio:read","x-lpx-upstream-class":"enriched","security":[{"ApiKey":[]}],"parameters":[{"name":"owners","in":"query","required":true,"schema":{"type":"string"},"description":"Comma-separated owner refs; Solana base58 or chain:0xaddress. Maximum 24 distinct refs. Cost is 10 per distinct owner."}]}},"/v1/portfolio/{owner}/positions":{"get":{"operationId":"portfolio_positions","summary":"LP positions","description":"LP positions","tags":["portfolio"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/PositionsResult"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"portfolio:read","x-lpx-upstream-class":"enriched","security":[{"ApiKey":[]}],"parameters":[{"name":"owner","in":"path","required":true,"schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"description":"Defaults to solana. Batch portfolio uses chain-qualified owner refs."}]}},"/v1/portfolio/positions":{"get":{"operationId":"portfolio_positions_batch","summary":"Batch LP positions","description":"Batch LP positions","tags":["portfolio"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/PositionsBatchResponse"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"portfolio:read","x-lpx-upstream-class":"enriched","security":[{"ApiKey":[]}],"parameters":[{"name":"owners","in":"query","required":true,"schema":{"type":"string"},"description":"Comma-separated owner refs; Solana base58 or chain:0xaddress. Maximum 24 distinct refs. Cost is 10 per distinct owner."}]}},"/v1/quotes/swap":{"get":{"operationId":"quote_swap","summary":"Swap quote","description":"Swap quote","tags":["quote"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/SwapQuoteResponse"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"quote:read","x-lpx-upstream-class":"provider","security":[{"ApiKey":[]}],"parameters":[{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"description":"Defaults to solana. Batch portfolio uses chain-qualified owner refs."},{"name":"inputMint","in":"query","required":true,"schema":{"type":"string"}},{"name":"outputMint","in":"query","required":true,"schema":{"type":"string"}},{"name":"amount","in":"query","required":true,"schema":{"type":"string","pattern":"^[0-9]*[1-9][0-9]*$","description":"Positive integer base units, encoded as a decimal string."}},{"name":"slippageBps","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":5000,"default":50,"description":"Basis points (50 = 0.5%)."}},{"name":"dexes","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated supported Jupiter DEX labels; Solana only."}]}},"/v1/quotes/bridge":{"post":{"operationId":"quote_bridge","summary":"Bridge quote","description":"Bridge quote","tags":["quote"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"POST /v1/quotes/bridge. The gateway strips the unsigned transactions a\nquote may carry; only POST /v1/build/bridge returns those.","type":"object","properties":{"ok":{"const":true},"summary":{"$ref":"#/components/schemas/BridgeQuoteSummary"},"origin":{"$ref":"#/components/schemas/ChainId"},"chain":{"$ref":"#/components/schemas/ChainId","description":"EVM-origin wire (sendEvmPlan path)."},"requestId":{"description":"Relay request id — the key for /intents/status polling.","type":["null","string"]},"destination":{"$ref":"#/components/schemas/ChainId"}},"required":["ok","destination","origin","requestId","summary"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"quote:read","x-lpx-upstream-class":"provider","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"origin":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"destination":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"user":{"type":"string"},"recipient":{"type":"string"},"amount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"slippageBps":{"type":"number"}},"required":["origin","destination","user","recipient","amount"],"additionalProperties":true,"description":"Native-asset bridge. Enabled bridgeable origin and destination must differ. Quote returns summary; build also returns origin-chain calls."}}}}}},"/v1/transactions/{signature}/status":{"get":{"operationId":"quote_transaction_status","summary":"Transaction status","description":"Transaction status","tags":["quote"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["ok"],"properties":{"ok":{"const":true}},"additionalProperties":true},{"$ref":"#/components/schemas/TransactionStatusResponse"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"quote:read","x-lpx-upstream-class":"provider","security":[{"ApiKey":[]}],"parameters":[{"name":"signature","in":"path","required":true,"schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"description":"Defaults to solana. Batch portfolio uses chain-qualified owner refs."},{"name":"lp","in":"query","required":false,"schema":{"type":"string","enum":["1"]},"description":"Solana LP cluster instead of swap mainnet."}]}},"/v1/build/swap":{"post":{"operationId":"build_swap","summary":"Build swap transactions","description":"Build swap transactions","tags":["build"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"tx:build","x-lpx-upstream-class":"builder","security":[{"ApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"Retry the identical body with the same key. Replay window: 10 minutes. Verify transaction freshness before signing a replay."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"chain":{"const":"solana"},"user":{"type":"string"},"quoteResponse":{"type":"object","properties":{},"required":[],"additionalProperties":true,"description":"Use the complete raw object returned by GET /v1/quotes/swap; the server refreshes it before building."},"priorityFee":{"type":"string","enum":["auto","fast","turbo"]}},"required":["user","quoteResponse"],"additionalProperties":true},{"type":"object","properties":{"chain":{"enum":["ethereum","base","bsc","robinhood","arc"]},"user":{"type":"string"},"inputMint":{"type":"string"},"outputMint":{"type":"string"},"amount":{"type":"string","pattern":"^[0-9]*[1-9][0-9]*$","description":"Positive integer base units, encoded as a decimal string."},"slippageBps":{"type":"integer","minimum":0,"maximum":5000,"default":50,"description":"Basis points (50 = 0.5%)."},"maxValueLossPpm":{"type":"integer","minimum":0,"maximum":1000000},"v4SwapCostApproval":{"type":"object","properties":{},"required":[],"additionalProperties":true,"description":"Use the reviewed quote's v4SwapCost approval fields."}},"required":["chain","user","inputMint","outputMint","amount"],"additionalProperties":true}]}}}}}},"/v1/build/bridge":{"post":{"operationId":"build_bridge","summary":"Build bridge transactions","description":"Build bridge transactions","tags":["build"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"tx:build","x-lpx-upstream-class":"builder","security":[{"ApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"Retry the identical body with the same key. Replay window: 10 minutes. Verify transaction freshness before signing a replay."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"origin":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"destination":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"user":{"type":"string"},"recipient":{"type":"string"},"amount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"slippageBps":{"type":"number"}},"required":["origin","destination","user","recipient","amount"],"additionalProperties":true,"description":"Native-asset bridge. Enabled bridgeable origin and destination must differ. Quote returns summary; build also returns origin-chain calls."}}}}}},"/v1/build/transfer":{"post":{"operationId":"build_transfer","summary":"Build transfer transactions","description":"Build transfer transactions","tags":["build"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"tx:build","x-lpx-upstream-class":"builder","security":[{"ApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"Retry the identical body with the same key. Replay window: 10 minutes. Verify transaction freshness before signing a replay."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"chain":{"const":"solana"},"from":{"type":"string"},"to":{"type":"string"},"sol":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."}},"required":["from","to","sol"],"additionalProperties":true},{"type":"object","properties":{"chain":{"const":"solana"},"from":{"type":"string"},"to":{"type":"string"},"mint":{"type":"string"},"amount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."}},"required":["from","to","mint","amount"],"additionalProperties":true},{"type":"object","properties":{"chain":{"enum":["ethereum","base","bsc","robinhood","arc"]},"from":{"type":"string"},"to":{"type":"string"},"token":{"type":"string"},"amount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."}},"required":["chain","from","to","amount"],"additionalProperties":true}]}}}}}},"/v1/build/lp/create":{"post":{"operationId":"build_lp_create","summary":"Build LP create transactions","description":"Build LP create transactions","tags":["build"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"tx:build","x-lpx-upstream-class":"builder","security":[{"ApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"Retry the identical body with the same key. Replay window: 10 minutes. Verify transaction freshness before signing a replay."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chain":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"venue":{"type":"string","enum":["Orca","Meteora","Raydium","PumpSwap","Uniswap","PancakeSwap"]},"version":{"type":"string","enum":["CLMM","Splash","DLMM","DAMM v2","DAMM v1","CPMM","AMM v4","CLMM v4","CPMM v2","Infinity CL","Infinity Bin"]},"user":{"type":"string"},"priorityFee":{"type":"string","enum":["auto","fast","turbo"]},"pool":{"type":"string"},"positionIds":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"string"},"description":"Solana: one position address. EVM: numeric string NFT IDs; venue/operation cardinality applies."},"baseAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"quoteAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"slippagePct":{"type":"number","description":"Percent units (1 = 1%)."},"quoteToken":{"type":"string"},"riskAcknowledgement":{"type":"string","description":"Exact safety digest returned with POOL_RISK_ACK_REQUIRED, after the user reviews reasons."},"minPrice":{"type":"number"},"maxPrice":{"type":"number"},"side":{"enum":["bid","ask","both"]},"shape":{"type":"string"},"binCount":{"type":"integer"},"baseToken":{"type":"string"},"initialPrice":{"type":"number"},"startPriceMarketPrice":{"type":["number","null"],"description":"The market price shown during opening-price review; null explicitly reviews an unpriced pair."},"startPriceAcknowledged":{"type":"boolean","description":"Review an off-market or unpriced opening; send startPriceMarketPrice with the displayed reference, or null when unavailable. A changed reference may require renewed review."},"fee":{"type":"number"},"feeIndex":{"type":"integer"},"tickSpacing":{"type":"integer"},"hooks":{"type":"string"},"binStep":{"type":"number"},"baseFeePct":{"type":"number"},"tradeFeeBps":{"type":"number"},"stable":{"type":"boolean"},"index":{"type":"integer"}},"required":["chain","venue","version","user","baseToken","quoteToken"],"additionalProperties":true,"description":"Venue-specific create fields follow the LP operation contract. EVM fee-bearing actions arrive as one server-authorized router call."}}}}}},"/v1/build/lp/add":{"post":{"operationId":"build_lp_add","summary":"Build LP add transactions","description":"Build LP add transactions","tags":["build"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"tx:build","x-lpx-upstream-class":"builder","security":[{"ApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"Retry the identical body with the same key. Replay window: 10 minutes. Verify transaction freshness before signing a replay."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chain":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"venue":{"type":"string","enum":["Orca","Meteora","Raydium","PumpSwap","Uniswap","PancakeSwap"]},"version":{"type":"string","enum":["CLMM","Splash","DLMM","DAMM v2","DAMM v1","CPMM","AMM v4","CLMM v4","CPMM v2","Infinity CL","Infinity Bin"]},"user":{"type":"string"},"priorityFee":{"type":"string","enum":["auto","fast","turbo"]},"pool":{"type":"string"},"positionIds":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"string"},"description":"Solana: one position address. EVM: numeric string NFT IDs; venue/operation cardinality applies."},"baseAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"quoteAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"slippagePct":{"type":"number","description":"Percent units (1 = 1%)."},"quoteToken":{"type":"string"},"riskAcknowledgement":{"type":"string","description":"Exact safety digest returned with POOL_RISK_ACK_REQUIRED, after the user reviews reasons."},"minPrice":{"type":"number"},"maxPrice":{"type":"number"},"side":{"enum":["bid","ask","both"]},"shape":{"type":"string"},"binCount":{"type":"integer"}},"required":["chain","venue","version","user","pool"],"additionalProperties":true,"description":"Provide positive baseAmount and/or quoteAmount. Required range/side depends on pool model."}}}}}},"/v1/build/lp/increase":{"post":{"operationId":"build_lp_increase","summary":"Build LP increase transactions","description":"Build LP increase transactions","tags":["build"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"tx:build","x-lpx-upstream-class":"builder","security":[{"ApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"Retry the identical body with the same key. Replay window: 10 minutes. Verify transaction freshness before signing a replay."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chain":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"venue":{"type":"string","enum":["Orca","Meteora","Raydium","PumpSwap","Uniswap","PancakeSwap"]},"version":{"type":"string","enum":["CLMM","Splash","DLMM","DAMM v2","DAMM v1","CPMM","AMM v4","CLMM v4","CPMM v2","Infinity CL","Infinity Bin"]},"user":{"type":"string"},"priorityFee":{"type":"string","enum":["auto","fast","turbo"]},"pool":{"type":"string"},"positionIds":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"string"},"description":"Solana: one position address. EVM: numeric string NFT IDs; venue/operation cardinality applies."},"baseAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"quoteAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"slippagePct":{"type":"number","description":"Percent units (1 = 1%)."},"quoteToken":{"type":"string"},"riskAcknowledgement":{"type":"string","description":"Exact safety digest returned with POOL_RISK_ACK_REQUIRED, after the user reviews reasons."},"minPrice":{"type":"number"},"maxPrice":{"type":"number"},"side":{"enum":["bid","ask","both"]},"shape":{"type":"string"},"binCount":{"type":"integer"}},"required":["chain","venue","version","user","positionIds"],"additionalProperties":true,"description":"Positive deposit. One ID except CLMM v4 and Infinity CL (up to 64)."}}}}}},"/v1/build/lp/remove":{"post":{"operationId":"build_lp_remove","summary":"Build LP remove transactions","description":"Build LP remove transactions","tags":["build"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"tx:build","x-lpx-upstream-class":"builder","security":[{"ApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"Retry the identical body with the same key. Replay window: 10 minutes. Verify transaction freshness before signing a replay."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chain":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"venue":{"type":"string","enum":["Orca","Meteora","Raydium","PumpSwap","Uniswap","PancakeSwap"]},"version":{"type":"string","enum":["CLMM","Splash","DLMM","DAMM v2","DAMM v1","CPMM","AMM v4","CLMM v4","CPMM v2","Infinity CL","Infinity Bin"]},"user":{"type":"string"},"priorityFee":{"type":"string","enum":["auto","fast","turbo"]},"pool":{"type":"string"},"positionIds":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"string"},"description":"Solana: one position address. EVM: numeric string NFT IDs; venue/operation cardinality applies."},"baseAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"quoteAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"slippagePct":{"type":"number","description":"Percent units (1 = 1%)."},"quoteToken":{"type":"string"},"riskAcknowledgement":{"type":"string","description":"Exact safety digest returned with POOL_RISK_ACK_REQUIRED, after the user reviews reasons."},"minPrice":{"type":"number"},"maxPrice":{"type":"number"},"side":{"enum":["bid","ask","both"]},"shape":{"type":"string"},"binCount":{"type":"integer"},"bps":{"type":"integer","minimum":1,"maximum":10000},"lpAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"binIds":{"type":"array","items":{"type":"integer"}}},"required":["chain","venue","version","user"],"additionalProperties":true,"description":"Use bps (10000 = full withdrawal), or PumpSwap lpAmount exclusively. Fungible positions use pool; NFT positions use positionIds."}}}}}},"/v1/build/lp/harvest":{"post":{"operationId":"build_lp_harvest","summary":"Build LP harvest transactions","description":"Build LP harvest transactions","tags":["build"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"tx:build","x-lpx-upstream-class":"builder","security":[{"ApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"Retry the identical body with the same key. Replay window: 10 minutes. Verify transaction freshness before signing a replay."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chain":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"venue":{"type":"string","enum":["Orca","Meteora","Raydium","PumpSwap","Uniswap","PancakeSwap"]},"version":{"type":"string","enum":["CLMM","Splash","DLMM","DAMM v2","DAMM v1","CPMM","AMM v4","CLMM v4","CPMM v2","Infinity CL","Infinity Bin"]},"user":{"type":"string"},"priorityFee":{"type":"string","enum":["auto","fast","turbo"]},"pool":{"type":"string"},"positionIds":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"string"},"description":"Solana: one position address. EVM: numeric string NFT IDs; venue/operation cardinality applies."},"baseAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"quoteAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"slippagePct":{"type":"number","description":"Percent units (1 = 1%)."},"quoteToken":{"type":"string"},"riskAcknowledgement":{"type":"string","description":"Exact safety digest returned with POOL_RISK_ACK_REQUIRED, after the user reviews reasons."},"minPrice":{"type":"number"},"maxPrice":{"type":"number"},"side":{"enum":["bid","ask","both"]},"shape":{"type":"string"},"binCount":{"type":"integer"}},"required":["chain","venue","version","user","positionIds"],"additionalProperties":true}}}}}},"/v1/build/lp/compound":{"post":{"operationId":"build_lp_compound","summary":"Build LP compound transactions","description":"Build LP compound transactions","tags":["build"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"tx:build","x-lpx-upstream-class":"builder","security":[{"ApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"Retry the identical body with the same key. Replay window: 10 minutes. Verify transaction freshness before signing a replay."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chain":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"venue":{"type":"string","enum":["Orca","Meteora","Raydium","PumpSwap","Uniswap","PancakeSwap"]},"version":{"type":"string","enum":["CLMM","Splash","DLMM","DAMM v2","DAMM v1","CPMM","AMM v4","CLMM v4","CPMM v2","Infinity CL","Infinity Bin"]},"user":{"type":"string"},"priorityFee":{"type":"string","enum":["auto","fast","turbo"]},"pool":{"type":"string"},"positionIds":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"string"},"description":"Solana: one position address. EVM: numeric string NFT IDs; venue/operation cardinality applies."},"baseAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"quoteAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"slippagePct":{"type":"number","description":"Percent units (1 = 1%)."},"quoteToken":{"type":"string"},"riskAcknowledgement":{"type":"string","description":"Exact safety digest returned with POOL_RISK_ACK_REQUIRED, after the user reviews reasons."},"minPrice":{"type":"number"},"maxPrice":{"type":"number"},"side":{"enum":["bid","ask","both"]},"shape":{"type":"string"},"binCount":{"type":"integer"}},"required":["chain","venue","version","user","positionIds"],"additionalProperties":true}}}}}},"/v1/build/lp/rebalance":{"post":{"operationId":"build_lp_rebalance","summary":"Build LP rebalance transactions","description":"Build LP rebalance transactions","tags":["build"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"tx:build","x-lpx-upstream-class":"builder","security":[{"ApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"Retry the identical body with the same key. Replay window: 10 minutes. Verify transaction freshness before signing a replay."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chain":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"venue":{"type":"string","enum":["Orca","Meteora","Raydium","PumpSwap","Uniswap","PancakeSwap"]},"version":{"type":"string","enum":["CLMM","Splash","DLMM","DAMM v2","DAMM v1","CPMM","AMM v4","CLMM v4","CPMM v2","Infinity CL","Infinity Bin"]},"user":{"type":"string"},"priorityFee":{"type":"string","enum":["auto","fast","turbo"]},"pool":{"type":"string"},"positionIds":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"string"},"description":"Solana: one position address. EVM: numeric string NFT IDs; venue/operation cardinality applies."},"baseAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"quoteAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"slippagePct":{"type":"number","description":"Percent units (1 = 1%)."},"quoteToken":{"type":"string"},"riskAcknowledgement":{"type":"string","description":"Exact safety digest returned with POOL_RISK_ACK_REQUIRED, after the user reviews reasons."},"minPrice":{"type":"number"},"maxPrice":{"type":"number"},"side":{"enum":["bid","ask","both"]},"shape":{"type":"string"},"binCount":{"type":"integer"}},"required":["chain","venue","version","user","positionIds","minPrice","maxPrice"],"additionalProperties":true}}}}}},"/v1/build/lp/migrate":{"post":{"operationId":"build_lp_migrate","summary":"Build LP migrate transactions","description":"Build LP migrate transactions","tags":["build"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"tx:build","x-lpx-upstream-class":"builder","security":[{"ApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"Retry the identical body with the same key. Replay window: 10 minutes. Verify transaction freshness before signing a replay."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chain":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"venue":{"type":"string","enum":["Orca","Meteora","Raydium","PumpSwap","Uniswap","PancakeSwap"]},"version":{"type":"string","enum":["CLMM","Splash","DLMM","DAMM v2","DAMM v1","CPMM","AMM v4","CLMM v4","CPMM v2","Infinity CL","Infinity Bin"]},"user":{"type":"string"},"priorityFee":{"type":"string","enum":["auto","fast","turbo"]},"pool":{"type":"string"},"positionIds":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"string"},"description":"Solana: one position address. EVM: numeric string NFT IDs; venue/operation cardinality applies."},"baseAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"quoteAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"slippagePct":{"type":"number","description":"Percent units (1 = 1%)."},"quoteToken":{"type":"string"},"riskAcknowledgement":{"type":"string","description":"Exact safety digest returned with POOL_RISK_ACK_REQUIRED, after the user reviews reasons."},"minPrice":{"type":"number"},"maxPrice":{"type":"number"},"side":{"enum":["bid","ask","both"]},"shape":{"type":"string"},"binCount":{"type":"integer"}},"required":["chain","venue","version","user","pool"],"additionalProperties":true,"description":"Meteora DAMM v1 and PumpSwap migrations; unsupported venue/operation pairs return 400."}}}}}},"/v1/build/lp/farm":{"post":{"operationId":"build_lp_farm","summary":"Build LP farm transactions","description":"Build LP farm transactions","tags":["build"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"tx:build","x-lpx-upstream-class":"builder","security":[{"ApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"Retry the identical body with the same key. Replay window: 10 minutes. Verify transaction freshness before signing a replay."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chain":{"type":"string","enum":["solana","ethereum","base","bsc","robinhood","arc"],"description":"Must be enabled in GET /v1/chains."},"venue":{"type":"string","enum":["Orca","Meteora","Raydium","PumpSwap","Uniswap","PancakeSwap"]},"version":{"type":"string","enum":["CLMM","Splash","DLMM","DAMM v2","DAMM v1","CPMM","AMM v4","CLMM v4","CPMM v2","Infinity CL","Infinity Bin"]},"user":{"type":"string"},"priorityFee":{"type":"string","enum":["auto","fast","turbo"]},"pool":{"type":"string"},"positionIds":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"string"},"description":"Solana: one position address. EVM: numeric string NFT IDs; venue/operation cardinality applies."},"baseAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"quoteAmount":{"type":["number","string"],"description":"Human token units. The builder uses JavaScript numeric precision; strings that lose value during conversion are rejected. Token decimal limits also apply."},"slippagePct":{"type":"number","description":"Percent units (1 = 1%)."},"quoteToken":{"type":"string"},"riskAcknowledgement":{"type":"string","description":"Exact safety digest returned with POOL_RISK_ACK_REQUIRED, after the user reviews reasons."},"minPrice":{"type":"number"},"maxPrice":{"type":"number"},"side":{"enum":["bid","ask","both"]},"shape":{"type":"string"},"binCount":{"type":"integer"},"action":{"enum":["stake","unstake","claim"]}},"required":["chain","venue","version","user","positionIds","action"],"additionalProperties":true,"description":"One position ID; supported farm deployments only."}}}}}},"/v1/build/confirm":{"post":{"operationId":"build_confirm","summary":"Confirm a returned build","description":"Confirm a returned build","tags":["build"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","required":["ok"],"additionalProperties":true,"properties":{"ok":{"const":true},"confirmed":{"type":"boolean","description":"The fee receipt was verified on-chain."},"updated":{"type":"boolean","description":"The fee row was updated by this confirmation; false means verification is still incomplete."},"confirmedIds":{"type":"array","items":{"type":"integer"},"description":"Fee rows this confirmation verified."},"pendingIds":{"type":"array","items":{"type":"integer"},"description":"Fee rows still awaiting chain evidence."},"pendingReason":{"type":"string"},"createFees":{"type":"array","items":{"type":"object","required":["ok"],"properties":{"ok":{"type":"boolean"},"observed":{"type":"boolean"},"confirmed":{"type":"boolean"}},"additionalProperties":true},"description":"One entry per create-fee intent, in transaction order."}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, endpoint, or source restriction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body upload timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict/pending or fresh quote/safety approval required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds 128 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Simulation or signing prerequisite failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"499":{"description":"Request cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"External API temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Read deadline exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-lpx-scope":"tx:build","x-lpx-upstream-class":"provider","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"confirmationToken":{"type":"string"},"signatures":{"type":"array","minItems":1,"maxItems":64,"items":{"type":["string","null"]},"description":"One signature per returned transaction in the same order. An optional step that failed may use null. Atomic calls are already assembled into a single transaction."}},"required":["confirmationToken","signatures"],"additionalProperties":true}}}}}}},"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"X-API-Key"}},"schemas":{"AdminCandidate":{"type":"object","properties":{"address":{"type":"string"},"source":{"$ref":"#/components/schemas/AdminCandidateSource"},"detail":{"description":"Human-readable provenance, e.g. `storage slot 4`.","type":"string"}},"required":["address","detail","source"]},"AdminCandidateSource":{"enum":["code_constant","deployer","owner","proxy_admin","storage_prefix"],"type":"string"},"Amm":{"enum":["Meteora","Orca","PancakeSwap","PumpSwap","Raydium","Uniswap"],"type":"string"},"BinLimitOrders":{"type":"object","properties":{"side":{"$ref":"#/components/schemas/SingleSide","description":"\"ask\": the orders sell the base token (X); \"bid\": they sell the quote (Y)."},"open":{"description":"Unfilled orders, ui units of the token they sell.","type":"number"},"processing":{"description":"The unfilled rest of orders the bin has started filling.","type":"number"}},"required":["open","processing","side"]},"BinSpan":{"type":"object","properties":{"from":{"type":"number"},"to":{"type":"number"}},"required":["from","to"]},"BridgeQuoteSummary":{"type":"object","properties":{"inAmountUi":{"type":"number"},"inUsd":{"type":["null","number"]},"outAmountUi":{"description":"Estimated arrival amount in the destination's native units.","type":["null","number"]},"outUsd":{"type":["null","number"]},"feesUsd":{"description":"Total quoted fees (gas + relayer + our app fee), USD, best-effort.","type":["null","number"]},"timeEstimateSec":{"description":"Relay's fill-time estimate, seconds.","type":["null","number"]}},"required":["feesUsd","inAmountUi","inUsd","outAmountUi","outUsd","timeEstimateSec"]},"BytecodeCapability":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"severity":{"$ref":"#/components/schemas/BytecodeSeverity"},"ownerGated":{"$ref":"#/components/schemas/OwnerGate"},"evidence":{"type":"array","items":{"type":"string"}}},"required":["evidence","id","label","ownerGated","severity"]},"BytecodeControlEvidence":{"description":"LP.xyz's own bytecode scan for one pool asset: functions that EXIST, not\nproof they are abused. Review evidence only; never blocks or verifies a\ntoken as clean.","type":"object","properties":{"provider":{"type":"string","const":"lpxyz-bytecode"},"address":{"type":"string"},"isProxy":{"type":"boolean"},"proxyKind":{"enum":["eip1167","none","slot"],"type":"string"},"implementation":{"type":"string"},"capabilities":{"type":"array","items":{"$ref":"#/components/schemas/BytecodeCapability"}},"observedAt":{"type":"string"}},"required":["address","capabilities","observedAt","provider"]},"BytecodeScanResult":{"type":"object","properties":{"ok":{"type":"boolean"},"codeHash":{"type":"string"},"isProxy":{"type":"boolean"},"proxyKind":{"enum":["eip1167","none","slot"],"type":"string"},"implementation":{"type":"string"},"selectorsFound":{"type":"number"},"capabilities":{"type":"array","items":{"$ref":"#/components/schemas/BytecodeCapability"}},"opcodes":{"type":"object","properties":{"selfdestruct":{"type":"boolean"},"delegatecall":{"type":"boolean"}},"required":["delegatecall","selfdestruct"]},"owner":{"type":["null","string"]},"error":{"type":"string"},"checkedAt":{"type":"string"}},"required":["capabilities","checkedAt","ok","opcodes","selectorsFound"]},"BytecodeSeverity":{"enum":["high","low","medium"],"type":"string"},"Candle":{"type":"object","properties":{"time":{"description":"Unix seconds (bar open time).","type":"number"},"open":{"type":"number"},"high":{"type":"number"},"low":{"type":"number"},"close":{"type":"number"},"volume":{"type":"number"}},"required":["close","high","low","open","time","volume"]},"ChainCatalogRow":{"description":"One row of GET /v1/chains.","type":"object","properties":{"id":{"$ref":"#/components/schemas/ChainId"},"name":{"type":"string"},"family":{"$ref":"#/components/schemas/ChainFamily"},"nativeSymbol":{"type":"string"}},"required":["family","id","name","nativeSymbol"]},"ChainFamily":{"enum":["evm","solana"],"type":"string"},"ChainId":{"enum":["arc","base","bsc","ethereum","robinhood","solana"],"type":"string"},"ChainsListResponse":{"type":"object","properties":{"chains":{"type":"array","items":{"$ref":"#/components/schemas/ChainCatalogRow"}}},"required":["chains"]},"ContractAuditEvidence":{"type":"object","properties":{"provider":{"type":"string","const":"serialized"},"status":{"enum":["audited","pending","unavailable"],"type":"string"},"isSafe":{"type":"boolean"},"isTokenSafe":{"type":"boolean"},"isHookSafe":{"type":["null","boolean"]},"description":{"type":"string"},"address":{"type":"string"},"pool":{"type":"object","properties":{"id":{"type":"string"},"hookAddress":{"type":["null","string"]},"isPrimary":{"type":"boolean"}}},"hookAudit":{"type":"object","properties":{"address":{"type":"string"},"isSafe":{"type":"boolean"},"description":{"type":"string"}}},"sourceType":{"type":"string"},"implementationAddress":{"type":["null","string"]},"latestAuditSystemVersion":{"type":"string"},"vulnerabilities":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"name":{"type":"string"},"severity":{"type":"string"},"description":{"type":"string"},"impact":{"enum":["critical","info","warning"],"type":"string"},"label":{"type":"string"},"mitigated":{"type":["null","boolean"]},"gateReason":{"type":["null","string"]}}}},"auditSystemVersion":{"type":"string"},"observedAt":{"type":"string"},"receivedAt":{"description":"Cache receipt time, not the provider's original audit generation time.","type":"string"},"subscribed":{"type":"boolean"},"deliveryCheckedAt":{"type":"string"},"poolEvidence":{"description":"Independently received assessments for the requested pools. Token\nsubscription health never renews these hook snapshots.","type":"array","items":{"$ref":"#/components/schemas/SerializedPoolEvidence"}}},"required":["observedAt","provider","status","vulnerabilities"]},"EvmContractFlags":{"description":"EVM contract capability flags (GoPlus) — the EVM analog of Solana's\nmint/freeze authorities, rendered as the token card's authority cells.\nEvery field is optional and UNKNOWN IS NOT FALSE: the feed reporting\nnothing must render no cell, never a reassuring \"✓ No\".","type":"object","properties":{"mintable":{"description":"Owner can mint new supply (Solana's mint authority).","type":"boolean"},"pausable":{"description":"Transfers can be paused (what Solana's freeze authority buys).","type":"boolean"},"openSource":{"description":"Contract source is verified on the explorer.","type":"boolean"},"ownerRenounced":{"description":"Owner slot holds a burn address — nobody can call owner-only functions.","type":"boolean"}}},"EvmTokenControls":{"type":"object","properties":{"trusted":{"type":"boolean"},"honeypot":{"type":"boolean"},"ownerCanChangeBalances":{"type":"boolean"},"hiddenOwner":{"type":"boolean"},"ownershipReclaimable":{"type":"boolean"},"selfdestruct":{"type":"boolean"},"mintable":{"type":"boolean"},"closedSource":{"type":"boolean"},"proxy":{"type":"boolean"},"pausable":{"type":"boolean"},"blacklist":{"type":"boolean"},"maxTaxPct":{"description":"Worst of buy/sell/transfer tax, percent.","type":"number"}},"required":["blacklist","closedSource","hiddenOwner","honeypot","mintable","ownerCanChangeBalances","ownershipReclaimable","pausable","proxy","selfdestruct","trusted"]},"ExitProbeUnsupportedReason":{"description":"Why a pool gets no exit probe. Every value names a DIFFERENT gap so the\ndetection scorecard can count them apart; none of them means \"clean\".","enum":["chain_unsupported","hook_swap_gated","invalid_target","pool_key_unrecoverable","pool_shape_mismatch","quote_not_fundable","singleton_pool","unknown_pool_kind","venue_not_modelled"],"type":"string"},"ExitSimulationEvidence":{"description":"LP.xyz's single-block buy → transfer → sell simulation for one V2 pool.","type":"object","properties":{"provider":{"type":"string","const":"lpxyz-exit-simulation"},"pool":{"type":"string"},"token":{"type":"string"},"result":{"$ref":"#/components/schemas/SellSimulation"}},"required":["pool","provider","result","token"]},"FieldProvenance":{"type":"object","properties":{"state":{"$ref":"#/components/schemas/ProvenanceState"},"source":{"description":"The detector that answered, or would have answered had it been able to.","type":"string"},"observedAt":{"description":"When the evidence behind this field was observed.","type":"string"},"blockNumber":{"description":"Block the evidence was pinned to, when the detector pins one.","type":"string"},"reason":{"description":"Why the field reads this way when the answer alone does not say: the gap\nbehind an `unknown`, or the conflict a stronger detector resolved.","type":"string"}},"required":["observedAt","source","state"]},"Hex":{"type":"string","pattern":"^0x.*$"},"HoldingsBatchResponse":{"type":"object","properties":{"owners":{"description":"Keyed by the owner ref exactly as passed in `owners`.","type":"object","additionalProperties":{"$ref":"#/components/schemas/HoldingsResult"}}},"required":["owners"]},"HoldingsResult":{"description":"A wallet's on-chain holdings: native SOL + SPL/Token-2022 balances.","type":"object","properties":{"owner":{"type":"string"},"sol":{"description":"Native SOL balance (UI amount).","type":"number"},"totalUsd":{"description":"Total USD across all priced holdings, if any prices resolved.","type":"number"},"holdings":{"description":"Token holdings, value-desc; the native SOL row is included with isNative.","type":"array","items":{"$ref":"#/components/schemas/HoldingView"}},"source":{"description":"Read status, so the UI can distinguish \"empty wallet\" from \"RPC error\".","type":"object","properties":{"ok":{"type":"boolean"},"note":{"type":"string"}},"required":["ok"]}},"required":["holdings","owner","sol","source"]},"HoldingView":{"description":"A single on-chain token holding (SOL is included as the WSOL-equivalent row).","type":"object","properties":{"mint":{"type":"string"},"chain":{"$ref":"#/components/schemas/ChainId","description":"Chain the holding lives on. Absent = solana (pre-EVM responses)."},"amount":{"description":"UI amount (already scaled by decimals).","type":"number"},"decimals":{"type":"number"},"usd":{"description":"USD value of the holding, if a price was found.","type":"number"},"symbol":{"type":"string"},"name":{"type":"string"},"logo":{"type":"string"},"isNative":{"description":"True for the native SOL row (not an SPL token account).","type":"boolean"}},"required":["amount","decimals","mint"]},"HotPoolsResult":{"type":"object","properties":{"pools":{"type":"array","items":{"$ref":"#/components/schemas/PoolSummary"}},"rateLimited":{"description":"Upstream degraded (Codex failed/unconfigured) — distinct from a genuine\nempty set. Kept under its historical name for the route/UI contract.","type":"boolean"}},"required":["pools","rateLimited"]},"LiquidityEvidence":{"type":"object","properties":{"trackedTvlUsd":{"type":"number"},"tvlUsdUntracked":{"type":"number"},"basePriceProvenance":{"enum":["independent","pool-derived"],"type":"string"},"quotePriceProvenance":{"enum":["independent","pool-derived"],"type":"string"},"sellDepth5PctUsd":{"type":"number"}}},"LockerFamilyId":{"enum":["uncx_v2_lock_registry","uncx_v2_token_locks"],"type":"string"},"LpFeeShareMethod":{"description":"How a live split maps onto aggregate volume. Directional protocols expose\ntwo rates while indexers expose one combined volume, so the higher cut is a\nconservative bound until direction-resolved volume is available.","enum":["conservative-directional","exact"],"type":"string"},"LpFeeShareSource":{"description":"Where a pool row's live LP/protocol fee split was read from. Absence means\nthe UI is using the venue/model fallback documented in lp-fee-share.ts.","enum":["config-account","factory","global-config","pool-account"],"type":"string"},"LpLockEvidence":{"type":"object","properties":{"pool":{"type":"string"},"burnedPct":{"type":"number"},"lockedPct":{"type":"number"},"unlockedPct":{"type":"number"},"unknownPct":{"type":"number"},"nextUnlockAt":{"type":"string"}},"required":["burnedPct","lockedPct","pool","unknownPct","unlockedPct"]},"LpSink":{"type":"object","properties":{"address":{"type":"string"},"kind":{"$ref":"#/components/schemas/LpSinkKind"},"pct":{"description":"Share of `totalSupply` this address holds, 0–100.","type":"number"},"verdict":{"$ref":"#/components/schemas/LpSinkVerdict"},"reason":{"description":"Why the verdict is what it is — the finding must be inspectable.","type":"string"},"vendor":{"description":"Vendor label from the candidate roster; never used to classify.","type":"string"},"family":{"$ref":"#/components/schemas/LockerFamilyId","description":"Locker family established from the deployed bytecode, not the roster."},"tranches":{"description":"Locker accounting, when the family exposed it for this pair.","type":"array","items":{"type":"object","properties":{"amountPct":{"type":"number"},"unlockAt":{"type":"string"},"expired":{"type":"boolean"},"owner":{"type":"string"}},"required":["amountPct","expired","unlockAt"]}}},"required":["address","kind","pct","reason","verdict"]},"LpSinkKind":{"description":"The five custody classes of the specification, minus the v3/v4-only farm\npassthrough (a V2 farm holds a fungible LP balance and fingerprints as an\nunclassified contract, so it reads `unknown`, never \"locked\").","enum":["burn","candidate","creator","locker","pair","token"],"type":"string"},"LpSinkVerdict":{"enum":["burned","locked","unknown","unlocked"],"type":"string"},"NativeControlContext":{"description":"What a native control record observed BESIDE its flags — the corroboration\nthe conflict carve-out weighs, carried on the row itself.\n\nIt travels with the record because rule R3 requires it to: the carve-out\ndecides whether a deposit is blocked, block reasons are hashed into the\nacknowledgement digest, and a digest input may only come from the durable\nstore. Reading `paused` live on one surface and not the other is exactly the\n409 that rule exists to prevent.\n\nEvery field here is an ESCALATION: it is `true` when something was observed\nand absent otherwise. A quiet getter refutes nothing — a token that is not\npaused right now can still be paused in the next block — so `false` is never\nwritten and never read as reassurance.","type":"object","properties":{"sameBlockRoundTrip":{"description":"Always true, and the reason the carve-out exists.\n\n`RoundTripProbe.sol` buys and sells in ONE block from ONE address, so a\ntoken whose anti-sniper rule forbids a same-block sell reads as\n`honeypot: true` while being perfectly tradeable a block later. Until\ntwo-block simulation lands (`eth_simulateV1`, deferred), a native-only\nhoneypot needs independent current-state corroboration to block.","type":"boolean","const":true},"pool":{"description":"The pool the pool-scoped observations below were taken against.","type":"string"},"transferFailed":{"description":"A plain ERC-20 transfer of the bought amount reverted in the same call.","const":true,"type":"boolean"},"paused":{"const":true,"type":"boolean"},"tradingClosed":{"const":true,"type":"boolean"},"poolBlacklisted":{"description":"THIS pool's address is on the token's blacklist right now.","const":true,"type":"boolean"}},"required":["sameBlockRoundTrip"]},"NativeCreatorShare":{"type":"object","properties":{"address":{"type":"string"},"pct":{"description":"Creator's share of the TOKEN supply, 0–100 — the provider's\n`creator_percent` analogue. Absent means unknown, never zero.","type":"number"},"lpPct":{"description":"Creator's share of this pair's LP supply, 0–100.","type":"number"},"creationBlock":{"type":"string"},"source":{"enum":["creation_block_mint_log","creation_block_receipt"],"type":"string"},"error":{"type":"string"}}},"NativeEvmRisk":{"type":"object","properties":{"chain":{"$ref":"#/components/schemas/ChainId"},"token":{"type":"string"},"pool":{"type":"string"},"mode":{"type":"string","const":"shadow"},"bytecode":{"$ref":"#/components/schemas/BytecodeScanResult"},"liveState":{"$ref":"#/components/schemas/NativeLiveState"},"exit":{"$ref":"#/components/schemas/SellSimulation","description":"Always present: a pool with no exit lane records WHICH gap it was\n(`unsupportedReason`) instead of falling silent."},"custody":{"$ref":"#/components/schemas/NativeLpCustody","description":"V2 LP custody read from the chain; concentrated pools use another lane."},"privilege":{"$ref":"#/components/schemas/PrivilegeDifferential","description":"Expensive shadow measurement, present only when requested."},"detection":{"$ref":"#/components/schemas/ProvenancedTokenControls","description":"The normalized controls the audit fixtures replay, and the per-field\nrecord that says which of their `false`s are findings and which are\ncoercions. Kept as one value so neither can be read without the other."},"score":{"$ref":"#/components/schemas/NativeScore","description":"The 0–10 ladder reproduced tier-for-tier."},"sameBlockRoundTrip":{"description":"The exit evidence above comes from a single-block, single-address round\ntrip, so an anti-sniper \"no same-block sell\" rule reads as a honeypot.\nRecorded on every result; the deposit gate's carve-out weighs it.","type":"boolean","const":true}},"required":["bytecode","chain","detection","exit","liveState","mode","pool","sameBlockRoundTrip","score","token"]},"NativeLiveState":{"type":"object","properties":{"checkedAt":{"type":"string"},"blockNumber":{"type":"string"},"implementation":{"type":"string"},"paused":{"type":"boolean"},"tradingClosed":{"type":"boolean"},"poolBlacklisted":{"type":"boolean"},"observations":{"type":"array","items":{"type":"object","properties":{"getter":{"type":"string"},"field":{"$ref":"#/components/schemas/StateField"},"value":{"type":"boolean"}},"required":["field","getter"]}},"error":{"type":"string"}},"required":["checkedAt","observations"]},"NativeLpCustody":{"description":"Extends the provider-derived shape so the two are directly comparable.","type":"object","properties":{"chain":{"$ref":"#/components/schemas/ChainId"},"blockNumber":{"type":"string"},"totalSupply":{"type":"string"},"sinkPct":{"description":"The specification's literal Σ(burn sinks, token, pair, lockers).","type":"number"},"lpUnlockedPct":{"description":"The specification's literal `100 − Σ(sinks)`. `unlockedPct` is its\ntri-state refinement: it does not credit a locker whose unlock date has\nelapsed, and it does not credit the token's own balance as protection.","type":"number"},"sinks":{"type":"array","items":{"$ref":"#/components/schemas/LpSink"}},"creator":{"$ref":"#/components/schemas/NativeCreatorShare"},"checkedAt":{"type":"string"},"error":{"type":"string"},"pool":{"type":"string"},"burnedPct":{"type":"number"},"lockedPct":{"type":"number"},"unlockedPct":{"type":"number"},"unknownPct":{"type":"number"},"nextUnlockAt":{"type":"string"}},"required":["blockNumber","burnedPct","chain","checkedAt","lockedPct","lpUnlockedPct","pool","sinkPct","sinks","totalSupply","unknownPct","unlockedPct"]},"NativeScore":{"type":"object","properties":{"risk":{"$ref":"#/components/schemas/RiskInfo"},"unknownBlockTier":{"description":"Block-tier fields no detector answered — the coverage this score lacks.","type":"array","items":{"enum":["buy_tax_over_10","can_take_back_ownership","cannot_buy","cannot_sell_all","hidden_owner","is_blacklisted","is_honeypot","is_mintable","is_open_source","is_proxy","owner_change_balance","selfdestruct","sell_tax_over_10","transfer_pausable","transfer_tax_over_10"],"type":"string"}},"standing":{"$ref":"#/components/schemas/NativeScoreStanding"}},"required":["risk","standing","unknownBlockTier"]},"NativeScoreStanding":{"description":"What a score is entitled to claim.\n\n`eligible` is reserved for a 0 that every block-tier field actually earned.\nA 0 standing on an unanswered block-tier field is `unverified`: the producer\nfound no danger because it did not look, which is not the same finding and\nmust never be rendered, scored or gated as though it were.","enum":["eligible","scored","unverified"],"type":"string"},"OwnerGate":{"enum":["live","renounced","unknown"],"type":"string"},"PoolAudit":{"type":"object","properties":{"pool":{"type":"object","properties":{"chain":{"$ref":"#/components/schemas/ChainId"},"pool":{"type":"string"},"amm":{"$ref":"#/components/schemas/Amm"},"kind":{"$ref":"#/components/schemas/PoolKind"},"baseMint":{"type":"string"},"quoteMint":{"type":"string"},"addressValid":{"type":"boolean"},"verified":{"type":"boolean"}},"required":["addressValid","amm","baseMint","chain","pool","quoteMint","verified"]},"findings":{"type":"array","items":{"$ref":"#/components/schemas/PoolAuditFinding"}},"facts":{"$ref":"#/components/schemas/PoolAuditFacts"},"sources":{"type":"array","items":{"$ref":"#/components/schemas/PoolAuditSource"}},"schemaVersion":{"type":"string","const":"2"},"methodologyVersion":{"type":"string","const":"lpxyz-pool-audit-1.13.0"},"status":{"$ref":"#/components/schemas/PoolAuditStatus"},"verdict":{"$ref":"#/components/schemas/PoolAuditVerdict"},"scores":{"$ref":"#/components/schemas/PoolAuditScores"},"topFindings":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"id":{"description":"Stable identifier used by tests, external consumers and methodology diffs.","type":"string"},"severity":{"$ref":"#/components/schemas/PoolAuditSeverity"}},"required":["id","severity","title"]}},"checkedAt":{"type":"string"},"expiresAt":{"type":"string"}},"required":["checkedAt","expiresAt","facts","findings","methodologyVersion","pool","schemaVersion","scores","sources","status","topFindings","verdict"]},"PoolAuditCategory":{"enum":["economics","evidence","identity","liquidity","pool_mechanics","token_control"],"type":"string"},"PoolAuditFacts":{"type":"object","properties":{"identity":{"type":"object","properties":{"chain":{"$ref":"#/components/schemas/ChainId"},"pool":{"type":"string"},"amm":{"$ref":"#/components/schemas/Amm"},"kind":{"$ref":"#/components/schemas/PoolKind"},"baseMint":{"type":"string"},"quoteMint":{"type":"string"},"addressValid":{"type":"boolean"},"verified":{"type":"boolean"}},"required":["addressValid","amm","baseMint","chain","pool","quoteMint","verified"]},"controls":{"type":"object","properties":{"checked":{"type":"boolean"},"depositBlocked":{"type":"boolean"},"dangers":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"hooks":{"type":"string"},"contractAudit":{"$ref":"#/components/schemas/ContractAuditEvidence"},"contractAudits":{"type":"array","items":{"$ref":"#/components/schemas/ContractAuditEvidence"}},"tokenControls":{"type":"array","items":{"$ref":"#/components/schemas/TokenControlEvidence"}},"bytecode":{"type":"array","items":{"$ref":"#/components/schemas/BytecodeControlEvidence"}},"exitSimulation":{"$ref":"#/components/schemas/ExitSimulationEvidence"},"nativeShadow":{"description":"Background observations retained for comparison; excluded from policy and scores.","type":"array","items":{"$ref":"#/components/schemas/NativeEvmRisk"}},"unverifiedTokens":{"description":"Non-trusted pool tokens with no fresh control evidence from any source.","type":"array","items":{"type":"string"}}},"required":["checked","dangers","depositBlocked","warnings"]},"mechanics":{"type":"object","properties":{"feePct":{"type":"number"},"lpFeeShare":{"type":"number"},"lpFeeShareSource":{"$ref":"#/components/schemas/LpFeeShareSource"},"lpFeeShareMethod":{"$ref":"#/components/schemas/LpFeeShareMethod"},"verified":{"type":"boolean"},"effectiveLpFeePct":{"type":"number"},"dynamicFee":{"type":"boolean"}},"required":["dynamicFee","verified"]},"liquidity":{"type":"object","properties":{"tvlUsd":{"type":"number"},"tvlVerified":{"type":"boolean"},"lpLocks":{"$ref":"#/components/schemas/LpLockEvidence"},"evidence":{"$ref":"#/components/schemas/LiquidityEvidence"},"volume24hUsd":{"type":"number"},"volume1hUsd":{"type":"number"},"txns24h":{"type":"number"},"poolAgeHours":{"type":"number"}},"required":["tvlVerified"]},"economics":{"type":"object","properties":{"dailyLpFeeYieldPct":{"type":"number"},"volumeTvlRatio":{"type":"number"},"farmAprPct":{"type":"number"}}}},"required":["controls","economics","identity","liquidity","mechanics"]},"PoolAuditFinding":{"type":"object","properties":{"id":{"description":"Stable identifier used by tests, external consumers and methodology diffs.","type":"string"},"category":{"$ref":"#/components/schemas/PoolAuditCategory"},"severity":{"$ref":"#/components/schemas/PoolAuditSeverity"},"title":{"type":"string"},"detail":{"type":"string"},"remediation":{"type":"string"},"source":{"type":"string"},"observedAt":{"type":"string"},"blocksDeposit":{"description":"Critical findings mirror a transaction-time deposit gate.","type":"boolean"},"deductionGroup":{"description":"Related facts share a deduction group so one condition is not scored twice.","type":"string"}},"required":["blocksDeposit","category","deductionGroup","detail","id","observedAt","remediation","severity","source","title"]},"PoolAuditResponse":{"type":"object","properties":{"audit":{"$ref":"#/components/schemas/PoolAudit"}},"required":["audit"]},"PoolAuditScores":{"type":"object","properties":{"safety":{"type":"number"},"economics":{"type":"number"},"confidence":{"type":"number"}},"required":["confidence","economics","safety"]},"PoolAuditSeverity":{"enum":["critical","high","info","low","medium"],"type":"string"},"PoolAuditSource":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"kind":{"enum":["contract_audit","derived","market","onchain"],"type":"string"},"observedAt":{"type":"string"},"authoritative":{"type":"boolean"}},"required":["authoritative","id","kind","label","observedAt"]},"PoolAuditStatus":{"enum":["complete","partial","stale","unavailable"],"type":"string"},"PoolAuditSummary":{"description":"Compact wire shape attached to PoolSummary and rendered by client tables.","type":"object","properties":{"schemaVersion":{"type":"string","const":"2"},"methodologyVersion":{"type":"string","const":"lpxyz-pool-audit-1.13.0"},"status":{"$ref":"#/components/schemas/PoolAuditStatus"},"verdict":{"$ref":"#/components/schemas/PoolAuditVerdict"},"scores":{"$ref":"#/components/schemas/PoolAuditScores"},"topFindings":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"id":{"description":"Stable identifier used by tests, external consumers and methodology diffs.","type":"string"},"severity":{"$ref":"#/components/schemas/PoolAuditSeverity"}},"required":["id","severity","title"]}},"checkedAt":{"type":"string"},"expiresAt":{"type":"string"}},"required":["checkedAt","expiresAt","methodologyVersion","schemaVersion","scores","status","topFindings","verdict"]},"PoolAuditVerdict":{"enum":["blocked","caution","eligible","high_risk","unverified"],"type":"string"},"PoolBinRow":{"type":"object","properties":{"binId":{"type":"number"},"price":{"description":"Quote per base (ui units) — the client converts to its USD axis.","type":"number"},"base":{"description":"Base-token amount in the bin (ui units).","type":"number"},"quote":{"description":"Quote-token amount in the bin (ui units). LP liquidity only: limit\norders are separate, in `orders`.","type":"number"},"orders":{"$ref":"#/components/schemas/BinLimitOrders","description":"Limit orders resting in the bin (DLMM pools with orders enabled)."}},"required":["base","binId","price","quote"]},"PoolBinsResult":{"type":"object","properties":{"supported":{"type":"boolean"},"activeBinId":{"type":"number"},"readWindows":{"description":"The bin id spans this read covered (inclusive). A bin inside one that is\nabsent from `bins` is empty; a bin outside all of them was never read.","type":"array","items":{"$ref":"#/components/schemas/BinSpan"}},"binRatio":{"description":"The pool's own price ratio from one bin id to the next (1 + binStep for\nDLMM), in the bins' price orientation. Authoritative: a pool with one\npopulated bin still has a grid.","type":"number"},"activePrice":{"description":"The active bin's price, quote per base, from pool state (present even\nwhen the active bin is empty and so absent from `bins`).","type":"number"},"bins":{"type":"array","items":{"$ref":"#/components/schemas/PoolBinRow"}},"model":{"enum":["full-range","ticks"],"type":"string","description":"Absent: a bin ladder (DLMM, Infinity Bin). \"ticks\": bands of one tick\nspacing, a deposit picks its own range. \"full-range\": synthetic bands\nof one pool-wide range that every deposit joins pro rata."},"spotPrice":{"description":"Tick and full-range pools: the exact price, quote per base (activePrice\nis the active band's centre).","type":"number"},"reserves":{"description":"Full-range pools: the pool's whole holdings (ui), base and quote.","type":"object","properties":{"base":{"type":"number"},"quote":{"type":"number"}},"required":["base","quote"]},"liquiditySupply":{"description":"Full-range pools: what a position's raw `liquidity` is a share of (LP\nsupply, or a DAMM v2 pool's liquidity).","type":"string"},"flipped":{"description":"Tick pools: the chart's base is the pool's token1, so its price runs\nagainst the pool's ticks (a builder's tick rounding goes the other way).","type":"boolean"},"baseMint":{"description":"DLMM: the pool's own base (token X). Its ladder is served in pool\norientation, so a caller charting the other token knows to invert.","type":"string"}},"required":["supported"]},"PoolChartResponse":{"type":"object","properties":{"candles":{"description":"`time` is unix seconds.","type":"array","items":{"$ref":"#/components/schemas/Candle"}}},"required":["candles"]},"PoolDetailsResponse":{"type":"object","properties":{"pool":{"description":"The base/quote/venue a pool address decodes to (a minimal PoolSummary).","type":"object","properties":{"address":{"description":"Pool address (on-chain).","type":"string"},"kind":{"$ref":"#/components/schemas/PoolKind","description":"Discovery kind, program/factory-verified where possible. Typed by the\nvenue vocabulary (chains.ts VENUE_KINDS) so an impossible venue/kind\ncombination fails to compile instead of shipping."},"chain":{"$ref":"#/components/schemas/ChainId","description":"Chain the pool lives on. Absent = solana (pre-EVM responses)."},"hooks":{"description":"Uniswap v4 hook address when the pool is hooked (zero address omitted).\nLets list surfaces preview the hook chip / dynamic-fee tag BEFORE the\nuser targets the pool — the server-side provide gate stays authoritative.","type":"string"},"quoteMint":{"type":"string"},"feePct":{"description":"Base fee tier in percent if known (e.g. 0.3). This is total trader fee\nfor carve-out venues and the LP fee for additive v4/Infinity models.","type":"number"},"amm":{"$ref":"#/components/schemas/Amm"},"baseMint":{"type":"string"},"identityEvidence":{"description":"Explicit on-chain identity proof: EVM canonical factory round-trip or\nsingleton PoolKey, Solana pool account owned by the venue program with\nmatching mints (solana-pool-identity.ts). Absent is unknown.","type":"object","properties":{"method":{"enum":["canonical-factory","program-owner","singleton-pool-key"],"type":"string"},"chain":{"$ref":"#/components/schemas/ChainId"},"pool":{"type":"string"},"amm":{"$ref":"#/components/schemas/Amm"},"kind":{"$ref":"#/components/schemas/PoolKind"},"tokens":{"type":"array","items":[{"type":"string"},{"type":"string"}],"minItems":2,"maxItems":2},"checkedAt":{"description":"Time the verifier returned the proof (which may come from its immutable cache).","type":"string"}},"required":["amm","chain","checkedAt","method","pool","tokens"]}},"required":["address","amm","baseMint","quoteMint"]}},"required":["pool"]},"PoolKind":{"description":"Every discovery kind across venues.","enum":["AMM v4","CLMM","CPMM","DAMM v1","DAMM v2","DLMM","Infinity Bin","Infinity CL","Splash","V2","V4"],"type":"string"},"PoolReserves":{"description":"A pool's on-chain reserve breakdown — what each side actually holds.","type":"object","properties":{"address":{"type":"string"},"amm":{"$ref":"#/components/schemas/Amm"},"kind":{"type":"string"},"base":{"$ref":"#/components/schemas/ReserveSide"},"quote":{"$ref":"#/components/schemas/ReserveSide"},"tvlUsd":{"description":"Tracked valuation for EVM; priced reserve sum for Solana.","type":"number"},"trackedTvlUsd":{"type":"number"},"tvlUsdUntracked":{"type":"number"},"sellDepth5PctUsd":{"description":"Quote USD available before the base spot price falls 5%, excluding token taxes.","type":"number"},"concentrated":{"description":"True for concentrated pools — these are total reserves across all\nranges, not the tradeable depth near the current price.","type":"boolean"},"spotUiPrice":{"description":"Current pool price, quote-per-base UI units. Set for concentrated pools,\nwhere the vault-balance ratio is NOT a deposit ratio — range math needs\nthe live tick price instead.","type":"number"},"grid":{"description":"The pool's deposit grid, quote per base: every bin or initializable\ntick edge is `anchor × ratio^n`. The chart snaps band edges to it.","type":"object","properties":{"anchor":{"type":"number"},"ratio":{"type":"number"},"unit":{"enum":["bin","tick"],"type":"string"}},"required":["anchor","ratio","unit"]},"lpFeeShare":{"description":"Live fee split carried back by the same bounded state read.","type":"number"},"lpFeeShareSource":{"$ref":"#/components/schemas/LpFeeShareSource"},"lpFeeShareMethod":{"$ref":"#/components/schemas/LpFeeShareMethod"},"available":{"description":"Honest status: false + note when no reader exists for this pool type.\nNamed `available` (not `ok`) so it survives the apiOk envelope spread\nwithout clobbering the `{ ok: true }` response discriminator.","type":"boolean"},"complete":{"description":"All supported fields resolved. v4 can be complete with unavailable vaults.","type":"boolean"},"note":{"type":"string"}},"required":["address","amm","available","base","quote"]},"PoolSummary":{"type":"object","properties":{"address":{"description":"Pool address (on-chain).","type":"string"},"amm":{"$ref":"#/components/schemas/Amm"},"chain":{"$ref":"#/components/schemas/ChainId","description":"Chain the pool lives on. Absent = solana (pre-EVM responses)."},"kind":{"$ref":"#/components/schemas/PoolKind","description":"Discovery kind, program/factory-verified where possible. Typed by the\nvenue vocabulary (chains.ts VENUE_KINDS) so an impossible venue/kind\ncombination fails to compile instead of shipping."},"baseMint":{"type":"string"},"quoteMint":{"type":"string"},"identityEvidence":{"description":"Explicit on-chain identity proof: EVM canonical factory round-trip or\nsingleton PoolKey, Solana pool account owned by the venue program with\nmatching mints (solana-pool-identity.ts). Absent is unknown.","type":"object","properties":{"method":{"enum":["canonical-factory","program-owner","singleton-pool-key"],"type":"string"},"chain":{"$ref":"#/components/schemas/ChainId"},"pool":{"type":"string"},"amm":{"$ref":"#/components/schemas/Amm"},"kind":{"$ref":"#/components/schemas/PoolKind"},"tokens":{"type":"array","items":[{"type":"string"},{"type":"string"}],"minItems":2,"maxItems":2},"checkedAt":{"description":"Time the verifier returned the proof (which may come from its immutable cache).","type":"string"}},"required":["amm","chain","checkedAt","method","pool","tokens"]},"tvlUsd":{"description":"USD TVL if known.","type":"number"},"tvlApprox":{"description":"True when `tvlUsd` is an indexer approximation rather than an on-chain\nread. Codex's pair `liquidity` counts only the BASE side's USD value, so\napproximate TVLs understate balanced pools by up to ~2x — fine as a\nconservative depth hint, NOT fine as an APR / Vol-TVL denominator (the\nunderstatement inflates those). UI derives no ratios from approx TVL.","type":"boolean"},"liquidityEvidence":{"description":"EVM reserve valuation and price independence, retained with the audit.","$ref":"#/components/schemas/LiquidityEvidence"},"volume24hUsd":{"description":"24h volume USD if known.","type":"number"},"volume30mUsd":{"description":"Shorter-window volume USD (Gecko m30/h1/h6), if known. Powers the\nmomentum-aware \"projected\" fee/APR ranking — a pool whose recent-window\nrun-rate is accelerating scores above one coasting on a stale 24h number.","type":"number"},"volume1hUsd":{"type":"number"},"volume6hUsd":{"type":"number"},"feePct":{"description":"Base fee tier in percent if known (e.g. 0.3). This is total trader fee\nfor carve-out venues and the LP fee for additive v4/Infinity models.","type":"number"},"lpFeeShare":{"description":"Fraction of the pool's advertised trade fee credited to LPs (0..1).\nMutable protocol settings are read on-chain and kept out of pool_stats.","type":"number"},"lpFeeShareSource":{"$ref":"#/components/schemas/LpFeeShareSource","description":"Provenance for lpFeeShare; absent alongside it means documented fallback."},"lpFeeShareMethod":{"$ref":"#/components/schemas/LpFeeShareMethod"},"lpBurnPct":{"description":"% of the LP supply burned (0..100, ST) — high = liquidity can't be\npulled. Meaningful for LP-mint (CP) pools; absent elsewhere.","type":"number"},"lpLocks":{"description":"Provider LP custody attributed to this exact V2 pool; absent is unknown.","$ref":"#/components/schemas/LpLockEvidence"},"deployer":{"description":"Wallet that deployed the pool (ST), for the inspector's deployer row.","type":"string"},"hooks":{"description":"Uniswap v4 hook address when the pool is hooked (zero address omitted).\nLets list surfaces preview the hook chip / dynamic-fee tag BEFORE the\nuser targets the pool — the server-side provide gate stays authoritative.","type":"string"},"farm":{"description":"Live FarmStream reward incentives on this pool. Kept SEPARATE from the\npool's fee numbers and never summed into them — same rule as\n`emissionsAprPct` on positions: fees and incentives are different\npromises with different risk, and a blended number hides which is which.\n\n`aprPct` is present only when the reward token prices AND the pool has\nTVL to divide by; otherwise `symbols` alone lets the UI say \"+ rewards\"\nhonestly instead of inventing a rate.","type":"object","properties":{"aprPct":{"type":"number"},"symbols":{"type":"array","items":{"type":"string"}}},"required":["symbols"]},"risk":{"description":"Deposit-safety verdict from `stampPoolRisk`. Solana token resolution\nstamps every displayed row. `blocked` mirrors the server build gate so\nthe UI can disable the action before submission.","type":"object","properties":{"checked":{"description":"The token-control/hook checks ran, including when they found nothing.","type":"boolean"},"blocked":{"type":"boolean"},"danger":{"description":"Seizure-class reasons (the block tier).","type":"array","items":{"type":"string"}},"warn":{"description":"Pullable/dilution tier — badge + confirm, still depositable.","type":"array","items":{"type":"string"}},"verification":{"description":"Coverage state for the shared EVM safety policy. Pending means a\nprovider assessment is in flight; unverified means neither GoPlus nor a\ncurrent Serialized result covered every non-native asset.","enum":["pending","unverified","verified"],"type":"string"},"acknowledgement":{"description":"Evidence-bound acknowledgement accepted by the server build gate for\nthis exact warning/unverified snapshot. A changed snapshot re-arms it.","type":"string"}}},"audit":{"description":"Versioned LP.xyz pool audit derived from attributed evidence.","$ref":"#/components/schemas/PoolAuditSummary"},"createdAt":{"description":"Pool creation time (ISO string) if known — drives the Age column.","type":"string"},"priceChange24hPct":{"description":"24h price change, percent (e.g. -3.2), if known.","type":"number"},"txns24h":{"description":"Total swaps in the last 24h (buys + sells), if known.","type":"number"},"txns1h":{"description":"Swaps in the last 1h (buys + sells), if known.","type":"number"},"pairName":{"description":"Display pair label from the discovery source (e.g. \"WIF / SOL\"), if known.\nOnly populated by the account-wide hot/new-pools feeds, which have no mint\ncontext to resolve names from otherwise.","type":"string"},"baseSymbol":{"description":"Per-side display metadata from the discovery source, best-effort — the\ndiscovery tables' pair cells (icons + \"BASE / QUOTE\") render from these.","type":"string"},"quoteSymbol":{"type":"string"},"baseLogo":{"type":"string"},"quoteLogo":{"type":"string"}},"required":["address","amm","baseMint","quoteMint"]},"PositionAnalytics":{"description":"Position analytics computed against the snapshot baseline. \"Since first\ntracked\" — the baseline is the first time lp.xyz saw the position, not its\ntrue on-chain open (we'd need a tx indexer for that).","type":"object","properties":{"flowStatus":{"description":"Whether finalized, priced lifecycle coverage enables EVM return figures.","enum":["pending","reconciled","untracked"],"type":"string"},"asOf":{"description":"Finalized accounting time; present with reconciled EVM results.","type":"string"},"capitalUsd":{"description":"Entry NAV plus subsequent gross contributions; denominator for PnL %.","type":"number"},"pnlCostScope":{"description":"LP return excludes wallet gas and platform/transfer execution costs.","const":"before-transaction-costs","type":"string"},"firstSeenAt":{"description":"ISO timestamp of the first snapshot — the baseline date.","type":"string"},"daysTracked":{"description":"Days since first tracked (fractional).","type":"number"},"entryValueUsd":{"description":"Deposited value at first sight, USD.","type":"number"},"ilPct":{"description":"Impermanent loss vs. holding the entry tokens, as a percent (negative =\nworse off than holding). Only when entry amounts + both prices resolve.","type":"number"},"earnedAprPct":{"description":"Annualized fee APR earned on this position since first tracked, percent.\nfeesUsd ÷ value ÷ daysTracked × 365. Only when fees + value + time exist.","type":"number"},"pnlUsd":{"description":"Net PnL since first tracked, USD: (current value + unclaimed fees + priced\nwithdrawals + claimed fees) − (entry value + priced deposits). Deposit /\nwithdrawal adjustments come from the priced position_events ledger, which\nonly carries USD for events recorded from ship-date on — older adds/removes\nmay be absent. Withheld for EVM until full canonical flow coverage exists.","type":"number"},"pnlPct":{"description":"Net PnL as a percent of entry value.","type":"number"},"pnlSol":{"description":"Net PnL denominated in SOL (USD PnL ÷ current SOL price), for LPs who think\nin SOL. Only when the SOL price resolves.","type":"number"},"claimedFeesUsd":{"description":"Claimed fees since first tracked, USD (from priced harvest events).","type":"number"},"emissionsAprPct":{"description":"Annualized emissions APR (ve(3,3) gauge rewards) — kept SEPARATE from\nearnedAprPct (fee APR); the two are never silently summed.","type":"number"},"gasSpentUsd":{"description":"Separately observed transaction gas, USD. Canonical LP return is explicitly\nbefore transaction costs; this field must never imply complete gas coverage.","type":"number"}},"required":["daysTracked","firstSeenAt"]},"PositionBin":{"description":"One bin of a concentrated (DLMM) position, UI-scaled, for charting.","type":"object","properties":{"binId":{"type":"number"},"price":{"description":"Price (quote per base).","type":"number"},"xAmount":{"description":"This position's deposited amount per side in this bin (UI units).","type":"number"},"yAmount":{"type":"number"}},"required":["binId","price","xAmount","yAmount"]},"PositionsBatchResponse":{"type":"object","properties":{"owners":{"description":"Keyed by the owner ref exactly as passed in `owners`. Each `continuation` is a /v1 path.","type":"object","additionalProperties":{"$ref":"#/components/schemas/PositionsResult"}}},"required":["owners"]},"PositionSource":{"type":"object","properties":{"amm":{"$ref":"#/components/schemas/Amm"},"ok":{"type":"boolean"},"complete":{"description":"False when discovery, a cap or hydration omitted potentially owned rows.\nAbsent preserves the complete-read contract of existing readers.","type":"boolean"},"pending":{"description":"Discovery has queued work or newly found rows for the next read.","type":"boolean"},"hasMore":{"description":"More rows are available in this read snapshot.","type":"boolean"},"note":{"type":"string"}},"required":["amm","ok"]},"PositionsResult":{"type":"object","properties":{"continuation":{"description":"A bounded next page for this owner and snapshot.","type":"string"},"owner":{"type":"string"},"positions":{"type":"array","items":{"$ref":"#/components/schemas/PositionView"}},"sources":{"description":"Per-AMM read status — so the UI can show \"PumpSwap: not yet supported\".","type":"array","items":{"$ref":"#/components/schemas/PositionSource"}},"tokens":{"description":"Display metadata for the positions' pair tokens, keyed by chain-scoped\ntoken ref (bare mint on Solana, \"<chain>:<0x…>\" on EVM) — the records\n`/api/token/meta` serves. Best-effort: a token missing here resolves\nthrough that route instead.","type":"object","additionalProperties":{"type":"object","properties":{"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"number"},"logo":{"description":"Logo URI if known.","type":"string"}}}}},"required":["owner","positions","sources"]},"PositionView":{"description":"A normalized LP position owned by a wallet, across any of the four AMMs.","type":"object","properties":{"id":{"description":"Stable id for the row (NFT mint for NFT-based AMMs, Uniswap tokenId on\nEVM, else pool+owner). Uniswap tokenIds are small ints that repeat across\nchains — (chain, id) is the unique key, never id alone.","type":"string"},"amm":{"$ref":"#/components/schemas/Amm"},"chain":{"$ref":"#/components/schemas/ChainId","description":"Chain the position lives on. Absent = solana (pre-EVM responses)."},"kind":{"description":"\"CLMM\" | \"DLMM\" | \"CPMM\" etc.","type":"string"},"pool":{"description":"Pool this position is in.","type":"string"},"tokenA":{"description":"Token mints in the pool, if known.","type":"string"},"tokenB":{"type":"string"},"inRange":{"description":"True if the position is currently earning fees (in price range).","type":"boolean"},"outOfRangeSide":{"description":"Which side of the band the live price sits on while OUT of range — so the\nUI can say \"price ran above you\" vs \"price fell below you\" instead of a\nbare amber dot. Set only when `inRange === false`, from the same\nquote-per-base numbers that built lowerPrice/upperPrice, so the two can't\ndisagree. \"above\": price > upper, position is all quote. \"below\": price <\nlower, all base. Unset in range, on full-range models, or unpriced.","enum":["above","below"],"type":"string"},"feeOwedA":{"description":"Raw fees owed per side (base units), if the AMM exposes them.","type":"string"},"feeOwedB":{"type":"string"},"liquidity":{"description":"Liquidity magnitude (raw), for sorting/display.","type":"string"},"valueUsd":{"description":"Deposited liquidity value in USD, when amounts + prices resolve.\nBest-effort — only set for AMMs whose reader emits per-side amounts.","type":"number"},"feesUsd":{"description":"Unclaimed fees in USD, when feeOwed + decimals + prices resolve.","type":"number"},"lowerTick":{"description":"Tick bounds (Uniswap-v3-style CLMMs only) — display/reposition metadata;\nlowerPrice/upperPrice stay the cross-AMM range representation.","type":"number"},"upperTick":{"type":"number"},"emissions":{"description":"Gauge-based emissions rewards:\na staked position earns emissions INSTEAD of swap fees — fee APR is 0 and\nthe fees block must render rewards, never pool-level fee numbers.","type":"object","properties":{"stakedInGauge":{"type":"boolean"},"rewards":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":"string"},"amountUi":{"type":"number"},"usd":{"type":"number"}},"required":["address","amountUi","symbol"]}},"emissionsAprPct":{"type":"number"}},"required":["rewards","stakedInGauge"]},"bins":{"description":"Per-bin distribution (Meteora DLMM only) — drives the bin chart.","type":"array","items":{"$ref":"#/components/schemas/PositionBin"}},"activeBinId":{"description":"The pool's active bin id at read time, for marking \"current price\" on the\nbin chart (DLMM only).","type":"number"},"lowerPrice":{"description":"Position's price range in USD per base token (the unit the TradingView\nchart shows). Set for concentrated positions whose readers expose range +\nwhose quote token has a USD price; lets the Portfolio chart draw a band on\nthe existing pool chart. Unset on full-range / unpriced positions.","type":"number"},"upperPrice":{"type":"number"},"baseAmountUi":{"description":"Deposited amounts (UI units, NOT base units) on each side. Drives the\nPortfolio reposition flow: after a 100% remove, the wallet gets these back\nand they're the inputs to the re-add at the new range. Set whenever\nPricingParts exposes amountA/B (Orca / Raydium CLMM / Meteora DLMM today).","type":"number"},"quoteAmountUi":{"type":"number"},"baseMint":{"description":"Mint of the base token (the non-WSOL/USDC side) — set alongside the\nbaseAmount/quoteAmount split so the reposition payload can be assembled\nwithout re-running the heuristic on the client.","type":"string"},"quoteMint":{"type":"string"},"baseIsNative":{"description":"True when that leg is the chain's RAW NATIVE asset — a Uniswap v4 pool\nwhose currency is `0x0`. The mint fields above deliberately carry the\nWRAPPED address so orientation, logos and USD pricing keep working\n(value-identical), but anything that SPENDS or shows a wallet balance must\nuse the native asset instead: the wallet's WETH balance is a different,\nusually far smaller, number than its ETH balance (LPXY-72).","type":"boolean"},"quoteIsNative":{"type":"boolean"},"quoteUsdPrice":{"description":"USD price of the quote token at read time. Lets the client convert a\nUSD-per-base range (dragged on the chart) back to the quote-per-base units\nthe add routes expect. The quote's own market price, never one implied\nfrom the pool's price.","type":"number"},"poolPriceUsd":{"description":"The pool's own current price (active bin / tick), USD per base.","type":"number"},"marketPriceUsd":{"description":"The base token's market price, USD (what the chart's candles show).","type":"number"},"poolDivergence":{"description":"poolPriceUsd / marketPriceUsd − 1. Large when the pool has drifted from\nthe market (nobody arbitrages it), in which case \"in range\" on-chain does\nnot mean the position trades at the market price.","type":"number"},"marketSide":{"description":"Where the MARKET price sits against the band: \"above\" = over the upper\nbound, \"below\" = under the lower bound (same sense as outOfRangeSide).","enum":["above","below","in"],"type":"string"},"label":{"description":"User-set label so they can tell their walls apart in Portfolio. Off-chain\nonly; stored in Supabase position_labels. Empty/unset means no label.","type":"string"},"ladderId":{"description":"Shaped-ladder membership (Uniswap): N positions minted together as one\nSpot/Curve/BidAsk ladder. Set server-side from position_ladders; members\nsharing a ladderId fold into ONE panel row (positionGroupKey). Absent =\na standalone position (also the honest fallback when the DB row is\nmissing — members then render individually).","type":"string"},"shape":{"type":"string"},"binCount":{"type":"number"},"ladderMemberIds":{"description":"Client-side only (groupPositions): every member tokenId when this row is\na MERGED ladder — group remove/harvest send these as one batch tx.","type":"array","items":{"type":"string"}},"analytics":{"$ref":"#/components/schemas/PositionAnalytics","description":"Analytics vs. the first-tracked baseline (from the snapshot store).\nAll \"since first tracked\", never the true on-chain open."}},"required":["amm","id","kind","pool"]},"PriceHistoryResponse":{"description":"Response envelope — imported by the client instead of re-typed at the fetch.","type":"object","properties":{"points":{"description":"The series this route serves. `PricePoint` is owned by the chart that renders\nit; the route had an independently-declared `{t, price}` that happened to\nmatch, so a field rename on either side would have compiled fine and produced\na blank chart. One declaration now.","type":"array","items":{"$ref":"#/components/schemas/PricePoint"}}},"required":["points"]},"PricePoint":{"type":"object","properties":{"t":{"description":"Epoch ms.","type":"number"},"price":{"type":"number"}},"required":["price","t"]},"PrivilegeDifferential":{"type":"object","properties":{"checkedAt":{"type":"string"},"supported":{"description":"False when the lane could not be entered at all; reason says which gap.","type":"boolean"},"unsupportedReason":{"type":"string"},"error":{"type":"string"},"step":{"$ref":"#/components/schemas/PrivilegeStep"},"blockNumber":{"type":"string"},"ownerBefore":{"description":"null = readable and renounced; undefined = no owner getter at all.","type":["null","string"]},"candidates":{"type":"array","items":{"$ref":"#/components/schemas/AdminCandidate"}},"attempts":{"type":"number"},"truncated":{"type":"boolean"},"findings":{"type":"array","items":{"$ref":"#/components/schemas/PrivilegeFinding"}},"fields":{"$ref":"#/components/schemas/PrivilegeFields"}},"required":["candidates","checkedAt","fields","findings","supported"]},"PrivilegeEffect":{"description":"What a single (candidate, selector, shape) cell demonstrated.\n- `pool_balance_seized` — the pool's balance went DOWN. This is the harm an\n  LP cares about: their side of the pair can be taken.\n- `pool_balance_written` — the pool's balance went UP, not from minting and\n  not from the token contract's own pile, so an existing balance elsewhere\n  was rewritten.\n- `pool_minted` — the pool's balance went up and supply rose with it. That\n  is minting, which `is_mintable` already covers; it is NOT balance editing.\n- `pool_funded_from_treasury` — the pool's balance went up by what the token\n  contract's own balance lost. That is a swap-back / liquify shipping the tax\n  pile into the pair: an ordinary transfer, and one of the two false-positive\n  classes the first live run on the `trusted` stratum turned up.\n- `caller_credited` — the caller's own balance rose without a supply rise.\n- `caller_minted` — the caller's balance rose together with supply.\n- `ownership_taken` — `owner()` went from renounced/zero to a real address.\n- `ledger_redirected` — the pool's, the caller's and the contract's own\n  balances AND total supply all moved the same way at once. Nobody edits four\n  unrelated balances with one call; what that call did was point the token's\n  accounting at a different contract. Tether's `deprecate(address)` is the\n  live example: after it, `balanceOf` forwards to the address passed in, and\n  handing it a Uniswap pair makes the whole ledger read as near-zero. Real\n  power, but the numbers describe a different ledger, so they set no field.","enum":["caller_credited","caller_minted","ledger_redirected","ownership_taken","pool_balance_seized","pool_balance_written","pool_funded_from_treasury","pool_minted"],"type":"string"},"PrivilegeFields":{"type":"object","properties":{"hidden_owner":{"$ref":"#/components/schemas/TriState"},"can_take_back_ownership":{"$ref":"#/components/schemas/TriState"},"owner_change_balance":{"$ref":"#/components/schemas/TriState"}},"required":["can_take_back_ownership","hidden_owner","owner_change_balance"]},"PrivilegeFinding":{"type":"object","properties":{"candidate":{"type":"string"},"candidateSource":{"$ref":"#/components/schemas/AdminCandidateSource"},"candidateDetail":{"type":"string"},"selector":{"type":"string"},"shape":{"type":"number"},"shapeLabel":{"type":"string"},"poolDelta":{"type":"string"},"callerDelta":{"type":"string"},"supplyDelta":{"type":"string"},"treasuryDelta":{"type":"string"},"ownerAfter":{"type":"string"},"effects":{"type":"array","items":{"$ref":"#/components/schemas/PrivilegeEffect"}},"differential":{"description":"`privileged` = the stranger did NOT reproduce it. That is the finding.","enum":["privileged","public"],"type":"string"},"evidence":{"type":"string"}},"required":["callerDelta","candidate","candidateDetail","candidateSource","differential","effects","evidence","poolDelta","selector","shape","shapeLabel","supplyDelta","treasuryDelta"]},"PrivilegeStep":{"enum":["empty_pool","no_balance_getter","no_candidates","no_code","ok"],"type":"string"},"ProvenancedTokenControls":{"description":"Controls and the provenance that makes them readable, as one value.\n\nThey are returned together and never apart on purpose. A bare\n`EvmTokenControls` is exactly what `assessPoolSafetyPolicy`,\n`controlReviewReasons` and `bytecodeReviewBasis` accept, and in those the `false`\nthat means \"no native detector for this field\" is indistinguishable from the\n`false` that means \"a detector looked and found nothing\". Handing the pair\nout as one type means a call site cannot reach the gate-shaped half without\nan explicit, greppable `.controls`, with the record of what is actually\nknown sitting right beside it.","type":"object","properties":{"fields":{"type":"object","properties":{"is_honeypot":{"$ref":"#/components/schemas/TriState"},"cannot_buy":{"$ref":"#/components/schemas/TriState"},"cannot_sell_all":{"$ref":"#/components/schemas/TriState"},"buy_tax_over_10":{"$ref":"#/components/schemas/TriState"},"sell_tax_over_10":{"$ref":"#/components/schemas/TriState"},"transfer_tax_over_10":{"$ref":"#/components/schemas/TriState"},"is_mintable":{"$ref":"#/components/schemas/TriState"},"owner_change_balance":{"$ref":"#/components/schemas/TriState"},"hidden_owner":{"$ref":"#/components/schemas/TriState"},"can_take_back_ownership":{"$ref":"#/components/schemas/TriState"},"selfdestruct":{"$ref":"#/components/schemas/TriState"},"is_open_source":{"$ref":"#/components/schemas/TriState"},"is_proxy":{"$ref":"#/components/schemas/TriState"},"transfer_pausable":{"$ref":"#/components/schemas/TriState"},"is_blacklisted":{"$ref":"#/components/schemas/TriState"}},"required":["buy_tax_over_10","can_take_back_ownership","cannot_buy","cannot_sell_all","hidden_owner","is_blacklisted","is_honeypot","is_mintable","is_open_source","is_proxy","owner_change_balance","selfdestruct","sell_tax_over_10","transfer_pausable","transfer_tax_over_10"]},"controls":{"$ref":"#/components/schemas/EvmTokenControls"},"provenance":{"type":"object","properties":{"is_honeypot":{"$ref":"#/components/schemas/FieldProvenance"},"cannot_buy":{"$ref":"#/components/schemas/FieldProvenance"},"cannot_sell_all":{"$ref":"#/components/schemas/FieldProvenance"},"buy_tax_over_10":{"$ref":"#/components/schemas/FieldProvenance"},"sell_tax_over_10":{"$ref":"#/components/schemas/FieldProvenance"},"transfer_tax_over_10":{"$ref":"#/components/schemas/FieldProvenance"},"is_mintable":{"$ref":"#/components/schemas/FieldProvenance"},"owner_change_balance":{"$ref":"#/components/schemas/FieldProvenance"},"hidden_owner":{"$ref":"#/components/schemas/FieldProvenance"},"can_take_back_ownership":{"$ref":"#/components/schemas/FieldProvenance"},"selfdestruct":{"$ref":"#/components/schemas/FieldProvenance"},"is_open_source":{"$ref":"#/components/schemas/FieldProvenance"},"is_proxy":{"$ref":"#/components/schemas/FieldProvenance"},"transfer_pausable":{"$ref":"#/components/schemas/FieldProvenance"},"is_blacklisted":{"$ref":"#/components/schemas/FieldProvenance"}},"required":["buy_tax_over_10","can_take_back_ownership","cannot_buy","cannot_sell_all","hidden_owner","is_blacklisted","is_honeypot","is_mintable","is_open_source","is_proxy","owner_change_balance","selfdestruct","sell_tax_over_10","transfer_pausable","transfer_tax_over_10"]}},"required":["controls","fields","provenance"]},"ProvenanceState":{"description":"Per-field provenance — the answer to \"why does this field read the way it\ndoes?\".\n\n`EvmTokenControls` is a record of plain booleans, so it cannot express\n\"unknown\": a native producer that emits its tri-state answers into that\nshape turns every field it could not detect into `false`, and a token nobody\nlooked at manufactures itself a clean bill of health. Provenance is the\nrecord that survives that coercion — `refuted` means a detector looked and\nsaid no, `unknown` means nothing looked or nothing could tell. Absence is\nnever evidence of safety.","enum":["proven","refuted","unknown"],"type":"string"},"ReserveSide":{"description":"One side of a pool's reserves (base or quote).","type":"object","properties":{"mint":{"type":"string"},"amount":{"description":"UI amount (raw / 10**decimals).","type":"number"},"decimals":{"type":"number"},"usd":{"description":"USD value of this side, if a price resolved.","type":"number"},"priceProvenance":{"enum":["independent","pool-derived"],"type":"string"},"symbol":{"description":"Token symbol/logo for display, best-effort.","type":"string"},"logo":{"type":"string"}},"required":["amount","decimals","mint"]},"RevertStep":{"enum":["buy_swap","buy_transfer_in","buy_zero_output","sell_swap","sell_tax_short","sell_transfer"],"type":"string"},"RiskInfo":{"description":"Token safety signal from Solana Tracker — informational, never blocking.","type":"object","properties":{"score":{"description":"0 (clean) … 10 (maximally risky), ST's composite score.","type":"number"},"rugged":{"description":"ST flagged this token as rugged.","type":"boolean"},"warnings":{"description":"Named warnings (e.g. \"Top 10 holders high\", \"Mint authority enabled\").","type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"level":{"enum":["danger","info","warning"],"type":"string"}},"required":["level","name"]}}},"required":["rugged","warnings"]},"SellSimulation":{"type":"object","properties":{"supported":{"description":"False = no exit lane reached this pool; nothing else is claimed, and\nunsupported is `unknown`, never \"clean\".","type":"boolean"},"unsupportedReason":{"$ref":"#/components/schemas/ExitProbeUnsupportedReason","description":"Which gap made it unsupported. Diagnostic only — it never reaches the\nacknowledgement digest, because `simulatePoolExit` drops unsupported and\nerrored results before policy sees them."},"buyOk":{"type":"boolean"},"sellOk":{"type":"boolean"},"transferOk":{"description":"Plain transfer of 10% of the bought amount to a fresh address — the\nsmall leg of the two-amount transfer probe.","type":"boolean"},"roundTripLossPct":{"description":"1 − quoteBack / quoteIn: pool fees ×2, price impact ×2 and both taxes.\nThe gross number — `venueFeeLossPct` says how much of it the pool's own\nposted fee accounts for, and the honeypot test nets that out.","type":"number"},"venueFeeLossPct":{"description":"The share of `roundTripLossPct` the POOL'S OWN posted fee already\nexplains: 1 − (1 − buyFee)(1 − sellFee), charged once per leg. Reported\nbeside the gross loss so the two are readable apart — a 99.7% round trip\nthrough a 95%-fee pool and a 99.7% round trip through a 0.3%-fee pool\nare not the same finding. Concentrated lanes only; the v2 lane's fee is\ninferred from its ladder rather than posted, so it is not netted out.","type":"number"},"buyTaxPct":{"description":"What the buy delivered short of what the POOL says it sent. On v2 the\nbenchmark is the constant-product expectation at the cleared fee; on v3\nand v4 it is the venue's own reported delta, so the pool fee is already\nout of it and what remains is token tax.","type":"number"},"sellTaxPct":{"description":"The sell-leg shortfall. On the concentrated lanes (v3, v4) the loss can\nland in EITHER place — the token taxing the payment into the pool, or\nthe quote arriving short — so the larger of the two is reported.","type":"number"},"callbackSelector":{"$ref":"#/components/schemas/Hex","description":"v3: which callback selector the pool used, so a fork's rename is\nobserved rather than assumed (Uniswap 0xfa461e33, PancakeSwap\n0x23a69e75). Absent on the v2 lane."},"transferTaxPct":{"description":"Wallet-to-wallet tax, measured at two amounts and reported as the larger\nshortfall: an integer-division fee rounds to zero on a small enough\ntransfer, so one dust probe reads 0% on a taxed token. Undefined when no\nleg delivered anything (a blocked transfer is `transferOk: false`, not a\n100% tax).","type":"number"},"buyBlocksContracts":{"description":"The buy never cleared for the probe (which has code) but DID clear for a\ncode-free address: the token blocks contracts, not everyone. Only set\nwhen `buyOk === false`.","type":"boolean"},"buyGas":{"description":"Gas burnt by each leg, so a gas bomb is visible rather than reading as an\nordinary revert. Whole-leg figures: our balance reads and the failed fee\nrungs are included.","type":"string"},"sellGas":{"type":"string"},"revertStep":{"$ref":"#/components/schemas/RevertStep"},"revertReason":{"description":"Decoded revert reason of the failing step, when the contract gave one.","type":"string"},"honeypot":{"description":"buyOk && (sell or transfer failed, or loss net of the pool's own fee\n≥ HONEYPOT_LOSS_THRESHOLD_PCT).","type":"boolean"},"sameBlockRoundTrip":{"description":"The buy and the sell happened in ONE block, from ONE address.\n\nRecorded on every interpreted probe result because it is the standing\ncaveat on `honeypot`: a token with a \"no same-block sell\" anti-sniper rule\nfails this round trip and trades fine a block later. The deposit gate's\nconflict carve-out reads it (`NativeControlContext`), so the reason a\nnative honeypot may not block on its own travels with the verdict instead\nof living only in a comment.","const":true,"type":"boolean"},"error":{"type":"string"},"checkedAt":{"type":"string"},"blockNumber":{"type":"string"}},"required":["checkedAt","supported"]},"SerializedPoolEvidence":{"type":"object","properties":{"status":{"enum":["audited","pending","unavailable"],"type":"string"},"pool":{"type":"object","properties":{"id":{"type":"string"},"hookAddress":{"type":["null","string"]},"isPrimary":{"type":"boolean"}}},"hookAudit":{"type":"object","properties":{"address":{"type":"string"},"isSafe":{"type":"boolean"},"description":{"type":"string"}}},"isHookSafe":{"type":["null","boolean"]},"auditSystemVersion":{"type":"string"},"latestAuditSystemVersion":{"type":"string"},"observedAt":{"type":"string"},"receivedAt":{"description":"Cache receipt time, not the provider's original audit generation time.","type":"string"}},"required":["observedAt","status"]},"SingleSide":{"description":"A single-sided wall's side — Side minus \"both\" (bid OR ask, never paired).","enum":["ask","bid"],"type":"string"},"StateField":{"enum":["paused","poolBlacklisted","tradingClosed"],"type":"string"},"StStatsWindow":{"description":"One `/stats/{token}` window — buy/sell dollar split + participation.","type":"object","properties":{"volumeUsd":{"description":"Total / buy-side / sell-side volume in USD for the window.","type":"number"},"buyVolumeUsd":{"type":"number"},"sellVolumeUsd":{"type":"number"},"buys":{"description":"Buy / sell transaction counts.","type":"number"},"sells":{"type":"number"},"wallets":{"description":"Distinct wallets that traded in the window.","type":"number"},"priceChangePct":{"type":"number"}},"required":["buyVolumeUsd","buys","sellVolumeUsd","sells","volumeUsd"]},"StTopHolder":{"description":"One row of `/tokens/{token}/holders/top` (top 20 by balance).","type":"object","properties":{"address":{"type":"string"},"amount":{"type":"number"},"percentage":{"description":"% of supply held.","type":"number"},"usd":{"type":"number"}},"required":["address","amount","percentage"]},"StTopTrader":{"description":"One `/v2/pnl/tokens/{token}/traders` row — a wallet's PnL on this token.","type":"object","properties":{"wallet":{"type":"string"},"totalUsd":{"description":"Realized + unrealized PnL on this token, USD.","type":"number"},"realizedUsd":{"type":"number"},"unrealizedUsd":{"type":"number"},"investedUsd":{"type":"number"},"winPct":{"description":"Not reported per token by PnL v2; kept optional for the row shape.","type":"number"}},"required":["investedUsd","realizedUsd","totalUsd","unrealizedUsd","wallet"]},"SwapPlatformFeeDisclosure":{"description":"Why an EVM swap's platform fee is (or isn't) being charged on this quote.","type":"object","properties":{"bps":{"description":"The scheduled rate, whether or not it is collected on this quote.","type":"number"},"side":{"description":"Which leg the fee comes off: the native input carve-out, or the output.","enum":["input","output"],"type":"string"},"collected":{"description":"True only when the build will actually send a fee transfer.","type":"boolean"},"feeUsd":{"description":"USD size of the fee when it could be priced.","type":"number"},"reason":{"description":"Why it isn't collected. `below_floor` = the fee is worth less than ~3× the\ngas its own transfer burns; `treasury_unset` = no PLATFORM_TREASURY_EVM;\n`unpriced`/`gas_unavailable` = we couldn't check the floor and won't\ncharge blind; `output_not_collectable` = an output the treasury can't hold.","enum":["below_floor","dust","gas_unavailable","output_not_collectable","treasury_unset","unpriced"],"type":"string"},"floorUsd":{"description":"The floor the fee was measured against, USD, when one was computed.","type":"number"}},"required":["bps","collected","side"]},"SwapQuoteResponse":{"description":"GET /v1/quotes/swap. `raw` is the engine's own quote object and must be\npassed back unchanged to POST /v1/build/swap on Solana.\n\nWhich fee fields are present depends on the chain: an EVM quote always\ncarries `platformFee` (why the fee is or isn't charged); a Solana quote\nalways carries `solFeeLamports` and `solFeeAddOnLamports`, and the add-on\nis NOT inside the quoted amounts. The route pins each branch to the\nstricter types below, so those guarantees are enforced, not just written.","allOf":[{"type":"object","properties":{"raw":{"description":"Engine-specific detail. Solana: Jupiter's opaque quote object, passed back\nto the build call verbatim (Jupiter signs over it). EVM: the resolved\n`EvmSwapPlan`, which is DISPLAY-ONLY — the EVM build route re-runs the\nwhole routing pipeline server-side rather than trusting a client-supplied\nroute or minimum-out."},"chain":{"$ref":"#/components/schemas/ChainId"},"route":{"description":"Human route, one entry per leg (for \"via Orca → Meteora\" display).","type":"array","items":{"$ref":"#/components/schemas/SwapRouteStep"}},"inputMint":{"type":"string"},"outputMint":{"type":"string"},"inAmount":{"description":"Raw base units (string) — divide by 10**decimals for a UI amount.","type":"string"},"outAmount":{"type":"string"},"otherAmountThreshold":{"description":"Worst-case out after slippage (raw base units).","type":"string"},"slippageBps":{"type":"number"},"priceImpactPct":{"description":"Price impact as a fraction (e.g. \"0.0021\" = 0.21%).","type":"string"},"swapUsdValue":{"description":"Best-effort USD value of the swap, when the engine priced it.","type":"string"},"platformFee":{"$ref":"#/components/schemas/SwapPlatformFeeDisclosure","description":"EVM only: why `platformFeeBps` reads what it reads. The fee becomes a\ndistinct call inside the atomic transaction, so it is DECIDED before the quote is returned (an\nunset treasury, a fee under the incremental-gas floor, an output the\ntreasury can't hold) — and a row that claims a fee the build won't send is\na lie the user can't check. Present on every EVM quote."},"routeCost":{"$ref":"#/components/schemas/SwapRouteCost","description":"EVM only: the all-in cost of the chosen route — its advertised LP/pool fee\nand the output actually lost against the pool's pre-fee mid price. See\nlib/swap/route-cost.ts; `priceImpactPct` alone measures against the\nFEE-ADJUSTED price and so under-reports an extreme-fee pool."},"hookPlatformFeePpm":{"description":"EVM Uniswap v4 only: fixed pool-level lp.xyz hook fee, in parts per\nmillion. The V4Quoter executes the hook, so outAmount already includes it.\nKept separate from platformFeeBps because the two fees have different\ncontracts, bases and settlement paths.","type":"number"},"v4SwapCost":{"$ref":"#/components/schemas/V4SwapCostDisclosure","description":"Uniswap v4 only: all-in pool cost and the divergence from advertised fees,\nderived from this exact amount's V4Quoter simulation at the live pool\nprice. Hooked-pool UI must use this instead of presenting the LP tier as\nthe trader's complete cost."},"solFeeLamports":{"description":"Solana SOL→token only: the fee (lamports) carved out of the input SOL and\nsent to the treasury via a prepended transfer. The quote was already taken\non `amount − solFeeLamports`. Display-only — the build route re-derives it.","type":"number"},"solFeeAddOnLamports":{"description":"Solana token↔token only: the fee (lamports) charged ON TOP of the swap,\nbecause neither Jupiter's fee mint nor the SOL carve-out applies to an\nexotic pair. Unlike solFeeLamports this is NOT inside the quoted amounts —\nthe wallet has to hold it — so the panel discloses it as an amount rather\nthan folding it into the \"included\" fee line. Display-only: the build route\nre-derives it, and drops it (with a fee_skips row) rather than break the\ntrade when the wallet is short after gas and rent.","type":"number"},"nativeFeeWei":{"description":"EVM native-input only: the fee (wei) carved out of the input before quoting\nand sent to the treasury as a separate transfer step. Same shape and same\ncaveat as solFeeLamports — display-only, re-derived at build.","type":"string"}},"required":["chain","inAmount","inputMint","otherAmountThreshold","outAmount","outputMint","priceImpactPct","raw","route","slippageBps"]},{"type":"object","properties":{"platformFeeBps":{"type":"number"}},"required":["platformFeeBps"]}]},"SwapRouteCost":{"description":"The all-in cost of one quoted route, as disclosed on the wire.","type":"object","properties":{"lpFeePpm":{"description":"Compounded advertised LP/pool fee across every hop, ppm.","type":"number"},"worstHopLpFeePpm":{"description":"The largest single-hop LP/pool fee, ppm — what the ceiling applies to.","type":"number"},"valueLossPpm":{"description":"Output lost against this route's own pre-fee mid price, ppm. Includes the\nLP fee, any known hook fee and price impact — everything between the mid\nprice and what the user actually receives.","type":"number"},"valueLossUsd":{"description":"That loss in USD, when the engine could price the input leg.","type":"number"},"highFeeLastResort":{"description":"True when the only pool quoting this pair is a high-fee one. The route is\nstill offered — nothing here blocks a trade the user wants — but it was\nnever chosen automatically, and it can't be signed without an explicit\nacknowledgement.","type":"boolean"},"hookReviewLastResort":{"description":"The selected route was the only remaining quote and uses a foreign v4\nhook. The hook disclosure owns the separate mandatory acknowledgement.","type":"boolean"}},"required":["lpFeePpm","valueLossPpm","worstHopLpFeePpm"]},"SwapRouteStep":{"type":"object","properties":{"amm":{"description":"Venue label: \"Orca\" / \"Meteora\" on Solana, \"Uniswap v3 · 0.05%\" /\n\"PancakeSwap v2 · 0.25%\" on EVM.","type":"string"},"venue":{"$ref":"#/components/schemas/Amm","description":"The bare venue behind `amm`, when it is one the app has a mark for —\nEVM legs always set it (the self-router knows which venue it chose); the\npanel keys its route logos off this rather than parsing the label."},"inputMint":{"type":"string"},"outputMint":{"type":"string"},"percent":{"type":"number"}},"required":["amm","inputMint","outputMint","percent"]},"TokenControlEvidence":{"description":"Normalized token-control flags for one pool asset.\n\n`provider` names who answered. It was a GoPlus-only literal; widening it is\nwhat lets LP.xyz's own detectors become a producer of the same evidence\nrather than a second, parallel shape the gate would have to learn.","type":"object","properties":{"provider":{"$ref":"#/components/schemas/TokenControlProvider"},"address":{"type":"string"},"score":{"type":"number"},"controls":{"$ref":"#/components/schemas/EvmTokenControls"},"known":{"description":"The detection fields this producer actually answered.\n\n`controls` is all plain booleans, so a producer with partial coverage\nreports every field it could not detect as `false` — a token nobody looked\nat manufactures itself a clean bill of health. This list is the tri-state\nthat survives the coercion, and `mergeTokenControls` refuses to read a\nfield that is not in it.\n\nA list rather than a `Set`: this record is persisted as JSON and served to\nclients, and a `Set` serializes to `{}` — the coverage would silently\nvanish on the trip that matters most.\n\nOmitted means \"everything it reports\", the legacy GoPlus reading.","type":"array","items":{"enum":["buy_tax_over_10","can_take_back_ownership","cannot_buy","cannot_sell_all","hidden_owner","is_blacklisted","is_honeypot","is_mintable","is_open_source","is_proxy","owner_change_balance","selfdestruct","sell_tax_over_10","transfer_pausable","transfer_tax_over_10"],"type":"string"}},"lpLocks":{"$ref":"#/components/schemas/LpLockEvidence"},"native":{"$ref":"#/components/schemas/NativeControlContext","description":"Present on `lpxyz-native` records only: see `NativeControlContext`."},"observedAt":{"type":"string"}},"required":["address","controls","observedAt","provider","score"]},"TokenControlProvider":{"enum":["goplus","lpxyz-native"],"type":"string"},"TokenInfo":{"type":"object","properties":{"mint":{"description":"Token address — base58 mint on Solana, lowercase 0x address on EVM.","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"number"},"chain":{"$ref":"#/components/schemas/ChainId","description":"Chain the token lives on. Absent = solana (pre-EVM rows/responses)."},"logo":{"description":"Logo URI if known.","type":"string"},"top10Pct":{"description":"Share of supply held by the top 10 holders, 0–100 (Codex, EVM only today).\nA concentration signal — high values mean a few wallets can dump the float.","type":"number"},"tokenProgram":{"description":"SPL Token vs Token-2022 program owner (Solana only).","enum":["spl-token","token-2022"],"type":"string"},"hasTransferExtensions":{"description":"True if the mint uses Token-2022 extensions that affect LPing (transfer fee/hook).","type":"boolean"},"taxInfo":{"description":"EVM fee-on-transfer taxes (the Token-2022 transfer-fee analog), from the\nrisk feed. Surfaces the same LP warning: taxed transfers skew deposits.","type":"object","properties":{"buyTaxPct":{"type":"number"},"sellTaxPct":{"type":"number"}}},"authorities":{"description":"On-chain mint authorities (Solana only; from the mint account the resolve\npath already reads). All base58-or-null. Feeds the token verdict and the\npool-safety provide gate — absent when the chain read failed.","type":"object","properties":{"mint":{"type":["null","string"]},"freeze":{"type":["null","string"]},"permanentDelegate":{"type":["null","string"]},"defaultAccountFrozen":{"type":"boolean"}},"required":["defaultAccountFrozen","freeze","mint","permanentDelegate"]},"stock":{"description":"Officially-issued tokenized stock (Robinhood registry match) — drives the\n\"Stock · Robinhood-issued\" badge. `symbol` is the underlying equity's\nticker; on-chain prices are `multiplier`-adjusted after splits.","type":"object","properties":{"issuer":{"type":"string","const":"Robinhood"},"symbol":{"type":"string"},"multiplier":{"type":"number"},"status":{"type":"string"}},"required":["issuer","symbol"]}},"required":["decimals","mint","name","symbol"]},"TokenPrice":{"type":"object","properties":{"mint":{"type":"string"},"usd":{"description":"USD price per token, if resolvable.","type":"number"}},"required":["mint"]},"TokenResolution":{"type":"object","properties":{"token":{"$ref":"#/components/schemas/TokenInfo"},"price":{"$ref":"#/components/schemas/TokenPrice"},"pools":{"type":"array","items":{"$ref":"#/components/schemas/PoolSummary"}},"chartPool":{"description":"Chart anchor: most-active pool on ANY dex, even ones we can't LP on.\nUsed when `pools` is empty (no actionable pool) on every supported chain.","type":"string"},"risk":{"$ref":"#/components/schemas/RiskInfo","description":"Token safety signal (ST risk score + warnings), best-effort."},"serializedAudit":{"anyOf":[{"$ref":"#/components/schemas/ContractAuditEvidence"},{"type":"null"}]},"contract":{"$ref":"#/components/schemas/EvmContractFlags","description":"EVM contract capabilities (GoPlus), best-effort — Solana's equivalents\nride on `token.authorities` instead, read straight from the mint."},"verdict":{"description":"Rolled-up danger/warn verdict (token-risk.ts). The detail page renders a\ndanger banner from this — it never hides the token (holders need to see\nand exit a position in a token that got flagged after they bought).","$ref":"#/components/schemas/TokenVerdict"},"holders":{"description":"Holder count, best-effort (Solana Tracker).","type":"number"},"socials":{"$ref":"#/components/schemas/TokenSocials","description":"Social links, best-effort (Solana: Solana Tracker; EVM: Codex\n`socialLinks`)."},"description":{"description":"The project's own blurb, best-effort (Solana: ST `token.description`;\nEVM: Codex `info.description`). Absent on most tokens.","type":"string"},"banner":{"description":"Header/banner image reported by the data feed (Codex\n`info.imageBannerUrl`), best-effort. The token card falls back to the\nDexscreener header CDN (`dexscreenerHeaderUrl`) when this is absent, and\nrenders no banner at all when neither answers.","type":"string"},"stats":{"description":"Token-level market stats for the terminal header, best-effort (Solana:\nST rollups; EVM: summed from the discovered pools). All optional — the\nheader hides what's missing.","type":"object","properties":{"marketCapUsd":{"type":"number"},"liquidityUsd":{"description":"Liquidity summed across venues (not one pool).","type":"number"},"volume24hUsd":{"type":"number"},"change24hPct":{"description":"Token-level 24h change % — per-pool changes diverge on thin venues.","type":"number"},"sources":{"type":"object","properties":{"priceUsd":{"enum":["codex","dexscreener","geckoterminal","pools"],"type":"string"},"marketCapUsd":{"enum":["codex","dexscreener","geckoterminal","pools"],"type":"string"},"volume24hUsd":{"enum":["codex","dexscreener","geckoterminal","pools"],"type":"string"},"liquidityUsd":{"enum":["codex","dexscreener","geckoterminal","pools"],"type":"string"}},"description":"Which provider answered each market figure, where the chain merges\nseveral (Arc: Codex → GeckoTerminal → Dexscreener)."},"top10Pct":{"description":"Top-10 holder concentration %.","type":"number"},"devPct":{"description":"Creator/deployer holding %.","type":"number"},"snipersPct":{"description":"First-block sniper holding %.","type":"number"},"insidersPct":{"description":"Team/connected-wallet insider holding %.","type":"number"}}},"warnings":{"description":"Non-fatal warnings (e.g. \"Token-2022 transfer fee detected\").","type":"array","items":{"type":"string"}},"degraded":{"description":"True when one or more pool-discovery layers did not complete, so `pools`\nmay be incomplete or empty even when the token has pools. The client skips\ncaching the result so a later search can retry the missing layer.","type":"boolean"},"partialSources":{"description":"On a degraded result, the chain-specific layers that are behind. EVM can\nreport \"rpc\", \"v4-index\" or \"market\"; Solana uses \"market\" for venue/Codex\nnomination and \"rpc\" for account proof. Successful rows remain present.","type":"array","items":{"type":"string"}},"riskPending":{"description":"EVM: the base answer went out before GoPlus did (see\n`GOPLUS_BASE_GRACE_MS`), so `risk`, `contract`, the GoPlus verdict\nreasons, taxes and the dev-holding cell are not in it yet. The audit\nresponse carries them (`TokenAuditResponse.tokenRisk`); such a body is\nnever cached.","type":"boolean"},"selectPool":{"description":"Client-only transient hint: the pool address to pre-select, set when the\nresolution came from pasting a POOL address (search-by-pool). The search\nlayer injects the pasted pool into `pools` if discovery didn't surface it\nand stamps this so the hub selects it instead of the top-TVL default. Never\nset by the server and never cached — a shallow copy carries it so the cached\nresolution stays clean.","type":"string"}},"required":["pools","token","warnings"]},"TokenSearchHit":{"type":"object","properties":{"mint":{"description":"base58 mint (Solana) or lowercased 0x address (EVM).","type":"string"},"chain":{"$ref":"#/components/schemas/ChainId"},"symbol":{"type":"string"},"name":{"type":"string"},"image":{"type":"string"},"decimals":{"type":"number"},"volume24hUsd":{"description":"24h USD volume — the cross-chain ranking signal.","type":"number"},"marketCapUsd":{"type":"number"},"holders":{"type":"number"},"priceUsd":{"type":"number"},"verified":{"description":"Solana trust flags (drive the swap picker's Jupiter badge).","type":"boolean"},"jupiter":{"type":"boolean"},"stock":{"description":"Officially-issued tokenized stock (registry match) — drives the Stock badge.","type":"object","properties":{"issuer":{"type":"string","const":"Robinhood"},"symbol":{"type":"string"},"multiplier":{"type":"number"}},"required":["issuer","symbol"]}},"required":["chain","mint","name","symbol","volume24hUsd"]},"TokenSearchResponse":{"type":"object","properties":{"tokens":{"type":"array","items":{"$ref":"#/components/schemas/TokenSearchHit"}}},"required":["tokens"]},"TokenSocials":{"description":"Token social links (best-effort, from Solana Tracker).","type":"object","properties":{"twitter":{"type":"string"},"website":{"type":"string"},"telegram":{"type":"string"},"discord":{"type":"string"}}},"TokenStatsResponse":{"description":"Response envelope — imported by the client instead of re-typed.","type":"object","properties":{"windows":{"description":"Keyed by window label: `5m`/`1h`/`24h` on Solana, `1h`/`4h`/`24h` on EVM. Written as an\nindex signature so the partner schema keeps the value type.","type":"object","additionalProperties":{"$ref":"#/components/schemas/StStatsWindow"}}},"required":["windows"]},"TokenVerdict":{"type":"object","properties":{"level":{"$ref":"#/components/schemas/VerdictLevel"},"reasons":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"level":{"enum":["danger","warning"],"type":"string"}},"required":["level","name"]}},"fakeMcap":{"description":"True when the reported market cap failed `mcapSuspect` — render it as \"—\".","type":"boolean"}},"required":["fakeMcap","level","reasons"]},"TopHoldersResponse":{"description":"Response envelope — imported by the client instead of re-typed.","type":"object","properties":{"holders":{"type":"array","items":{"$ref":"#/components/schemas/StTopHolder"}}},"required":["holders"]},"TopTradersResponse":{"description":"Response envelope — imported by the client instead of re-typed.","type":"object","properties":{"traders":{"type":"array","items":{"$ref":"#/components/schemas/StTopTrader"}}},"required":["traders"]},"TradeCoverage":{"description":"The ST trade shape we read (see live probe: tx/amount/priceUsd/volume/type/…).","enum":["exact-pair","top-pair","unavailable"],"type":"string"},"TradeRow":{"description":"One normalized trade row — CodexTradeRow (the base trade shape) plus the\nSolana-side extras ST reports.","type":"object","properties":{"pool":{"description":"The pool the swap executed in (ST reports the route's pool addresses;\nfirst entry = the executing pool). The feed maps it to a venue logo.","type":"string"},"program":{"description":"Routing program when ST names one (e.g. \"jupiter\" for aggregated swaps).","type":"string"},"tx":{"type":"string"},"eventId":{"description":"Provider identity (currently pair:network); combine with tx and logIndex.","type":"string"},"logIndex":{"description":"EVM log position, preserved so repeated transaction legs stay distinct.","type":"number"},"side":{"$ref":"#/components/schemas/TradeSide"},"volumeUsd":{"description":"USD value of the swap (token amount × its USD price at the event).","type":"number"},"priceUsd":{"type":"number"},"amount":{"description":"Decimal-adjusted token amount swapped.","type":"number"},"time":{"description":"Epoch ms.","type":"number"},"wallet":{"type":"string"}},"required":["amount","priceUsd","side","time","tx","volumeUsd"]},"TradeSide":{"description":"Trade direction from the token's perspective — THE buy/sell union.","enum":["buy","sell"],"type":"string"},"TradesResponse":{"description":"Response envelope — imported by the client instead of re-typed at the fetch.","type":"object","properties":{"trades":{"type":"array","items":{"$ref":"#/components/schemas/TradeRow"}},"coverage":{"$ref":"#/components/schemas/TradeCoverage"}},"required":["coverage","trades"]},"TransactionStatusResponse":{"type":"object","properties":{"status":{"enum":["failed","landed","pending"],"type":"string"},"reason":{"description":"EVM only: the decoded revert reason of a failed transaction, when one could be read.","type":"string"}},"required":["status"]},"TrendingResponse":{"type":"object","properties":{"amm":{"description":"The venue filter that was applied, when one was.","anyOf":[{"enum":["Meteora","Orca","PancakeSwap","PumpSwap","Raydium","Uniswap"],"type":"string"},{"type":"null"}]},"chain":{"description":"The chain that was searched; null means every enabled chain.","anyOf":[{"enum":["arc","base","bsc","ethereum","robinhood","solana"],"type":"string"},{"type":"null"}]},"tokens":{"type":"array","items":{"$ref":"#/components/schemas/TrendingToken"}},"rateLimited":{"description":"True when no rows are available and at least one in-scope upstream failed.","type":"boolean"},"partial":{"description":"True when rows are available while at least one in-scope upstream failed.","type":"boolean"}},"required":["amm","chain","rateLimited","tokens"]},"TrendingToken":{"type":"object","properties":{"mint":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"logo":{"type":"string"},"amm":{"$ref":"#/components/schemas/Amm"},"venues":{"description":"Venues that list this token in the source feed. The UI labels this set;\n`amm` remains the scoped/anchor venue used for discovery compatibility.","type":"array","items":{"enum":["Meteora","Orca","PancakeSwap","PumpSwap","Raydium","Uniswap"],"type":"string"}},"chain":{"$ref":"#/components/schemas/ChainId","description":"Chain the token lives on. Absent = solana (pre-EVM rows)."},"pool":{"description":"Deepest pool for this token (used as the chart/discovery anchor).\nEVM rows carry \"\" — Codex ranks tokens, not pools; the anchor pool is\ndiscovered on click, and the UI never links the pool directly.","type":"string"},"volume24hUsd":{"type":"number"},"tvlUsd":{"type":"number"},"priceUsd":{"description":"Token USD price (from the anchor pool).","type":"number"},"change24hPct":{"description":"24h price change %, from the token's `events`.","type":"number"},"marketCapUsd":{"description":"Market cap (USD) from the anchor pool.","type":"number"},"txns24h":{"description":"Trade count across in-scope pools (24h). Feeds the composite score.","type":"number"},"holders":{"description":"Distinct holder count (token-level, from ST). Feeds the composite score.","type":"number"},"ageHours":{"description":"Age in hours of the oldest in-scope pool. Feeds the newness penalty.","type":"number"},"riskScore":{"description":"ST composite risk score, 0 (clean) … 10 (max). Feeds the risk penalty.","type":"number"},"trendScore":{"description":"The composite rank score this row sorted by (higher = more trending).","type":"number"}},"required":["amm","mint","name","pool","symbol","volume24hUsd"]},"TriState":{"type":["null","boolean"]},"V4SwapCostDisclosure":{"description":"Amount-specific pool-cost disclosure produced by a real V4Quoter\nsimulation. `quotedCostPpm` compares the simulated output with the pool's\ncurrent mid-price before fees. `costBeyondKnownFeesPpm` compares it with the\noutput after the advertised LP tier and any known fixed lp.xyz hook fee, so\nit captures price movement plus any additional hook delta.","type":"object","properties":{"source":{"type":"string","const":"v4-quoter"},"hookAddress":{"type":"string"},"hookPermissions":{"type":"array","items":{"enum":["afterAddLiquidity","afterAddLiquidityReturnDelta","afterDonate","afterInitialize","afterRemoveLiquidity","afterRemoveLiquidityReturnDelta","afterSwap","afterSwapReturnDelta","beforeAddLiquidity","beforeDonate","beforeInitialize","beforeRemoveLiquidity","beforeSwap","beforeSwapReturnDelta"],"type":"string"}},"hookReviewRequired":{"description":"The hook is outside lp.xyz's production-reviewed allowlist. Its quote is\noffered only as an explicit last resort and always needs acknowledgement.","type":"boolean"},"hookTaxCapable":{"description":"Return-delta address bits can directly change swap input/output deltas.","type":"boolean"},"dynamicFeeCapable":{"description":"The PoolKey carries Uniswap v4's dynamic-fee sentinel. The hook can\nchange the live LP fee through slot0 updates even without beforeSwap.","type":"boolean"},"advertisedLpFeePpm":{"type":"number"},"knownHookFeePpm":{"type":"number"},"quotedCostPpm":{"type":"number"},"costBeyondKnownFeesPpm":{"type":"number"}},"required":["advertisedLpFeePpm","costBeyondKnownFeesPpm","dynamicFeeCapable","hookAddress","hookPermissions","hookReviewRequired","hookTaxCapable","knownHookFeePpm","quotedCostPpm","source"]},"VerdictLevel":{"description":"Rolled-up verdict for a single token — the detail page's danger banner and\n(later) pool-row badges consume this. Unlike the list gates, a verdict never\nhides anything: the detail page always renders (users may hold a token that\ngot flagged after they bought) and the banner tells them why it's dangerous.","enum":["danger","ok","warn"],"type":"string"},"EvmCall":{"type":"object","required":["to","data","value","chainId","step"],"properties":{"to":{"type":"string"},"data":{"type":"string"},"value":{"type":"string","pattern":"^[0-9]+$"},"gas":{"type":"string"},"label":{"type":"string"},"valueSource":{"enum":["prior-action-output"]},"chainId":{"type":"integer"},"step":{"enum":["approve","action","fee","optional"]},"expect":{"$ref":"#/components/schemas/AllowanceExpectation"},"createFeeIntent":{"type":"string"},"feeBearing":{"type":"boolean"},"required":{"type":"boolean"}},"additionalProperties":true},"AllowanceExpectation":{"type":"object","required":["kind","token","spender","amount"],"description":"What an approve step leaves behind. Poll it until it reads true before sending the dependent call: the receipt proves the approve mined, not that your RPC view has caught up.","properties":{"kind":{"enum":["erc20","permit2"]},"token":{"type":"string"},"spender":{"type":"string"},"amount":{"type":"string","pattern":"^[0-9]+$","description":"Decimal base units."},"permit2":{"type":"string","description":"The Permit2 contract holding a permit2 allowance when it is not the canonical deployment."}},"additionalProperties":true},"Error":{"type":"object","required":["ok","error","code","requestId"],"properties":{"ok":{"const":false},"error":{"type":"string"},"code":{"type":"string"},"endpointCode":{"type":"string","description":"Owning handler recovery code, e.g. POOL_RISK_ACK_REQUIRED."},"requestId":{"type":"string","format":"uuid"}}},"BuildResponse":{"type":"object","required":["ok","requestId","transactions","signing"],"properties":{"ok":{"const":true},"requestId":{"type":"string","format":"uuid"},"transactions":{"type":"array","items":{"type":"object","required":["id","chain","encoding","payload","purpose"],"properties":{"id":{"type":"string"},"chain":{"type":"string"},"encoding":{"enum":["base64","evm-call"]},"payload":{"oneOf":[{"type":"string","contentEncoding":"base64"},{"$ref":"#/components/schemas/EvmCall"}]},"purpose":{"type":"string"},"dependsOn":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"}}}},"signing":{"type":"object","required":["mode"],"properties":{"mode":{"enum":["sequential","sender-bundles"]},"lastValidBlockHeight":{"type":"integer"},"bundles":{"type":"array","items":{"type":"object","required":["id","transactionIds"],"properties":{"id":{"type":"string"},"transactionIds":{"type":"array","minItems":1,"items":{"type":"string"}},"positionId":{"type":"string"},"lowerBinId":{"type":"integer"},"upperBinId":{"type":"integer"}}}}},"description":"Sequential EVM calls include atomic fee settlement in the router action. sender-bundles (tipped for and submitted through Helius Sender, https://sender.helius-rpc.com/fast, sendBundle) requires signing every Solana transaction once, then submitting each listed bundle atomically in order before lastValidBlockHeight; reconcile its signatures before retrying an uncertain bundle."},"metadata":{"type":"object","additionalProperties":true,"description":"Operation result metadata: pool identity, transfer preview, blockhash validity, gas/simulation, bridgeRequestId."},"quote":{"type":"object","additionalProperties":true,"description":"The refreshed quote the build was priced from, when the operation has one."},"fees":{"type":"object","additionalProperties":true,"description":"Platform fee rows the confirmation verifies, when the operation charges one."},"confirmationToken":{"type":"string"}}}}}}