{"openapi":"3.0.3","info":{"title":"Yeeld API","description":"Read API for Yeeld launches, rewards, buybacks, revenue, and analytics. Use POST /v1/launches/pons/import to add a Pons v2 token by address. Dev tag endpoints (fund, stress) require API_FORK_RPC_URL.","version":"0.1.0"},"components":{"schemas":{}},"paths":{"/openapi.json":{"get":{"tags":["docs"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/health":{"get":{"tags":["health"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"service":{"type":"string"}},"required":["ok","service"]}}}}}}},"/v1/analytics/volume":{"get":{"tags":["analytics"],"parameters":[{"schema":{"type":"string","enum":["3600","86400"]},"in":"query","name":"interval","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}},"/v1/analytics/rewards":{"get":{"tags":["analytics"],"parameters":[{"schema":{"type":"string","enum":["3600","86400"]},"in":"query","name":"interval","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}},"/v1/analytics/protocol":{"get":{"tags":["analytics"],"parameters":[{"schema":{"type":"string","enum":["3600","86400"]},"in":"query","name":"interval","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}},"/v1/tokens":{"get":{"tags":["tokens"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false},{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"type":"string","maxLength":100},"in":"query","name":"search","required":false},{"schema":{"type":"string","maxLength":2000},"in":"query","name":"pairs","required":false},{"schema":{"type":"string","enum":["recent","market_cap","last_trade"]},"in":"query","name":"sort","required":false},{"schema":{"type":"string","enum":["true","false"]},"in":"query","name":"graduated","required":false},{"schema":{"type":"string"},"in":"query","name":"creator","required":false},{"schema":{"type":"string"},"in":"query","name":"account","required":false},{"schema":{"type":"string","enum":["pons","yeeld","all"]},"in":"query","name":"venue","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/tokens/{token}":{"get":{"tags":["tokens"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"token","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/tokens/{token}/trades":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"token","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/tokens/{token}/curve-trades":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"token","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/tokens/{token}/holders":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"token","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/tokens/{token}/fees":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"token","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/tokens/{token}/reward-accruals":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"token","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/tokens/{token}/reward-claims":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"token","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/tokens/{token}/locks":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"token","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/tokens/{token}/reward-rounds":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"token","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/tokens/{token}/reward-legs":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"token","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/tokens/{token}/orphan-sweeps":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"token","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/tokens/{token}/bribes":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"token","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/tokens/{token}/candles":{"get":{"tags":["tokens"],"parameters":[{"schema":{"type":"string","enum":["60","300","900","3600","14400","86400"]},"in":"query","name":"interval","required":false},{"schema":{"type":"integer","minimum":50,"maximum":2000},"in":"query","name":"limit","required":false},{"schema":{"type":"string"},"in":"path","name":"token","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}},"/v1/tokens/{token}/pons-chart":{"get":{"tags":["tokens"],"parameters":[{"schema":{"type":"string","enum":["5m","1h","6h","1d","all"]},"in":"query","name":"range","required":false},{"schema":{"type":"string"},"in":"path","name":"token","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}}}}}},"/v1/launches/pons":{"post":{"summary":"Record a Pons launch from its launch transaction hash","tags":["launches"],"description":"Parses the TokenLaunched event from the tx receipt and upserts yeeld_ops.platform_launch.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"transactionHash":{"type":"string","description":"0x-prefixed 32-byte launch transaction hash"}},"required":["transactionHash"]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/launches/pons/import":{"post":{"summary":"Manually import a Pons v2 token by address","tags":["launches"],"description":"Reads getLaunchedToken + token metadata on-chain and upserts the token into yeeld_ops.platform_launch so Markets and /coin/:address work. Safe to call repeatedly.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"Pons v2 token contract address (0x…)"}},"required":["token"]}}}},"responses":{"200":{"description":"Imported platform launch with logo/price enrichment","content":{"application/json":{"schema":{"description":"Imported platform launch with logo/price enrichment","type":"object","additionalProperties":true}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/v1/locks/{id}":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/accounts/{account}/locks":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"account","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/accounts/{account}/reward-claims":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"account","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/accounts/{account}/tokens/{token}/rewards":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"account","required":true},{"schema":{"type":"string"},"in":"path","name":"token","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/baskets":{"get":{"tags":["baskets"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}},"/v1/baskets/{basketId}":{"get":{"tags":["baskets"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"basketId","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/buybacks":{"get":{"tags":["buybacks"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false},{"schema":{"type":"string"},"in":"query","name":"cursor","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/buybacks/{scheduleId}":{"get":{"tags":["buybacks"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"scheduleId","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/buybacks/{scheduleId}/executions":{"get":{"tags":["buybacks"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false},{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"type":"string"},"in":"path","name":"scheduleId","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/protocol/revenue":{"get":{"tags":["revenue"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false},{"schema":{"type":"string"},"in":"query","name":"cursor","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/protocol/revenue/totals":{"get":{"tags":["revenue"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}},"/v1/protocol/yeeld-burns/total":{"get":{"tags":["revenue"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/protocol/yeeld-burns":{"get":{"tags":["revenue"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false},{"schema":{"type":"string"},"in":"query","name":"cursor","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/pairs":{"get":{"tags":["pairs"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}},"/v1/metadata/challenge":{"post":{"tags":["metadata"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"wallet":{"type":"string"}},"required":["wallet"]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/metadata":{"post":{"tags":["metadata"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/dev/fund":{"post":{"summary":"Fund a wallet on the local Anvil fork","tags":["dev"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"eth":{"type":"number"},"stocks":{"type":"boolean"},"tokenUnits":{"type":"number"}},"required":["address"]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/dev/stress":{"post":{"summary":"Start a local Anvil stress run (async job)","tags":["dev"],"description":"Spawns `pnpm stress:local` against API_FORK_RPC_URL. Local Anvil only. Poll GET /v1/dev/stress/{id} for status.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"wallets":{"type":"integer","minimum":2,"maximum":20,"default":3},"tokens":{"type":"integer","minimum":1,"maximum":20,"default":2},"graduatePercent":{"type":"integer","minimum":0,"maximum":100,"default":50},"rounds":{"type":"integer","minimum":1,"maximum":100,"default":5},"seed":{"type":"string"},"quote":{"type":"string","description":"Single quote symbol or address"},"quotes":{"type":"string","description":"Comma-separated quotes, e.g. AAPL,WETH,USDG"},"intervalMs":{"type":"integer","minimum":0,"maximum":60000,"default":250},"concurrency":{"type":"integer","minimum":1,"maximum":20},"noDexscreener":{"type":"boolean","default":true},"pons":{"type":"boolean","default":false,"description":"Fetch launch names/art from Pons graduations"},"dexscreener":{"type":"boolean","default":false,"description":"Fetch launch names/art from Dexscreener"}}}}}},"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}},"get":{"summary":"List recent local stress jobs","tags":["dev"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}}}},"/v1/dev/stress/{id}":{"get":{"summary":"Get a local stress job by id","tags":["dev"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/dev/stress/{id}/stop":{"post":{"summary":"Stop a running local stress job","tags":["dev"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/ops/overview":{"get":{"summary":"Failed keeper jobs and stuck graduations","tags":["ops"],"parameters":[{"schema":{"type":"string"},"in":"header","name":"x-yeeld-admin-address","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}}}}