{"openapi":"3.1.0","info":{"title":"justi.fun API","version":"1.0.0","license":{"name":"Proprietary","identifier":"LicenseRef-Proprietary"},"description":"Public API for justi.fun, a Solana launchpad on Meteora DBC. Read coins, trades and rewards, quote and build swaps on the curve and on the DAMM v2 pool after graduation, build launches, and get webhooks and live streams. Amounts that can exceed 2^53 are decimal strings. Times are unix seconds. Errors are {error:{code,message,details?}}. Live streams: GET /v1/stream (SSE) and the WebSocket at /v1/ws (see x-websocket)."},"servers":[{"url":"https://api.justi.fun"}],"tags":[{"name":"Protocol","description":"What the pad is: program, configs, fees, status."},{"name":"Tokens","description":"Coins, trades, candles, holders, burns."},{"name":"Platform","description":"Platform-wide totals, buybacks and the vanity mint pool."},{"name":"Rewards","description":"Holder rewards, payouts and creator earnings."},{"name":"Assets","description":"Metadata JSON, images and banners (the URIs stored on chain)."},{"name":"Streams","description":"Live trades and launches. The WebSocket is described under x-websocket."},{"name":"Trading","description":"Quote, build, submit and track swaps on the curve and on DAMM v2."},{"name":"Launches","description":"Build and submit launches exactly like the site."},{"name":"Webhooks","description":"Signed event deliveries with retries."},{"name":"Keys","description":"API keys: self-serve free keys and the calling key."},{"name":"Admin","description":"Key management, ADMIN_TOKEN only."}],"paths":{"/v1/protocol":{"get":{"operationId":"getProtocol","summary":"What a terminal needs to tag justi.fun coins","description":"DBC program, the 20 config addresses with their fee tiers, fee claimer, lookup table, metadata createdOn and URL patterns.","tags":["Protocol"],"x-rate-class":"read","responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Protocol"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/pad":{"get":{"operationId":"getPad","summary":"Pad config, fee tiers, fee splits and the sniper window schedule","tags":["Protocol"],"x-rate-class":"read","responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Pad"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/status":{"get":{"operationId":"getStatus","summary":"Service status: switches and live ingest","tags":["Protocol"],"x-rate-class":"read","responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/openapi.json":{"get":{"operationId":"getOpenApi","summary":"This OpenAPI 3.1 document","tags":["Protocol"],"x-rate-class":"read","responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"description":"OpenAPI 3.1 document.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[]}},"/v1/tokens":{"get":{"operationId":"listTokens","summary":"Coins, with filters, sort, search and pagination","tags":["Tokens"],"x-rate-class":"read","parameters":[{"name":"status","in":"query","required":false,"schema":{"default":"all","type":"string","enum":["all","curve","graduating","graduated"]}},{"name":"creator","in":"query","required":false,"description":"Only coins created by this wallet.","schema":{"description":"Only coins created by this wallet.","$ref":"#/components/schemas/Address"}},{"name":"q","in":"query","required":false,"description":"Search ticker or name (contains), or an exact mint.","schema":{"description":"Search ticker or name (contains), or an exact mint.","type":"string","maxLength":64}},{"name":"sort","in":"query","required":false,"schema":{"default":"new","type":"string","enum":["new","marketcap","volume24h","lastTrade","progress","trades"]}},{"name":"limit","in":"query","required":false,"description":"Page size, 1 to 100.","schema":{"description":"Page size, 1 to 100.","default":50,"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"nextCursor from the previous page.","schema":{"description":"nextCursor from the previous page.","type":"string","maxLength":400}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPage"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/tokenlist":{"get":{"operationId":"getTokenList","summary":"Every coin in one list (for terminals)","description":"Mint, pools, config, creator, createdAt and status for every coin, newest first. Cached 30s.","tags":["Tokens"],"x-rate-class":"read","responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenList"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/tokens/{mint}":{"get":{"operationId":"getToken","summary":"Coin detail: metadata, safety facts, curve, graduation, sniper window, totals","tags":["Tokens"],"x-rate-class":"read","parameters":[{"name":"mint","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Address"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenDetail"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/tokens/{mint}/metadata":{"get":{"operationId":"getTokenMetadata","summary":"Metaplex metadata JSON for a coin","tags":["Tokens"],"x-rate-class":"read","parameters":[{"name":"mint","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Address"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenMetadata"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/tokens/{mint}/trades":{"get":{"operationId":"listTrades","summary":"Trades, newest first, cursor paginated (curve and DAMM v2)","tags":["Tokens"],"x-rate-class":"read","parameters":[{"name":"mint","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Address"}},{"name":"limit","in":"query","required":false,"description":"Page size, 1 to 200.","schema":{"description":"Page size, 1 to 200.","default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"description":"nextCursor from the previous page.","schema":{"description":"nextCursor from the previous page.","type":"string","maxLength":400}},{"name":"wallet","in":"query","required":false,"schema":{"$ref":"#/components/schemas/Address"}},{"name":"side","in":"query","required":false,"description":"buy: SOL in, coin out. sell: coin in, SOL out.","schema":{"description":"buy: SOL in, coin out. sell: coin in, SOL out.","type":"string","enum":["buy","sell"]}},{"name":"venue","in":"query","required":false,"description":"curve: the Meteora DBC bonding curve. damm: the Meteora DAMM v2 pool after graduation.","schema":{"description":"curve: the Meteora DBC bonding curve. damm: the Meteora DAMM v2 pool after graduation.","type":"string","enum":["curve","damm"]}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradePage"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/tokens/{mint}/candles":{"get":{"operationId":"getCandles","summary":"OHLCV candles from indexed trades","description":"Each candle opens at the previous close. Prices are SOL per whole token, volume in SOL. Page back with before=nextBefore.","tags":["Tokens"],"x-rate-class":"read","parameters":[{"name":"mint","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Address"}},{"name":"tf","in":"query","required":false,"schema":{"default":"1m","type":"string","enum":["1s","15s","1m","5m","15m","1h"]}},{"name":"limit","in":"query","required":false,"schema":{"default":500,"type":"integer","minimum":10,"maximum":1500}},{"name":"before","in":"query","required":false,"description":"Unix time; candles strictly before it.","schema":{"description":"Unix time; candles strictly before it.","type":"integer","minimum":0,"maximum":9007199254740991}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Candles"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/tokens/{mint}/holders":{"get":{"operationId":"listHolders","summary":"Holders from the latest snapshot (every 10 minutes)","tags":["Tokens"],"x-rate-class":"read","parameters":[{"name":"mint","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Address"}},{"name":"limit","in":"query","required":false,"description":"Page size, 1 to 500.","schema":{"description":"Page size, 1 to 500.","default":100,"type":"integer","minimum":1,"maximum":500}},{"name":"cursor","in":"query","required":false,"description":"nextCursor from the previous page.","schema":{"description":"nextCursor from the previous page.","type":"string","maxLength":400}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HolderPage"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/tokens/{mint}/burns":{"get":{"operationId":"listTokenBurns","summary":"Buybacks and burns of one coin, with signatures","tags":["Tokens"],"x-rate-class":"read","parameters":[{"name":"mint","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Address"}},{"name":"limit","in":"query","required":false,"description":"Page size, 1 to 200.","schema":{"description":"Page size, 1 to 200.","default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"description":"nextCursor from the previous page.","schema":{"description":"nextCursor from the previous page.","type":"string","maxLength":400}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuybackPage"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/buybacks":{"get":{"operationId":"listBuybacks","summary":"All buybacks and burns ($JUSTI and sniper-window coin burns)","tags":["Platform"],"x-rate-class":"read","parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["justi","coin"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["planned","swapped","burned","held"]}},{"name":"limit","in":"query","required":false,"description":"Page size, 1 to 200.","schema":{"description":"Page size, 1 to 200.","default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"description":"nextCursor from the previous page.","schema":{"description":"nextCursor from the previous page.","type":"string","maxLength":400}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuybackPage"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/tokens/{mint}/rewards":{"get":{"operationId":"getTokenRewards","summary":"Holder reward rounds of one coin","tags":["Rewards"],"x-rate-class":"read","parameters":[{"name":"mint","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Address"}},{"name":"limit","in":"query","required":false,"description":"Page size, 1 to 200.","schema":{"description":"Page size, 1 to 200.","default":50,"type":"integer","minimum":1,"maximum":200}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenRewards"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/wallets/{address}/rewards":{"get":{"operationId":"getWalletRewards","summary":"What a wallet earned from holding, and its payouts with signatures","tags":["Rewards"],"x-rate-class":"read","parameters":[{"name":"address","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Address"}},{"name":"limit","in":"query","required":false,"description":"Page size, 1 to 200.","schema":{"description":"Page size, 1 to 200.","default":100,"type":"integer","minimum":1,"maximum":200}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletRewards"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/payouts":{"get":{"operationId":"listPayouts","summary":"Confirmed holder payouts, newest first","tags":["Rewards"],"x-rate-class":"read","parameters":[{"name":"limit","in":"query","required":false,"description":"Page size, 1 to 200.","schema":{"description":"Page size, 1 to 200.","default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"description":"nextCursor from the previous page.","schema":{"description":"nextCursor from the previous page.","type":"string","maxLength":400}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayoutPage"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/creators/{wallet}":{"get":{"operationId":"getCreator","summary":"Creator stats: coins, fees earned and claimable (read live from the pools)","tags":["Rewards"],"x-rate-class":"read","parameters":[{"name":"wallet","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Address"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorStats"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/platform/stats":{"get":{"operationId":"getPlatformStats","summary":"Platform totals","tags":["Platform"],"x-rate-class":"read","responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformStats"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/mint-pool":{"get":{"operationId":"getMintPool","summary":"Vanity (...JUST) mint pool status","tags":["Platform"],"x-rate-class":"read","responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MintPool"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/meta/{id}":{"get":{"operationId":"getLaunchMetadata","summary":"Metadata JSON by launch id (the uri stored on chain)","tags":["Assets"],"x-rate-class":"asset","parameters":[{"name":"id","in":"path","required":true,"description":"UUID.","schema":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenMetadata"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[]}},"/v1/image/{id}":{"get":{"operationId":"getLaunchImage","summary":"Coin image by launch id","tags":["Assets"],"x-rate-class":"asset","parameters":[{"name":"id","in":"path","required":true,"description":"UUID.","schema":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}}],"responses":{"200":{"description":"The image bytes (PNG, JPEG, WebP or GIF). Immutable.","content":{"image/*":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[]}},"/v1/banner/{key}":{"get":{"operationId":"getBanner","summary":"3:1 banner by coin mint (or by launch id before it goes live)","tags":["Assets"],"x-rate-class":"asset","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","maxLength":64}},{"name":"v","in":"query","required":false,"description":"Version from the banner URL; a matching v is cached for a year.","schema":{"description":"Version from the banner URL; a matching v is cached for a year.","type":"string","maxLength":32}}],"responses":{"200":{"description":"WebP or GIF banner.","content":{"image/*":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[]}},"/v1/stream":{"get":{"operationId":"openStream","summary":"Server-Sent Events: trades and launches","description":"event: trade data {\"mint\",\"ticker\",\"image\",\"side\",\"sol\",\"tokens\",\"wallet\",\"signature\",\"ts\",\"priceSol\",\"mcapSol\",\"ix\",\"createTx\"}; event: launch data {\"mint\",\"ticker\",\"name\",\"image\",\"ts\"}. Heartbeat comment every 15s. Optional ?mint= filter. For more channels use the WebSocket at /v1/ws.","tags":["Streams"],"x-rate-class":"stream","parameters":[{"name":"mint","in":"query","required":false,"schema":{"$ref":"#/components/schemas/Address"}}],"responses":{"200":{"description":"SSE stream.","content":{"text/event-stream":{"schema":{"type":"string"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/quote":{"get":{"operationId":"getQuote","summary":"Quote a buy or sell (exact in) on the curve or the DAMM v2 pool","tags":["Trading"],"x-rate-class":"quote","parameters":[{"name":"mint","in":"query","required":true,"schema":{"$ref":"#/components/schemas/Address"}},{"name":"side","in":"query","required":true,"description":"buy: SOL in, coin out. sell: coin in, SOL out.","schema":{"description":"buy: SOL in, coin out. sell: coin in, SOL out.","type":"string","enum":["buy","sell"]}},{"name":"amount","in":"query","required":true,"description":"Lamports to spend on a buy, raw tokens to sell.","schema":{"description":"Lamports to spend on a buy, raw tokens to sell.","$ref":"#/components/schemas/U64String"}},{"name":"slippageBps","in":"query","required":false,"description":"Basis points, 10 to 5000. Default 1000 (10%).","schema":{"description":"Basis points, 10 to 5000. Default 1000 (10%).","default":1000,"type":"integer","minimum":10,"maximum":5000}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Quote"}}}},"400":{"description":"Error. code is one of: bad_request, invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error. code is one of: graduating.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error. code is one of: upstream_error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error. code is one of: unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/swap":{"post":{"operationId":"buildSwap","summary":"Build an unsigned v0 swap transaction for a wallet","description":"Quotes fresh, builds, simulates and sets the compute limit. Sign the returned transaction with the wallet and send it to POST /v1/submit (or send it yourself). The wallet may add instructions, but the swap instruction must stay as built.","tags":["Trading"],"x-rate-class":"build","x-body-limit":"8kb","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapRequest"}}}},"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapBuilt"}}}},"400":{"description":"Error. code is one of: bad_request, slippage, insufficient_funds, chain_rejected, invalid_params, invalid_json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error. code is one of: graduating.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error. code is one of: payload_too_large.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error. code is one of: upstream_error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error. code is one of: unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/submit":{"post":{"operationId":"submitSwap","summary":"Relay a signed swap built by POST /v1/swap","description":"Checks it is paid and signed by the building wallet and carries the exact swap instruction built, then sends it (RPC rebroadcast every 2s, plus Jito when built with a tip) until confirmed, failed or expired. Answers when it settles or after waitMs (default 20000, max 25000) with status submitted; poll GET /v1/tx/{signature}. A trade that fails on chain is a 200 with status failed and an error.","tags":["Trading"],"x-rate-class":"submit","x-body-limit":"16kb","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitRequest"}}}},"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapStatus"}}}},"400":{"description":"Error. code is one of: tx_mismatch, signature_invalid, bad_request, invalid_params, invalid_json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error. code is one of: already_submitted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error. code is one of: payload_too_large.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/swaps/{id}":{"get":{"operationId":"getSwap","summary":"Status of a swap built through the API","tags":["Trading"],"x-rate-class":"read","parameters":[{"name":"id","in":"path","required":true,"description":"UUID.","schema":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapStatus"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/tx/{signature}":{"get":{"operationId":"getTransactionStatus","summary":"Status of any transaction signature (and the swap or launch it belongs to)","tags":["Trading"],"x-rate-class":"read","parameters":[{"name":"signature","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Signature"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TxStatus"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error. code is one of: upstream_error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/launches":{"post":{"operationId":"buildLaunch","summary":"Build a launch exactly like the site does","description":"Same validation as the site: copy rule, 15% dev-buy cap, tier configs, sniper window, 10 launches per wallet a day. Returns an unsigned (by the wallet) v0 create transaction. signers lists every required signature: the payer (wallet) always; the mint is already signed for pool keys, or must be signed by your client with your custom mint keypair. Then POST /v1/launches/{id}/submit with the fully signed transaction within about a minute.","tags":["Launches"],"x-rate-class":"launch","x-body-limit":"3mb","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchRequest"}}}},"responses":{"201":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchBuilt"}}}},"400":{"description":"Error. code is one of: bad_request, insufficient_funds, chain_rejected, image_fetch_failed, invalid_params, invalid_json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error. code is one of: forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error. code is one of: copy_exists, mint_taken.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error. code is one of: payload_too_large.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: launch_limit, rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error. code is one of: unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/launches/{id}/submit":{"post":{"operationId":"submitLaunch","summary":"Send a signed launch (Jito, private)","description":"The transaction must be exactly the built message with every required signature. Answers live, or submitted after waitMs (default 20000); poll GET /v1/launches/{id}.","tags":["Launches"],"x-rate-class":"submit","x-body-limit":"16kb","parameters":[{"name":"id","in":"path","required":true,"description":"UUID.","schema":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"transaction":{"description":"Base64 serialized versioned transaction.","type":"string","minLength":100,"maxLength":4000,"pattern":"^[A-Za-z0-9+/=]+$"},"waitMs":{"type":"integer","minimum":0,"maximum":60000}},"required":["transaction"]}}}},"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchSubmitted"}}}},"400":{"description":"Error. code is one of: tx_mismatch, signature_invalid, chain_rejected, bad_request, invalid_params, invalid_json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error. code is one of: already_submitted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error. code is one of: expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error. code is one of: payload_too_large.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/launches/{id}":{"get":{"operationId":"getLaunch","summary":"Launch status","tags":["Launches"],"x-rate-class":"read","parameters":[{"name":"id","in":"path","required":true,"description":"UUID.","schema":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Launch"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"bearerKey":[]},{"headerKey":[]}]}},"/v1/webhooks":{"post":{"operationId":"createWebhook","summary":"Register a webhook (the secret is shown once)","description":"Deliveries are POSTs of {id,type,createdAt,data} with headers Justi-Event, Justi-Delivery and Justi-Signature: t=<unix>,v1=<hex HMAC-SHA256(secret, \"<t>.<raw body>\")>. Any 2xx is success. Retries: 8 attempts, 30s x 3^(n-1) (cap 6h, +-20% jitter). 25 failures in a row disable the webhook. trade events can be limited to mints.","tags":["Webhooks"],"x-rate-class":"manage","x-body-limit":"8kb","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreate"}}}},"responses":{"201":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreated"}}}},"400":{"description":"Error. code is one of: bad_request, invalid_params, invalid_json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error. code is one of: conflict.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error. code is one of: payload_too_large.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerKey":[]},{"headerKey":[]}]},"get":{"operationId":"listWebhooks","summary":"Webhooks of this API key","tags":["Webhooks"],"x-rate-class":"manage","responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"webhooks":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}}},"required":["webhooks"],"additionalProperties":false}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerKey":[]},{"headerKey":[]}]}},"/v1/webhooks/{id}":{"get":{"operationId":"getWebhook","summary":"One webhook","tags":["Webhooks"],"x-rate-class":"manage","parameters":[{"name":"id","in":"path","required":true,"description":"UUID.","schema":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerKey":[]},{"headerKey":[]}]},"patch":{"operationId":"updateWebhook","summary":"Change a webhook; enabled=true re-enables one that was disabled","tags":["Webhooks"],"x-rate-class":"manage","x-body-limit":"8kb","parameters":[{"name":"id","in":"path","required":true,"description":"UUID.","schema":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":500,"format":"uri"},"events":{"minItems":1,"type":"array","items":{"type":"string","enum":["launch.created","trade","coin.graduated","burn","buyback","payout","creator.claim"]}},"mints":{"anyOf":[{"maxItems":100,"type":"array","items":{"$ref":"#/components/schemas/Address"}},{"type":"null"}]},"description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"enabled":{"type":"boolean"}}}}}},"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"400":{"description":"Error. code is one of: bad_request, invalid_params, invalid_json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error. code is one of: payload_too_large.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerKey":[]},{"headerKey":[]}]},"delete":{"operationId":"deleteWebhook","summary":"Delete a webhook and its delivery log","tags":["Webhooks"],"x-rate-class":"manage","parameters":[{"name":"id","in":"path","required":true,"description":"UUID.","schema":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean"}},"required":["deleted"],"additionalProperties":false}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerKey":[]},{"headerKey":[]}]}},"/v1/webhooks/{id}/deliveries":{"get":{"operationId":"listWebhookDeliveries","summary":"Delivery log, newest first","tags":["Webhooks"],"x-rate-class":"manage","parameters":[{"name":"id","in":"path","required":true,"description":"UUID.","schema":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}},{"name":"limit","in":"query","required":false,"description":"Page size, 1 to 200.","schema":{"description":"Page size, 1 to 200.","default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"description":"nextCursor from the previous page.","schema":{"description":"nextCursor from the previous page.","type":"string","maxLength":400}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"deliveries":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["deliveries","nextCursor"],"additionalProperties":false}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerKey":[]},{"headerKey":[]}]}},"/v1/webhooks/{id}/test":{"post":{"operationId":"testWebhook","summary":"Send one signed webhook.test delivery now","tags":["Webhooks"],"x-rate-class":"manage","parameters":[{"name":"id","in":"path","required":true,"description":"UUID.","schema":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"deliveryId":{"type":"string"},"delivered":{"type":"boolean"},"statusCode":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"durationMs":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["deliveryId","delivered","statusCode","error","durationMs"],"additionalProperties":false}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerKey":[]},{"headerKey":[]}]}},"/v1/keys":{"post":{"operationId":"createFreeKey","summary":"Self-serve: a wallet signs a message and gets a free-tier key","description":"Sign the UTF-8 message \"justi.fun api key\\nwallet: <wallet>\\nlabel: <label>\\ntime: <ts>\" with the wallet (ed25519, e.g. signMessage), send the base58 signature. ts within 5 minutes. One active free key per wallet. The key is shown once.","tags":["Keys"],"x-rate-class":"keys","x-body-limit":"4kb","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"wallet":{"$ref":"#/components/schemas/Address"},"label":{"type":"string","minLength":2,"maxLength":40,"pattern":"^[A-Za-z0-9 ._-]+$"},"ts":{"description":"Unix seconds used in the message.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"signature":{"description":"Base58 ed25519 signature of the message.","type":"string","minLength":60,"maxLength":100}},"required":["wallet","label","ts","signature"]}}}},"responses":{"201":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyCreated"}}}},"400":{"description":"Error. code is one of: bad_request, signature_invalid, invalid_params, invalid_json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error. code is one of: conflict.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error. code is one of: payload_too_large.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[]}},"/v1/keys/me":{"get":{"operationId":"getMyKey","summary":"The calling key, its tier and limits","tags":["Keys"],"x-rate-class":"read","responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/ApiKey"},"limits":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"capacity":{"type":"number"},"perMin":{"type":"number"}},"required":["capacity","perMin"],"additionalProperties":false}},"maxStreamConnections":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["key","limits","maxStreamConnections"],"additionalProperties":false}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerKey":[]},{"headerKey":[]}]},"delete":{"operationId":"revokeMyKey","summary":"Revoke the calling key (its webhooks stop)","tags":["Keys"],"x-rate-class":"manage","responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"revoked":{"type":"boolean"}},"required":["revoked"],"additionalProperties":false}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerKey":[]},{"headerKey":[]}]}},"/v1/admin/coins/{mint}/hidden":{"post":{"operationId":"adminSetHidden","summary":"Hide or show a coin on discovery surfaces (admin)","description":"A hidden coin never shows on the board, live strip, global streams, token list, sitemap or stats. Its page and APIs by mint or wallet still work.","tags":["Admin"],"x-rate-class":"admin","x-body-limit":"4kb","parameters":[{"name":"mint","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Address"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"hidden":{"type":"boolean"}},"required":["hidden"]}}}},"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"mint":{"$ref":"#/components/schemas/Address"},"hidden":{"type":"boolean"},"coin":{"type":"boolean"},"launches":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["mint","hidden","coin","launches"],"additionalProperties":false}}}},"400":{"description":"Error. code is one of: invalid_params, invalid_json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error. code is one of: payload_too_large.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error. code is one of: unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"adminToken":[]}]}},"/v1/admin/keys":{"post":{"operationId":"adminCreateKey","summary":"Create an API key (admin)","tags":["Admin"],"x-rate-class":"admin","x-body-limit":"4kb","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string","minLength":2,"maxLength":60},"tier":{"default":"partner","type":"string","enum":["free","partner","internal"]},"ownerWallet":{"anyOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]},"limits":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"capacity":{"type":"number","minimum":0},"perMin":{"type":"number","minimum":0}},"required":["capacity","perMin"]}},{"type":"null"}]}},"required":["label"]}}}},"responses":{"201":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string"},"record":{"$ref":"#/components/schemas/ApiKey"}},"required":["key","record"],"additionalProperties":false}}}},"400":{"description":"Error. code is one of: bad_request, invalid_params, invalid_json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error. code is one of: payload_too_large.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error. code is one of: unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"adminToken":[]}]},"get":{"operationId":"adminListKeys","summary":"List API keys with 30-day usage by partner (admin)","tags":["Admin"],"x-rate-class":"admin","responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","properties":{"id":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"prefix":{"type":"string"},"label":{"type":"string"},"ownerWallet":{"anyOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]},"tier":{"type":"string","enum":["free","partner","internal"]},"limits":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"capacity":{"type":"number"},"perMin":{"type":"number"}},"required":["capacity","perMin"],"additionalProperties":false}},{"type":"null"}]},"createdAt":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lastUsedAt":{"anyOf":[{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"revokedAt":{"anyOf":[{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"usage30d":{"type":"object","properties":{"swapsBuilt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"swapsConfirmed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"volumeLamports":{"$ref":"#/components/schemas/U64String"},"launchesBuilt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"launchesLive":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["swapsBuilt","swapsConfirmed","volumeLamports","launchesBuilt","launchesLive"],"additionalProperties":false}},"required":["id","prefix","label","ownerWallet","tier","limits","createdAt","lastUsedAt","revokedAt","usage30d"],"additionalProperties":false}}},"required":["keys"],"additionalProperties":false}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error. code is one of: unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"adminToken":[]}]}},"/v1/admin/keys/{id}":{"patch":{"operationId":"adminUpdateKey","summary":"Change a key's tier, label or limits (admin)","tags":["Admin"],"x-rate-class":"admin","x-body-limit":"4kb","parameters":[{"name":"id","in":"path","required":true,"description":"UUID.","schema":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tier":{"type":"string","enum":["free","partner","internal"]},"label":{"type":"string","minLength":2,"maxLength":60},"limits":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"capacity":{"type":"number","minimum":0},"perMin":{"type":"number","minimum":0}},"required":["capacity","perMin"]}},{"type":"null"}]}}}}}},"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}},"400":{"description":"Error. code is one of: invalid_params, invalid_json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error. code is one of: payload_too_large.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error. code is one of: unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"adminToken":[]}]},"delete":{"operationId":"adminRevokeKey","summary":"Revoke a key (admin)","tags":["Admin"],"x-rate-class":"admin","parameters":[{"name":"id","in":"path","required":true,"description":"UUID.","schema":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}},"400":{"description":"Error. code is one of: invalid_params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error. code is one of: unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error. code is one of: not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error. code is one of: rate_limited.","headers":{"RateLimit-Limit":{"description":"Bucket size (burst) for this endpoint's rate class.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the bucket now.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the bucket is full again.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"capacity;w=seconds to refill from empty.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error. code is one of: internal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error. code is one of: unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"adminToken":[]}]}}},"components":{"schemas":{"Address":{"description":"Base58 Solana address.","type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"ApiKey":{"type":"object","properties":{"id":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"prefix":{"type":"string"},"label":{"type":"string"},"ownerWallet":{"anyOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]},"tier":{"type":"string","enum":["free","partner","internal"]},"limits":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"capacity":{"type":"number"},"perMin":{"type":"number"}},"required":["capacity","perMin"],"additionalProperties":false}},{"type":"null"}]},"createdAt":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lastUsedAt":{"anyOf":[{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"revokedAt":{"anyOf":[{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["id","prefix","label","ownerWallet","tier","limits","createdAt","lastUsedAt","revokedAt"],"additionalProperties":false},"Buyback":{"type":"object","properties":{"id":{"type":"string"},"mint":{"$ref":"#/components/schemas/Address"},"ticker":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"description":"justi: $JUSTI buyback. coin: sniper-window burn of this coin.","type":"string","enum":["justi","coin"]},"status":{"type":"string","enum":["planned","swapped","burned","held"]},"lamports":{"$ref":"#/components/schemas/U64String"},"tokensBought":{"anyOf":[{"$ref":"#/components/schemas/U64String"},{"type":"null"}]},"route":{"anyOf":[{"type":"string"},{"type":"null"}]},"swapSignature":{"anyOf":[{"type":"string"},{"type":"null"}]},"burnSignature":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"burnedAt":{"anyOf":[{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["id","mint","ticker","kind","status","lamports","tokensBought","route","swapSignature","burnSignature","createdAt","burnedAt"],"additionalProperties":false},"BuybackPage":{"type":"object","properties":{"totals":{"type":"object","properties":{"burns":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lamports":{"$ref":"#/components/schemas/U64String"},"tokensBurned":{"$ref":"#/components/schemas/U64String"}},"required":["burns","lamports","tokensBurned"],"additionalProperties":false},"buybacks":{"type":"array","items":{"$ref":"#/components/schemas/Buyback"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["totals","buybacks","nextCursor"],"additionalProperties":false},"Candles":{"type":"object","properties":{"mint":{"$ref":"#/components/schemas/Address"},"timeframe":{"type":"string"},"seconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"activationTs":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"windowEndsTs":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"candles":{"type":"array","items":{"type":"object","properties":{"t":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"open":{"type":"number"},"high":{"type":"number"},"low":{"type":"number"},"close":{"type":"number"},"volumeSol":{"type":"number"},"trades":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["t","open","high","low","close","volumeSol","trades"],"additionalProperties":false}},"hasMore":{"type":"boolean"},"nextBefore":{"anyOf":[{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["mint","timeframe","seconds","activationTs","windowEndsTs","candles","hasMore","nextBefore"],"additionalProperties":false},"CreatorStats":{"type":"object","properties":{"wallet":{"$ref":"#/components/schemas/Address"},"totals":{"type":"object","properties":{"coins":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"earnedLamports":{"$ref":"#/components/schemas/U64String"},"claimableLamports":{"$ref":"#/components/schemas/U64String"},"holderRewardsLamports":{"$ref":"#/components/schemas/U64String"}},"required":["coins","earnedLamports","claimableLamports","holderRewardsLamports"],"additionalProperties":false},"coins":{"type":"array","items":{"type":"object","properties":{"mint":{"$ref":"#/components/schemas/Address"},"name":{"type":"string"},"ticker":{"type":"string"},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"mode":{"description":"Who earns the fee: the creator, holders, or both.","type":"string","enum":["creator","holders","split"]},"creatorPct":{"type":"number"},"holdersPct":{"type":"number"},"createdAt":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"graduated":{"type":"boolean"},"curveProgressPct":{"type":"number"},"marketCapSol":{"type":"number"},"holderCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"trades":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"earnedLamports":{"$ref":"#/components/schemas/U64String"},"claimableLamports":{"$ref":"#/components/schemas/U64String"},"claimedLamports":{"$ref":"#/components/schemas/U64String"},"holderRewardsLamports":{"$ref":"#/components/schemas/U64String"}},"required":["mint","name","ticker","image","mode","creatorPct","holdersPct","createdAt","graduated","curveProgressPct","marketCapSol","holderCount","trades","earnedLamports","claimableLamports","claimedLamports","holderRewardsLamports"],"additionalProperties":false}}},"required":["wallet","totals","coins"],"additionalProperties":false},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"description":"Stable machine-readable code.","type":"string","enum":["bad_request","invalid_params","invalid_json","unauthorized","forbidden","not_found","conflict","payload_too_large","rate_limited","internal","upstream_error","unavailable","slippage","graduating","insufficient_funds","expired","chain_rejected","copy_exists","mint_taken","launch_limit","tx_mismatch","signature_invalid","already_submitted","image_fetch_failed"]},"message":{"description":"Plain-language message, safe to show to a user.","type":"string"},"details":{"description":"Extra fields for some codes, e.g. suggestSlippageBps or the existing mint.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false},"FeeSplit":{"type":"object","properties":{"tier":{"description":"Tier key, e.g. creator-100, holders, split-50.","type":"string"},"mode":{"description":"Who earns the fee: the creator, holders, or both.","type":"string","enum":["creator","holders","split"]},"totalPct":{"description":"Total pool fee after the opening window, percent of the SOL side.","type":"number"},"creatorPct":{"type":"number"},"holdersPct":{"type":"number"},"platformPct":{"description":"Pad share. 75% of it buys and burns $JUSTI, 25% goes to the dev wallet.","type":"number"},"meteoraPct":{"description":"Meteora protocol share (20% of the pool fee).","type":"number"},"creatorOnchainPercent":{"description":"creatorTradingFeePercentage on the DBC config.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"poolFeeNumerator":{"description":"Pool fee numerator over 1e9 after the window.","$ref":"#/components/schemas/U64String"}},"required":["tier","mode","totalPct","creatorPct","holdersPct","platformPct","meteoraPct","creatorOnchainPercent","poolFeeNumerator"],"additionalProperties":false},"HolderPage":{"type":"object","properties":{"mint":{"$ref":"#/components/schemas/Address"},"snapshotAt":{"anyOf":[{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"holderCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"holders":{"type":"array","items":{"type":"object","properties":{"rank":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"owner":{"$ref":"#/components/schemas/Address"},"amount":{"$ref":"#/components/schemas/U64String"},"pctOfSupply":{"type":"number"},"isWallet":{"description":"false for pools and other program accounts","type":"boolean"},"isCreator":{"type":"boolean"}},"required":["rank","owner","amount","pctOfSupply","isWallet","isCreator"],"additionalProperties":false}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["mint","snapshotAt","holderCount","holders","nextCursor"],"additionalProperties":false},"KeyCreated":{"type":"object","properties":{"key":{"description":"jf_live_... Store it now; only its hash is kept.","type":"string"},"record":{"$ref":"#/components/schemas/ApiKey"},"message":{"type":"string"}},"required":["key","record","message"],"additionalProperties":false},"Launch":{"type":"object","properties":{"launchId":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"status":{"type":"string","enum":["built","submitted","live","failed","expired"]},"mint":{"$ref":"#/components/schemas/Address"},"curvePool":{"$ref":"#/components/schemas/Address"},"config":{"$ref":"#/components/schemas/Address"},"tier":{"type":"string"},"creator":{"$ref":"#/components/schemas/Address"},"name":{"type":"string"},"ticker":{"type":"string"},"customMint":{"type":"boolean"},"signature":{"anyOf":[{"type":"string"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"devBuyLamports":{"$ref":"#/components/schemas/U64String"},"devBuyTokens":{"$ref":"#/components/schemas/U64String"},"lastValidBlockHeight":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"metadataUri":{"type":"string"},"image":{"type":"string"},"viaApi":{"type":"boolean"},"partner":{"description":"Label of the API key that built it.","anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"updatedAt":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["launchId","status","mint","curvePool","config","tier","creator","name","ticker","customMint","signature","error","devBuyLamports","devBuyTokens","lastValidBlockHeight","metadataUri","image","viaApi","partner","createdAt","updatedAt"],"additionalProperties":false},"LaunchBuilt":{"type":"object","properties":{"launchId":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"mint":{"$ref":"#/components/schemas/Address"},"customMint":{"type":"boolean"},"vanity":{"description":"A ...JUST key from the pool.","type":"boolean"},"signers":{"type":"array","items":{"type":"object","properties":{"pubkey":{"$ref":"#/components/schemas/Address"},"role":{"type":"string","enum":["payer","mint","other"]},"signed":{"type":"boolean"}},"required":["pubkey","role","signed"],"additionalProperties":false}},"curvePool":{"$ref":"#/components/schemas/Address"},"config":{"$ref":"#/components/schemas/Address"},"tier":{"type":"string"},"fees":{"type":"object","properties":{"tier":{"type":"string"},"mode":{"description":"Who earns the fee: the creator, holders, or both.","type":"string","enum":["creator","holders","split"]},"totalPct":{"type":"number"},"platformPct":{"type":"number"},"creatorPct":{"type":"number"},"holdersPct":{"type":"number"},"protocolPct":{"type":"number"},"creatorOnchainPercent":{"type":"number"},"poolFeeNumerator":{"$ref":"#/components/schemas/U64String"}},"required":["tier","mode","totalPct","platformPct","creatorPct","holdersPct","protocolPct","creatorOnchainPercent","poolFeeNumerator"],"additionalProperties":false},"devBuyLamports":{"$ref":"#/components/schemas/U64String"},"devBuyTokens":{"$ref":"#/components/schemas/U64String"},"devBuyPctOfSupply":{"type":"number"},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"computeUnits":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"tipLamports":{"$ref":"#/components/schemas/U64String"},"lastValidBlockHeight":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"metadataUri":{"type":"string"},"image":{"type":"string"},"transaction":{"type":"string"},"hidden":{"description":"Present when the launch was built hidden (admin).","type":"boolean"},"testConfig":{"description":"Present when built on the test config (admin).","type":"boolean"}},"required":["launchId","mint","customMint","vanity","signers","curvePool","config","tier","fees","devBuyLamports","devBuyTokens","devBuyPctOfSupply","bytes","computeUnits","tipLamports","lastValidBlockHeight","metadataUri","image","transaction"],"additionalProperties":false},"LaunchRequest":{"type":"object","properties":{"wallet":{"description":"Creator wallet: pays, signs, is the pool creator.","$ref":"#/components/schemas/Address"},"name":{"type":"string","minLength":2,"maxLength":32},"ticker":{"description":"2 to 10 letters or numbers; a leading $ is dropped.","type":"string","minLength":2,"maxLength":11},"description":{"default":"","type":"string","maxLength":280},"image":{"description":"https URL (fetched by the server: public hosts only, 5 MB max, 8 s) or a data:image/...;base64 URL up to 500 KB.","type":"string","minLength":10,"maxLength":700000},"banner":{"description":"Optional 3:1 banner, https URL or data URL (1 MB). Site only, not on chain.","anyOf":[{"type":"string","minLength":10,"maxLength":1400000},{"type":"null"}]},"xUrl":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"telegramUrl":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"website":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"mode":{"description":"Who earns the fee: the creator, holders, or both.","type":"string","enum":["creator","holders","split"]},"creatorBps":{"description":"Creator fee in bps (creator: 0-250 step 25; split: 25-200 step 25; holders: 0).","default":0,"type":"integer","minimum":0,"maximum":250},"devBuyLamports":{"description":"Dev buy in the create transaction. Capped at 15% of supply.","default":"0","$ref":"#/components/schemas/U64String"},"mint":{"description":"Custom (vanity) mint public key. The integrator's client holds the keypair and signs the returned transaction with it. Never send the secret key. Without it the server uses a ...JUST key from its pool (already signed in).","$ref":"#/components/schemas/Address"},"hidden":{"description":"Admin only (X-Admin-Token header): the coin never appears on the board, live feeds, token list or stats. Its page and APIs by mint still work.","type":"boolean"},"testConfig":{"description":"Admin only (X-Admin-Token header): launch on the server's test config (holders tier, low graduation threshold). Always hidden.","type":"boolean"}},"required":["wallet","name","ticker","image","mode"]},"LaunchSubmitted":{"type":"object","properties":{"status":{"type":"string","enum":["live","submitted"]},"mint":{"$ref":"#/components/schemas/Address"},"signature":{"type":"string"}},"required":["status","mint","signature"],"additionalProperties":false},"MintPool":{"type":"object","properties":{"suffix":{"type":"string"},"available":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"ready":{"type":"boolean"},"fallback":{"type":"string"}},"required":["suffix","available","ready","fallback"],"additionalProperties":false},"Pad":{"type":"object","properties":{"launchesEnabled":{"type":"boolean"},"tiers":{"type":"array","items":{"type":"object","properties":{"tier":{"description":"Tier key, e.g. creator-100, holders, split-50.","type":"string"},"mode":{"description":"Who earns the fee: the creator, holders, or both.","type":"string","enum":["creator","holders","split"]},"totalPct":{"description":"Total pool fee after the opening window, percent of the SOL side.","type":"number"},"creatorPct":{"type":"number"},"holdersPct":{"type":"number"},"platformPct":{"description":"Pad share. 75% of it buys and burns $JUSTI, 25% goes to the dev wallet.","type":"number"},"meteoraPct":{"description":"Meteora protocol share (20% of the pool fee).","type":"number"},"creatorOnchainPercent":{"description":"creatorTradingFeePercentage on the DBC config.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"poolFeeNumerator":{"description":"Pool fee numerator over 1e9 after the window.","$ref":"#/components/schemas/U64String"},"creatorBps":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"holderBps":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"config":{"anyOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]},"live":{"type":"boolean"},"maxDevBuyLamports":{"$ref":"#/components/schemas/U64String"},"sniperWindow":{"$ref":"#/components/schemas/SniperWindow"}},"required":["tier","mode","totalPct","creatorPct","holdersPct","platformPct","meteoraPct","creatorOnchainPercent","poolFeeNumerator","creatorBps","holderBps","config","live","maxDevBuyLamports","sniperWindow"],"additionalProperties":false}},"platformSplit":{"type":"object","properties":{"burnJustiPct":{"type":"number"},"devWalletPct":{"type":"number"}},"required":["burnJustiPct","devWalletPct"],"additionalProperties":false},"meteoraSharePct":{"type":"number"},"sniperWindow":{"type":"object","properties":{"seconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"startPct":{"type":"number"},"extraSplit":{"type":"object","properties":{"burnCoinPct":{"type":"number"},"burnJustiPct":{"type":"number"},"platformPct":{"type":"number"}},"required":["burnCoinPct","burnJustiPct","platformPct"],"additionalProperties":false}},"required":["seconds","startPct","extraSplit"],"additionalProperties":false},"devBuyMaxPctOfSupply":{"type":"number"},"copyWindowHours":{"type":"number"},"holderRoundSec":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"minPayoutLamports":{"$ref":"#/components/schemas/U64String"},"totalSupply":{"$ref":"#/components/schemas/U64String"},"decimals":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"graduationQuoteLamports":{"$ref":"#/components/schemas/U64String"},"graduation":{"type":"object","properties":{"venue":{"type":"string"},"lpLockedPct":{"type":"number"},"lpSplit":{"type":"object","properties":{"platformPct":{"type":"number"},"creatorPct":{"type":"number"}},"required":["platformPct","creatorPct"],"additionalProperties":false}},"required":["venue","lpLockedPct","lpSplit"],"additionalProperties":false},"jitoTipLamports":{"$ref":"#/components/schemas/U64String"},"justiMint":{"anyOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]},"now":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["launchesEnabled","tiers","platformSplit","meteoraSharePct","sniperWindow","devBuyMaxPctOfSupply","copyWindowHours","holderRoundSec","minPayoutLamports","totalSupply","decimals","graduationQuoteLamports","graduation","jitoTipLamports","justiMint","now"],"additionalProperties":false},"PayoutPage":{"type":"object","properties":{"payouts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"wallet":{"$ref":"#/components/schemas/Address"},"lamports":{"$ref":"#/components/schemas/U64String"},"signature":{"type":"string"},"confirmedAt":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","wallet","lamports","signature","confirmedAt"],"additionalProperties":false}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["payouts","nextCursor"],"additionalProperties":false},"PlatformStats":{"type":"object","properties":{"coins":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"graduated":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"coinsLast24h":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"trades":{"$ref":"#/components/schemas/U64String"},"volumeLamports":{"$ref":"#/components/schemas/U64String"},"volume24hLamports":{"$ref":"#/components/schemas/U64String"},"traders24h":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"padClaimedLamports":{"$ref":"#/components/schemas/U64String"},"holderPaidLamports":{"$ref":"#/components/schemas/U64String"},"holderPaidWallets":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"justiBurn":{"type":"object","properties":{"lamports":{"$ref":"#/components/schemas/U64String"},"tokens":{"$ref":"#/components/schemas/U64String"}},"required":["lamports","tokens"],"additionalProperties":false},"coinBurnLamports":{"$ref":"#/components/schemas/U64String"},"creatorClaimedLamports":{"$ref":"#/components/schemas/U64String"},"now":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["coins","graduated","coinsLast24h","trades","volumeLamports","volume24hLamports","traders24h","padClaimedLamports","holderPaidLamports","holderPaidWallets","justiBurn","coinBurnLamports","creatorClaimedLamports","now"],"additionalProperties":false},"Protocol":{"type":"object","properties":{"name":{"type":"string"},"site":{"type":"string"},"api":{"type":"string"},"dbcProgram":{"$ref":"#/components/schemas/Address"},"dammV2Program":{"$ref":"#/components/schemas/Address"},"quoteMint":{"$ref":"#/components/schemas/Address"},"configs":{"type":"array","items":{"type":"object","properties":{"tier":{"description":"Tier key, e.g. creator-100, holders, split-50.","type":"string"},"mode":{"description":"Who earns the fee: the creator, holders, or both.","type":"string","enum":["creator","holders","split"]},"totalPct":{"description":"Total pool fee after the opening window, percent of the SOL side.","type":"number"},"creatorPct":{"type":"number"},"holdersPct":{"type":"number"},"platformPct":{"description":"Pad share. 75% of it buys and burns $JUSTI, 25% goes to the dev wallet.","type":"number"},"meteoraPct":{"description":"Meteora protocol share (20% of the pool fee).","type":"number"},"creatorOnchainPercent":{"description":"creatorTradingFeePercentage on the DBC config.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"poolFeeNumerator":{"description":"Pool fee numerator over 1e9 after the window.","$ref":"#/components/schemas/U64String"},"address":{"anyOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]},"creatorBps":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"holderBps":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["tier","mode","totalPct","creatorPct","holdersPct","platformPct","meteoraPct","creatorOnchainPercent","poolFeeNumerator","address","creatorBps","holderBps"],"additionalProperties":false}},"feeClaimer":{"anyOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]},"partnerMetadata":{"anyOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]},"lookupTable":{"anyOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]},"justiMint":{"anyOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]},"metadata":{"type":"object","properties":{"createdOn":{"type":"string"},"uriPattern":{"type":"string"},"imagePattern":{"type":"string"}},"required":["createdOn","uriPattern","imagePattern"],"additionalProperties":false},"vanitySuffix":{"type":"string"},"coinUrlPattern":{"type":"string"},"dammMigrationConfig":{"$ref":"#/components/schemas/Address"},"howToTag":{"type":"string"}},"required":["name","site","api","dbcProgram","dammV2Program","quoteMint","configs","feeClaimer","partnerMetadata","lookupTable","justiMint","metadata","vanitySuffix","coinUrlPattern","dammMigrationConfig","howToTag"],"additionalProperties":false},"Quote":{"type":"object","properties":{"mint":{"$ref":"#/components/schemas/Address"},"side":{"description":"buy: SOL in, coin out. sell: coin in, SOL out.","type":"string","enum":["buy","sell"]},"route":{"description":"curve: DBC swap. damm: direct DAMM v2 swap. jupiter: fallback only.","type":"string","enum":["curve","damm","jupiter"]},"fallback":{"description":"true when Jupiter stands in for a failed direct route.","type":"boolean"},"amountIn":{"description":"Lamports for a buy, raw tokens for a sell. Fee included.","$ref":"#/components/schemas/U64String"},"expectedOut":{"$ref":"#/components/schemas/U64String"},"minOut":{"description":"expectedOut less slippage; the swap fails below it.","$ref":"#/components/schemas/U64String"},"slippageBps":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priceImpactPct":{"type":"number"},"priceSol":{"description":"Spot before the trade, SOL per whole token.","type":"number"},"priceAfterSol":{"type":"number"},"marketCapSol":{"type":"number"},"curveProgressPct":{"anyOf":[{"type":"number"},{"type":"null"}]},"fee":{"type":"object","properties":{"token":{"description":"The side the fee is taken in. DAMM v2 pools in both-token mode take the buy fee in the coin.","type":"string","enum":["SOL","TOKEN"]},"total":{"description":"Raw units of fee.token.","$ref":"#/components/schemas/U64String"},"totalLamports":{"description":"The fee as lamports (token fees valued at spot).","$ref":"#/components/schemas/U64String"},"pct":{"description":"Fee as percent of the trade on the fee side.","type":"number"},"windowSecondsLeft":{"description":"Seconds left in the opening sniper window.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"windowExtra":{"description":"Part of total above the normal tier fee (sniper window).","$ref":"#/components/schemas/U64String"},"parts":{"description":"Where the fee goes. Sums to total.","type":"object","properties":{"creator":{"$ref":"#/components/schemas/U64String"},"holders":{"$ref":"#/components/schemas/U64String"},"platformBurnJusti":{"$ref":"#/components/schemas/U64String"},"platformWallet":{"$ref":"#/components/schemas/U64String"},"sniperBurnCoin":{"$ref":"#/components/schemas/U64String"},"sniperBurnJusti":{"$ref":"#/components/schemas/U64String"},"sniperPlatform":{"$ref":"#/components/schemas/U64String"},"meteora":{"$ref":"#/components/schemas/U64String"},"liquidityProviders":{"$ref":"#/components/schemas/U64String"},"referral":{"$ref":"#/components/schemas/U64String"}},"required":["creator","holders","platformBurnJusti","platformWallet","sniperBurnCoin","sniperBurnJusti","sniperPlatform","meteora","liquidityProviders","referral"],"additionalProperties":false}},"required":["token","total","totalLamports","pct","windowSecondsLeft","windowExtra","parts"],"additionalProperties":false},"now":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["mint","side","route","fallback","amountIn","expectedOut","minOut","slippageBps","priceImpactPct","priceSol","priceAfterSol","marketCapSol","curveProgressPct","fee","now"],"additionalProperties":false},"Safety":{"type":"object","properties":{"fixedSupply":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"mintAuthorityRevoked":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"freezeAuthorityRevoked":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"metadataImmutable":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"lpLockedPct":{"description":"Share of graduation LP that is permanently locked (100 on every justi config).","type":"number"},"devBuyPct":{"description":"Dev buy in the create transaction, percent of supply.","type":"number"},"devHoldsPct":{"description":"Creator wallet's balance at the last holder snapshot, percent of supply.","type":"number"},"top10Pct":{"description":"Top 10 wallet holders, percent of supply, at the last snapshot.","type":"number"},"holdersAt":{"anyOf":[{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["fixedSupply","mintAuthorityRevoked","freezeAuthorityRevoked","metadataImmutable","lpLockedPct","devBuyPct","devHoldsPct","top10Pct","holdersAt"],"additionalProperties":false},"Signature":{"description":"Base58 transaction signature.","type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{64,90}$"},"SniperWindow":{"type":"object","properties":{"seconds":{"description":"Length of the opening window.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"startPct":{"description":"Fee at second 0.","type":"number"},"schedule":{"description":"Fee for each second of the window for this tier; after the last entry the tier fee applies.","type":"array","items":{"type":"object","properties":{"second":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"feePct":{"type":"number"}},"required":["second","feePct"],"additionalProperties":false}},"extraSplit":{"description":"How the pad's share of the fee above the normal rate is split.","type":"object","properties":{"burnCoinPct":{"type":"number"},"burnJustiPct":{"type":"number"},"platformPct":{"type":"number"}},"required":["burnCoinPct","burnJustiPct","platformPct"],"additionalProperties":false}},"required":["seconds","startPct","schedule","extraSplit"],"additionalProperties":false},"Status":{"type":"object","properties":{"ok":{"type":"boolean"},"launchesEnabled":{"type":"boolean"},"tradingEnabled":{"type":"boolean"},"webhooksEnabled":{"type":"boolean"},"ingest":{"type":"object","properties":{"connected":{"type":"boolean"},"pools":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["connected","pools"],"additionalProperties":false},"streams":{"type":"object","properties":{"websocketClients":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["websocketClients"],"additionalProperties":false},"now":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["ok","launchesEnabled","tradingEnabled","webhooksEnabled","ingest","streams","now"],"additionalProperties":false},"SubmitRequest":{"type":"object","properties":{"swapId":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"transaction":{"description":"Base64 signed transaction.","type":"string","minLength":100,"maxLength":4000,"pattern":"^[A-Za-z0-9+/=]+$"},"waitMs":{"type":"integer","minimum":0,"maximum":25000}},"required":["swapId","transaction"]},"SwapBuilt":{"type":"object","properties":{"swapId":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"route":{"type":"string","enum":["curve","damm","jupiter"]},"fallback":{"type":"boolean"},"quote":{"$ref":"#/components/schemas/Quote"},"transaction":{"description":"Base64 unsigned v0 transaction.","type":"string"},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"computeUnitsConsumed":{"description":"From the simulation.","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"computeUnitLimit":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priorityMicroLamports":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"jitoTipLamports":{"$ref":"#/components/schemas/U64String"},"lastValidBlockHeight":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["swapId","route","fallback","quote","transaction","bytes","computeUnitsConsumed","computeUnitLimit","priorityMicroLamports","jitoTipLamports","lastValidBlockHeight"],"additionalProperties":false},"SwapRequest":{"type":"object","properties":{"mint":{"$ref":"#/components/schemas/Address"},"wallet":{"description":"Fee payer and signer.","$ref":"#/components/schemas/Address"},"side":{"description":"buy: SOL in, coin out. sell: coin in, SOL out.","type":"string","enum":["buy","sell"]},"amount":{"description":"Lamports to spend on a buy, raw tokens to sell.","$ref":"#/components/schemas/U64String"},"slippageBps":{"description":"Basis points, 10 to 5000. Default 1000 (10%).","default":1000,"type":"integer","minimum":10,"maximum":5000},"priorityFee":{"description":"\"auto\" (Helius estimate or recent fees on the pool) or micro-lamports per compute unit.","default":"auto","anyOf":[{"type":"string","const":"auto"},{"type":"integer","minimum":0,"maximum":50000000}]},"computeUnitLimit":{"description":"\"auto\": simulated use x 1.2 + 5000.","default":"auto","anyOf":[{"type":"string","const":"auto"},{"type":"integer","minimum":20000,"maximum":1400000}]},"jitoTipLamports":{"description":"Adds a tip transfer to a Jito tip account; submit then also sends through Jito. 0 or 1000 to 100000000.","$ref":"#/components/schemas/U64String"}},"required":["mint","wallet","side","amount"]},"SwapStatus":{"type":"object","properties":{"swapId":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"status":{"type":"string","enum":["built","submitted","confirmed","failed","expired"]},"signature":{"anyOf":[{"type":"string"},{"type":"null"}]},"mint":{"$ref":"#/components/schemas/Address"},"side":{"description":"buy: SOL in, coin out. sell: coin in, SOL out.","type":"string","enum":["buy","sell"]},"route":{"type":"string"},"error":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"suggestSlippageBps":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["code","message"],"additionalProperties":false},{"type":"null"}]}},"required":["swapId","status","signature","mint","side","route","error"],"additionalProperties":false},"TokenDetail":{"type":"object","properties":{"mint":{"$ref":"#/components/schemas/Address"},"name":{"type":"string"},"ticker":{"type":"string"},"description":{"type":"string"},"image":{"description":"Image URL (served by this API).","anyOf":[{"type":"string"},{"type":"null"}]},"banner":{"description":"3:1 banner URL, site only, not on chain.","anyOf":[{"type":"string"},{"type":"null"}]},"metadataUri":{"description":"The on-chain metadata URI (Metaplex JSON).","anyOf":[{"type":"string"},{"type":"null"}]},"creator":{"$ref":"#/components/schemas/Address"},"createdAt":{"description":"Pool activation time.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"description":"curve: trading on the bonding curve. graduating: curve full, migration pending. graduated: trading on DAMM v2.","type":"string","enum":["curve","graduating","graduated"]},"curvePool":{"description":"Meteora DBC virtual pool.","$ref":"#/components/schemas/Address"},"config":{"description":"DBC config (fee tier).","$ref":"#/components/schemas/Address"},"dammPool":{"description":"Meteora DAMM v2 pool after graduation.","anyOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]},"fees":{"$ref":"#/components/schemas/FeeSplit"},"curveProgressPct":{"description":"Share of the graduation threshold raised, 0 to 100.","type":"number"},"priceSol":{"description":"SOL per whole token, from the pool's sqrt price.","type":"number"},"marketCapSol":{"description":"priceSol x 1,000,000,000 supply.","type":"number"},"holderCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"trades":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"volume24hLamports":{"$ref":"#/components/schemas/U64String"},"lastTradeAt":{"anyOf":[{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"dexPaid":{"description":"Approved DEX Screener Enhanced Token Info order.","type":"boolean"},"social":{"type":"object","properties":{"x":{"anyOf":[{"type":"string"},{"type":"null"}]},"telegram":{"anyOf":[{"type":"string"},{"type":"null"}]},"website":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["x","telegram","website"],"additionalProperties":false},"metadata":{"anyOf":[{"$ref":"#/components/schemas/TokenMetadata"},{"type":"null"}]},"createSignature":{"type":"string"},"safety":{"$ref":"#/components/schemas/Safety"},"curve":{"type":"object","properties":{"quoteReserveLamports":{"$ref":"#/components/schemas/U64String"},"graduationQuoteLamports":{"$ref":"#/components/schemas/U64String"},"progressPct":{"type":"number"}},"required":["quoteReserveLamports","graduationQuoteLamports","progressPct"],"additionalProperties":false},"graduation":{"type":"object","properties":{"graduated":{"type":"boolean"},"dammPool":{"anyOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]},"migratedAt":{"anyOf":[{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"migrationSignature":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["graduated","dammPool","migratedAt","migrationSignature"],"additionalProperties":false},"sniperWindow":{"type":"object","properties":{"seconds":{"description":"Length of the opening window.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"startPct":{"description":"Fee at second 0.","type":"number"},"schedule":{"description":"Fee for each second of the window for this tier; after the last entry the tier fee applies.","type":"array","items":{"type":"object","properties":{"second":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"feePct":{"type":"number"}},"required":["second","feePct"],"additionalProperties":false}},"extraSplit":{"description":"How the pad's share of the fee above the normal rate is split.","type":"object","properties":{"burnCoinPct":{"type":"number"},"burnJustiPct":{"type":"number"},"platformPct":{"type":"number"}},"required":["burnCoinPct","burnJustiPct","platformPct"],"additionalProperties":false},"endsAt":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"feeNowPct":{"type":"number"},"buyers":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"boughtPctOfSupply":{"type":"number"},"extraFeeLamports":{"$ref":"#/components/schemas/U64String"}},"required":["seconds","startPct","schedule","extraSplit","endsAt","feeNowPct","buyers","boughtPctOfSupply","extraFeeLamports"],"additionalProperties":false},"totals":{"type":"object","properties":{"volumeLamports":{"$ref":"#/components/schemas/U64String"},"holderRewardsLamports":{"$ref":"#/components/schemas/U64String"},"holderRounds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"holderWallets":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"burnedTokens":{"$ref":"#/components/schemas/U64String"},"creatorClaimedLamports":{"$ref":"#/components/schemas/U64String"},"creatorUnclaimedLamports":{"$ref":"#/components/schemas/U64String"}},"required":["volumeLamports","holderRewardsLamports","holderRounds","holderWallets","burnedTokens","creatorClaimedLamports","creatorUnclaimedLamports"],"additionalProperties":false},"dex":{"type":"object","properties":{"paid":{"type":"boolean"},"checkedAt":{"anyOf":[{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"url":{"type":"string"}},"required":["paid","checkedAt","url"],"additionalProperties":false},"url":{"type":"string"}},"required":["mint","name","ticker","description","image","banner","metadataUri","creator","createdAt","status","curvePool","config","dammPool","fees","curveProgressPct","priceSol","marketCapSol","holderCount","trades","volume24hLamports","lastTradeAt","dexPaid","social","metadata","createSignature","safety","curve","graduation","sniperWindow","totals","dex","url"],"additionalProperties":false},"TokenList":{"type":"object","properties":{"name":{"type":"string"},"timestamp":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"tokens":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"address":{"$ref":"#/components/schemas/Address"},"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"logoURI":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadataUri":{"anyOf":[{"type":"string"},{"type":"null"}]},"curvePool":{"$ref":"#/components/schemas/Address"},"dammPool":{"anyOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]},"config":{"$ref":"#/components/schemas/Address"},"creator":{"$ref":"#/components/schemas/Address"},"createdAt":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"description":"curve: trading on the bonding curve. graduating: curve full, migration pending. graduated: trading on DAMM v2.","type":"string","enum":["curve","graduating","graduated"]}},"required":["chainId","address","name","symbol","decimals","logoURI","metadataUri","curvePool","dammPool","config","creator","createdAt","status"],"additionalProperties":false}}},"required":["name","timestamp","count","tokens"],"additionalProperties":false},"TokenMetadata":{"description":"Metaplex-standard token metadata JSON we host (the on-chain uri).","type":"object","properties":{"name":{"type":"string"},"symbol":{"type":"string"},"description":{"type":"string"},"image":{"type":"string"},"showName":{"type":"boolean"},"createdOn":{"type":"string"},"twitter":{"type":"string"},"telegram":{"type":"string"},"website":{"type":"string"},"banner":{"type":"string"}},"required":["name","symbol","description","image","showName","createdOn"],"additionalProperties":false},"TokenPage":{"type":"object","properties":{"tokens":{"type":"array","items":{"$ref":"#/components/schemas/TokenSummary"}},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tokens","total","nextCursor"],"additionalProperties":false},"TokenRewards":{"type":"object","properties":{"mint":{"$ref":"#/components/schemas/Address"},"holdersPct":{"type":"number"},"roundSec":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"nextRoundAt":{"anyOf":[{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"totals":{"type":"object","properties":{"creditedLamports":{"$ref":"#/components/schemas/U64String"},"rounds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"wallets":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["creditedLamports","rounds","wallets"],"additionalProperties":false},"rounds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"poolLamports":{"$ref":"#/components/schemas/U64String"},"creditedLamports":{"$ref":"#/components/schemas/U64String"},"wallets":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"at":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","poolLamports","creditedLamports","wallets","at"],"additionalProperties":false}}},"required":["mint","holdersPct","roundSec","nextRoundAt","totals","rounds"],"additionalProperties":false},"TokenSummary":{"type":"object","properties":{"mint":{"$ref":"#/components/schemas/Address"},"name":{"type":"string"},"ticker":{"type":"string"},"description":{"type":"string"},"image":{"description":"Image URL (served by this API).","anyOf":[{"type":"string"},{"type":"null"}]},"banner":{"description":"3:1 banner URL, site only, not on chain.","anyOf":[{"type":"string"},{"type":"null"}]},"metadataUri":{"description":"The on-chain metadata URI (Metaplex JSON).","anyOf":[{"type":"string"},{"type":"null"}]},"creator":{"$ref":"#/components/schemas/Address"},"createdAt":{"description":"Pool activation time.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"description":"curve: trading on the bonding curve. graduating: curve full, migration pending. graduated: trading on DAMM v2.","type":"string","enum":["curve","graduating","graduated"]},"curvePool":{"description":"Meteora DBC virtual pool.","$ref":"#/components/schemas/Address"},"config":{"description":"DBC config (fee tier).","$ref":"#/components/schemas/Address"},"dammPool":{"description":"Meteora DAMM v2 pool after graduation.","anyOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]},"fees":{"$ref":"#/components/schemas/FeeSplit"},"curveProgressPct":{"description":"Share of the graduation threshold raised, 0 to 100.","type":"number"},"priceSol":{"description":"SOL per whole token, from the pool's sqrt price.","type":"number"},"marketCapSol":{"description":"priceSol x 1,000,000,000 supply.","type":"number"},"holderCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"trades":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"volume24hLamports":{"$ref":"#/components/schemas/U64String"},"lastTradeAt":{"anyOf":[{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"dexPaid":{"description":"Approved DEX Screener Enhanced Token Info order.","type":"boolean"},"social":{"type":"object","properties":{"x":{"anyOf":[{"type":"string"},{"type":"null"}]},"telegram":{"anyOf":[{"type":"string"},{"type":"null"}]},"website":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["x","telegram","website"],"additionalProperties":false}},"required":["mint","name","ticker","description","image","banner","metadataUri","creator","createdAt","status","curvePool","config","dammPool","fees","curveProgressPct","priceSol","marketCapSol","holderCount","trades","volume24hLamports","lastTradeAt","dexPaid","social"],"additionalProperties":false},"Trade":{"type":"object","properties":{"signature":{"$ref":"#/components/schemas/Signature"},"ix":{"description":"Instruction position in the transaction. With signature it is unique.","type":"string"},"venue":{"description":"curve: the Meteora DBC bonding curve. damm: the Meteora DAMM v2 pool after graduation.","type":"string","enum":["curve","damm"]},"side":{"description":"buy: SOL in, coin out. sell: coin in, SOL out.","type":"string","enum":["buy","sell"]},"wallet":{"$ref":"#/components/schemas/Address"},"solLamports":{"$ref":"#/components/schemas/U64String"},"tokenAmount":{"description":"Raw token units (6 decimals).","$ref":"#/components/schemas/U64String"},"priceSol":{"description":"Pool price right after the trade, SOL per whole token.","anyOf":[{"type":"number"},{"type":"null"}]},"ts":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"slot":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"inWindow":{"description":"Inside the opening sniper window.","type":"boolean"}},"required":["signature","ix","venue","side","wallet","solLamports","tokenAmount","priceSol","ts","slot","inWindow"],"additionalProperties":false},"TradePage":{"type":"object","properties":{"trades":{"type":"array","items":{"$ref":"#/components/schemas/Trade"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["trades","nextCursor"],"additionalProperties":false},"TxStatus":{"type":"object","properties":{"signature":{"$ref":"#/components/schemas/Signature"},"status":{"description":"unknown: the RPC has not seen it (not sent, dropped, or too old).","type":"string","enum":["pending","confirmed","finalized","failed","unknown"]},"slot":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"error":{"description":"The on-chain error when failed.","anyOf":[{},{"type":"null"}]},"kind":{"anyOf":[{"type":"string","enum":["swap","launch"]},{"type":"null"}]},"refId":{"description":"swapId or launchId when it was built here.","anyOf":[{"type":"string"},{"type":"null"}]}},"required":["signature","status","slot","error","kind","refId"],"additionalProperties":false},"U64String":{"description":"Unsigned integer as a decimal string (may exceed 2^53).","type":"string","pattern":"^\\d{1,20}$"},"WalletRewards":{"type":"object","properties":{"wallet":{"$ref":"#/components/schemas/Address"},"totals":{"type":"object","properties":{"earnedLamports":{"$ref":"#/components/schemas/U64String"},"paidLamports":{"$ref":"#/components/schemas/U64String"},"owedLamports":{"$ref":"#/components/schemas/U64String"},"minPayoutLamports":{"$ref":"#/components/schemas/U64String"}},"required":["earnedLamports","paidLamports","owedLamports","minPayoutLamports"],"additionalProperties":false},"coins":{"type":"array","items":{"type":"object","properties":{"mint":{"$ref":"#/components/schemas/Address"},"ticker":{"type":"string"},"earnedLamports":{"$ref":"#/components/schemas/U64String"},"rounds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lastRoundAt":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["mint","ticker","earnedLamports","rounds","lastRoundAt"],"additionalProperties":false}},"payouts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"lamports":{"$ref":"#/components/schemas/U64String"},"status":{"type":"string","enum":["planned","sent","confirmed"]},"signature":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"confirmedAt":{"anyOf":[{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["id","lamports","status","signature","createdAt","confirmedAt"],"additionalProperties":false}}},"required":["wallet","totals","coins","payouts"],"additionalProperties":false},"Webhook":{"type":"object","properties":{"id":{"description":"UUID.","type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},"url":{"type":"string"},"events":{"type":"array","items":{"type":"string","enum":["launch.created","trade","coin.graduated","burn","buyback","payout","creator.claim"]}},"mints":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/Address"}},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"enabled":{"type":"boolean"},"disabledReason":{"anyOf":[{"type":"string"},{"type":"null"}]},"consecutiveFailures":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"updatedAt":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lastSuccessAt":{"anyOf":[{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"lastFailureAt":{"anyOf":[{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["id","url","events","mints","description","enabled","disabledReason","consecutiveFailures","createdAt","updatedAt","lastSuccessAt","lastFailureAt"],"additionalProperties":false},"WebhookCreate":{"type":"object","properties":{"url":{"description":"https only, public hosts only.","type":"string","maxLength":500,"format":"uri"},"events":{"minItems":1,"type":"array","items":{"type":"string","enum":["launch.created","trade","coin.graduated","burn","buyback","payout","creator.claim"]}},"mints":{"description":"Only for trade events. Null or absent: every coin.","anyOf":[{"maxItems":100,"type":"array","items":{"$ref":"#/components/schemas/Address"}},{"type":"null"}]},"description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]}},"required":["url","events"]},"WebhookCreated":{"type":"object","properties":{"webhook":{"$ref":"#/components/schemas/Webhook"},"secret":{"description":"HMAC secret. Store it now; it is not shown again.","type":"string"}},"required":["webhook","secret"],"additionalProperties":false},"WebhookDelivery":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"anyOf":[{"type":"string"},{"type":"null"}]},"eventType":{"type":"string"},"status":{"type":"string","enum":["pending","delivered","failed","cancelled"]},"attempts":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"nextAttemptAt":{"anyOf":[{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"lastStatusCode":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"lastError":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastDurationMs":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"createdAt":{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"deliveredAt":{"anyOf":[{"description":"Unix time in seconds.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"payload":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","eventId","eventType","status","attempts","nextAttemptAt","lastStatusCode","lastError","lastDurationMs","createdAt","deliveredAt","payload"],"additionalProperties":false}},"securitySchemes":{"bearerKey":{"type":"http","scheme":"bearer","description":"API key: Authorization: Bearer jf_live_..."},"headerKey":{"type":"apiKey","in":"header","name":"X-API-Key"},"adminToken":{"type":"http","scheme":"bearer","description":"ADMIN_TOKEN, admin routes only."}}},"x-websocket":{"url":"wss://api.justi.fun/v1/ws","auth":"Optional ?key=jf_live_... (browsers) or Authorization: Bearer header.","channels":["launches","trades","trades:<mint>","graduations","burns"],"clientMessages":[{"op":"subscribe","channels":["trades:<mint>","launches"],"id":"optional correlation id"},{"op":"unsubscribe","channels":["launches"]},{"op":"ping"}],"serverMessages":["welcome","subscribed","event","heartbeat","pong","error"],"eventShape":{"type":"event","channel":"trades:<mint>","event":"trade","id":"evt_123","ts":1793092451,"data":"same data object as the webhook event of that type"},"limits":{"maxSubscriptions":{"anon":20,"free":50,"partner":500,"internal":2000},"messagesPer10s":30,"maxClientMessageBytes":4096,"heartbeatSec":20}}}