{"openapi":"3.1.0","info":{"title":"quests.lol","version":"1.0.0","summary":"The dossiers board and the pulse cards, as JSON.","description":"Read access to everything quests.lol publishes: the projects on the board, the research written about them, and the current pulse cards.\n\nTwo things worth knowing before you build against it.\n\n**A project can arrive more than once over its life.** Match on `id` and treat a repeat as an update, not a new project. `handle` can be abandoned and reused by a different account.\n\n**`since` means the archive wrote the row**, not that the project materially changed. A re-sighting that only refreshed a follower count counts as a write. Compare against what you stored if you need real change.\n\nThere is also an MCP endpoint at `/mcp` speaking streamable HTTP, with the same key and the same rows.","contact":{"name":"quests.lol","url":"https://quests.lol/api"}},"servers":[{"url":"https://quests.lol/api/v1"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Your API key, as `Authorization: Bearer qlol_...`. Keys are issued by hand."}},"schemas":{"Project":{"type":"object","properties":{"id":{"type":"string","description":"Stable. Match on this, never on handle."},"handle":{"type":["string","null"],"description":"X handle without @, or null for projects without X. Can be reused by a different account."},"identity":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["x","website","contract"]},"handle":{"type":["string","null"]},"website":{"type":["string","null"]},"chain":{"type":["string","null"]},"contract":{"type":["string","null"]}},"required":["kind","handle","website","chain","contract"]},{"type":"null"}],"description":"Closed submitted public identity, available before research. No Discord or private ingestion metadata."},"name":{"type":["string","null"]},"pfp":{"type":["string","null"],"description":"Profile image URL"},"fol":{"type":["number","null"],"description":"Follower count at the last sighting"},"why":{"type":["string","null"],"description":"One line on why it reached the board"},"bio":{"type":["string","null"]},"firstSeenByUs":{"type":"string","format":"date-time","description":"When this project first reached our board. Not when the project started."},"entry":{"type":"object","properties":{"at":{"type":["string","null"]},"fol":{"type":["number","null"]}},"required":["at","fol"],"description":"The first sighting: when, and the follower count then."},"vel":{"type":"object","properties":{"h24":{"type":["number","null"]},"d7":{"type":["number","null"]}},"required":["h24","d7"],"description":"Follower velocity over 24 hours and 7 days."},"aixbt":{"type":"object","properties":{"lead":{"type":["string","null"]}},"required":["lead"],"description":"How far ahead of aixbt we were, when we were."},"dossier":{"oneOf":[{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string","description":"e.g. defi, infra, memecoin"},"description":{"type":"string"},"stage":{"type":"string","description":"e.g. idea, testnet, live"},"confidence":{"type":"string","description":"How firm the research is: low, medium or high"},"chains":{"type":"array","items":{"type":"string"}},"founders":{"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"handle":{"type":["string","null"]},"note":{"type":["string","null"]}},"required":["name","handle","note"]}},"backers":{"type":"array","items":{"type":"string"}},"notable":{"type":"array","items":{"type":"string"},"description":"Facts worth knowing that fit nowhere else"},"token":{"oneOf":[{"type":"object","properties":{"ticker":{"type":["string","null"]},"contract":{"type":["string","null"]},"chain":{"type":["string","null"]}},"required":["ticker","contract","chain"]},{"type":"null"}]},"links":{"type":"object","properties":{"site":{"type":["string","null"]},"docs":{"type":["string","null"]},"github":{"type":["string","null"]}},"required":["site","docs","github"]},"unverified":{"type":"array","items":{"type":"string"},"description":"Claims the project makes that we could not confirm. Read these before acting."},"onchain":{"oneOf":[{"type":"object","properties":{"symbol":{"type":["string","null"]},"mcap":{"type":["number","null"],"description":"Market cap in USD"},"holders":{"type":["number","null"]},"liquidity":{"type":["number","null"],"description":"Pool liquidity in USD"},"change24h":{"type":["number","null"],"description":"Price change over 24h, as a ratio"},"buys24h":{"type":["number","null"]},"sells24h":{"type":["number","null"]},"top10Rate":{"type":["number","null"],"description":"Share of supply held by the top 10 wallets"},"mintRenounced":{"type":["boolean","null"]},"lpLocked":{"type":["boolean","null"]},"honeypot":{"type":["boolean","null"]}},"required":["symbol","mcap","holders","liquidity","change24h","buys24h","sells24h","top10Rate","mintRenounced","lpLocked","honeypot"],"description":"On-chain snapshot at the time the dossier was written. Not live: re-read the project to refresh it."},{"type":"null"}]}},"required":["name","category","description","stage","confidence","chains","founders","backers","notable","token","links","unverified","onchain"],"description":"Our research on a project. Null when nobody has written it up yet."},{"type":"null"}]},"gg":{"oneOf":[{"type":"object","properties":{"status":{"type":"string","enum":["matched","checked_no_match","identity_unknown","identity_mismatch"]},"historyComplete":{"type":"boolean","description":"First-call fields are published only when complete, orderable history was verified."},"posts":{"type":["integer","null"],"description":"Verified calls for this chain-qualified token. Null means identity is unresolved; 0 means a verified no-call result."},"firstAt":{"type":["string","null"],"format":"date-time","description":"When it was first called"},"firstMcap":{"type":["number","null"],"description":"Market cap at the FIRST call, which is not the cheapest or the latest. A token with fifteen calls has fourteen other entries."},"firstCaller":{"type":["string","null"],"description":"gg handle of whoever called it first"},"latestAt":{"type":["string","null"],"format":"date-time","description":"The most recent call"},"mcap":{"type":["number","null"],"description":"gg's current market cap for the token"},"multiple":{"type":["number","null"],"description":"mcap over firstMcap. Below 1 when the call went down, and reported that way."},"checkedAt":{"type":["string","null"],"format":"date-time","description":"When we last asked gg"}},"required":["status","historyComplete","posts","firstAt","firstMcap","firstCaller","latestAt","mcap","multiple","checkedAt"],"description":"What gg.xyz knows about this project token. Null when we have not looked yet, which is not the same as {posts: 0}, which means we looked and nobody has called it."},{"type":"null"}]}},"required":["id","handle","identity","name","pfp","fol","why","bio","firstSeenByUs","entry","vel","aixbt","dossier","gg"],"description":"One project on the board. Every field is always present; unknown values are null."},"ProjectContext":{"type":"object","properties":{"votes":{"type":"object","properties":{"up":{"type":"integer","minimum":0},"down":{"type":"integer","minimum":0}},"required":["up","down"]},"voters":{"oneOf":[{"type":"object","properties":{"up":{"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"avatar":{"type":["string","null"]}},"required":["name","avatar"]},"maxItems":20},"down":{"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"avatar":{"type":["string","null"]}},"required":["name","avatar"]},"maxItems":20},"limitPerSide":{"type":"integer","const":20}},"required":["up","down","limitPerSide"]},{"type":"null"}],"description":"Display names and avatars only for a currently allowlisted key owner. Null means withheld, not no voters."},"research":{"type":"object","properties":{"state":{"type":"string","enum":["ready","queued","researching","budget_wait","awaiting_admission","paused","needs_review","failed","not_requested","registration_pending","unavailable"]},"hasDossier":{"type":"boolean"},"nextEligibleAt":{"type":["string","null"],"format":"date-time"}},"required":["state","hasDossier","nextEligibleAt"]},"freshness":{"type":"object","properties":{"readAt":{"type":"string","format":"date-time","description":"Original public snapshot read time, retained on cache hits for up to 30 seconds. Not the time its sources updated."},"dossierAt":{"type":["string","null"],"format":"date-time"},"ggCheckedAt":{"type":["string","null"],"format":"date-time"},"onchainCheckedAt":{"type":["string","null"],"format":"date-time","description":"Last successful scheduled on-chain check. Unknown is null."}},"required":["readAt","dossierAt","ggCheckedAt","onchainCheckedAt"]}},"required":["votes","voters","research","freshness"]},"ProjectSearch":{"type":"object","properties":{"state":{"type":"string","enum":["found","missing","ambiguous","chain_required"]},"project":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Stable. Match on this, never on handle."},"handle":{"type":["string","null"],"description":"X handle without @, or null for projects without X. Can be reused by a different account."},"identity":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["x","website","contract"]},"handle":{"type":["string","null"]},"website":{"type":["string","null"]},"chain":{"type":["string","null"]},"contract":{"type":["string","null"]}},"required":["kind","handle","website","chain","contract"]},{"type":"null"}],"description":"Closed submitted public identity, available before research. No Discord or private ingestion metadata."},"name":{"type":["string","null"]},"pfp":{"type":["string","null"],"description":"Profile image URL"},"fol":{"type":["number","null"],"description":"Follower count at the last sighting"},"why":{"type":["string","null"],"description":"One line on why it reached the board"},"bio":{"type":["string","null"]},"firstSeenByUs":{"type":"string","format":"date-time","description":"When this project first reached our board. Not when the project started."},"entry":{"type":"object","properties":{"at":{"type":["string","null"]},"fol":{"type":["number","null"]}},"required":["at","fol"],"description":"The first sighting: when, and the follower count then."},"vel":{"type":"object","properties":{"h24":{"type":["number","null"]},"d7":{"type":["number","null"]}},"required":["h24","d7"],"description":"Follower velocity over 24 hours and 7 days."},"aixbt":{"type":"object","properties":{"lead":{"type":["string","null"]}},"required":["lead"],"description":"How far ahead of aixbt we were, when we were."},"dossier":{"oneOf":[{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string","description":"e.g. defi, infra, memecoin"},"description":{"type":"string"},"stage":{"type":"string","description":"e.g. idea, testnet, live"},"confidence":{"type":"string","description":"How firm the research is: low, medium or high"},"chains":{"type":"array","items":{"type":"string"}},"founders":{"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"handle":{"type":["string","null"]},"note":{"type":["string","null"]}},"required":["name","handle","note"]}},"backers":{"type":"array","items":{"type":"string"}},"notable":{"type":"array","items":{"type":"string"},"description":"Facts worth knowing that fit nowhere else"},"token":{"oneOf":[{"type":"object","properties":{"ticker":{"type":["string","null"]},"contract":{"type":["string","null"]},"chain":{"type":["string","null"]}},"required":["ticker","contract","chain"]},{"type":"null"}]},"links":{"type":"object","properties":{"site":{"type":["string","null"]},"docs":{"type":["string","null"]},"github":{"type":["string","null"]}},"required":["site","docs","github"]},"unverified":{"type":"array","items":{"type":"string"},"description":"Claims the project makes that we could not confirm. Read these before acting."},"onchain":{"oneOf":[{"type":"object","properties":{"symbol":{"type":["string","null"]},"mcap":{"type":["number","null"],"description":"Market cap in USD"},"holders":{"type":["number","null"]},"liquidity":{"type":["number","null"],"description":"Pool liquidity in USD"},"change24h":{"type":["number","null"],"description":"Price change over 24h, as a ratio"},"buys24h":{"type":["number","null"]},"sells24h":{"type":["number","null"]},"top10Rate":{"type":["number","null"],"description":"Share of supply held by the top 10 wallets"},"mintRenounced":{"type":["boolean","null"]},"lpLocked":{"type":["boolean","null"]},"honeypot":{"type":["boolean","null"]}},"required":["symbol","mcap","holders","liquidity","change24h","buys24h","sells24h","top10Rate","mintRenounced","lpLocked","honeypot"],"description":"On-chain snapshot at the time the dossier was written. Not live: re-read the project to refresh it."},{"type":"null"}]}},"required":["name","category","description","stage","confidence","chains","founders","backers","notable","token","links","unverified","onchain"],"description":"Our research on a project. Null when nobody has written it up yet."},{"type":"null"}]},"gg":{"oneOf":[{"type":"object","properties":{"status":{"type":"string","enum":["matched","checked_no_match","identity_unknown","identity_mismatch"]},"historyComplete":{"type":"boolean","description":"First-call fields are published only when complete, orderable history was verified."},"posts":{"type":["integer","null"],"description":"Verified calls for this chain-qualified token. Null means identity is unresolved; 0 means a verified no-call result."},"firstAt":{"type":["string","null"],"format":"date-time","description":"When it was first called"},"firstMcap":{"type":["number","null"],"description":"Market cap at the FIRST call, which is not the cheapest or the latest. A token with fifteen calls has fourteen other entries."},"firstCaller":{"type":["string","null"],"description":"gg handle of whoever called it first"},"latestAt":{"type":["string","null"],"format":"date-time","description":"The most recent call"},"mcap":{"type":["number","null"],"description":"gg's current market cap for the token"},"multiple":{"type":["number","null"],"description":"mcap over firstMcap. Below 1 when the call went down, and reported that way."},"checkedAt":{"type":["string","null"],"format":"date-time","description":"When we last asked gg"}},"required":["status","historyComplete","posts","firstAt","firstMcap","firstCaller","latestAt","mcap","multiple","checkedAt"],"description":"What gg.xyz knows about this project token. Null when we have not looked yet, which is not the same as {posts: 0}, which means we looked and nobody has called it."},{"type":"null"}]}},"required":["id","handle","identity","name","pfp","fol","why","bio","firstSeenByUs","entry","vel","aixbt","dossier","gg"],"description":"One project on the board. Every field is always present; unknown values are null."},{"type":"null"}]},"context":{"oneOf":[{"type":"object","properties":{"votes":{"type":"object","properties":{"up":{"type":"integer","minimum":0},"down":{"type":"integer","minimum":0}},"required":["up","down"]},"voters":{"oneOf":[{"type":"object","properties":{"up":{"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"avatar":{"type":["string","null"]}},"required":["name","avatar"]},"maxItems":20},"down":{"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"avatar":{"type":["string","null"]}},"required":["name","avatar"]},"maxItems":20},"limitPerSide":{"type":"integer","const":20}},"required":["up","down","limitPerSide"]},{"type":"null"}],"description":"Display names and avatars only for a currently allowlisted key owner. Null means withheld, not no voters."},"research":{"type":"object","properties":{"state":{"type":"string","enum":["ready","queued","researching","budget_wait","awaiting_admission","paused","needs_review","failed","not_requested","registration_pending","unavailable"]},"hasDossier":{"type":"boolean"},"nextEligibleAt":{"type":["string","null"],"format":"date-time"}},"required":["state","hasDossier","nextEligibleAt"]},"freshness":{"type":"object","properties":{"readAt":{"type":"string","format":"date-time","description":"Original public snapshot read time, retained on cache hits for up to 30 seconds. Not the time its sources updated."},"dossierAt":{"type":["string","null"],"format":"date-time"},"ggCheckedAt":{"type":["string","null"],"format":"date-time"},"onchainCheckedAt":{"type":["string","null"],"format":"date-time","description":"Last successful scheduled on-chain check. Unknown is null."}},"required":["readAt","dossierAt","ggCheckedAt","onchainCheckedAt"]}},"required":["votes","voters","research","freshness"]},{"type":"null"}]}},"required":["state","project","context"]},"Dossier":{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string","description":"e.g. defi, infra, memecoin"},"description":{"type":"string"},"stage":{"type":"string","description":"e.g. idea, testnet, live"},"confidence":{"type":"string","description":"How firm the research is: low, medium or high"},"chains":{"type":"array","items":{"type":"string"}},"founders":{"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"handle":{"type":["string","null"]},"note":{"type":["string","null"]}},"required":["name","handle","note"]}},"backers":{"type":"array","items":{"type":"string"}},"notable":{"type":"array","items":{"type":"string"},"description":"Facts worth knowing that fit nowhere else"},"token":{"oneOf":[{"type":"object","properties":{"ticker":{"type":["string","null"]},"contract":{"type":["string","null"]},"chain":{"type":["string","null"]}},"required":["ticker","contract","chain"]},{"type":"null"}]},"links":{"type":"object","properties":{"site":{"type":["string","null"]},"docs":{"type":["string","null"]},"github":{"type":["string","null"]}},"required":["site","docs","github"]},"unverified":{"type":"array","items":{"type":"string"},"description":"Claims the project makes that we could not confirm. Read these before acting."},"onchain":{"oneOf":[{"type":"object","properties":{"symbol":{"type":["string","null"]},"mcap":{"type":["number","null"],"description":"Market cap in USD"},"holders":{"type":["number","null"]},"liquidity":{"type":["number","null"],"description":"Pool liquidity in USD"},"change24h":{"type":["number","null"],"description":"Price change over 24h, as a ratio"},"buys24h":{"type":["number","null"]},"sells24h":{"type":["number","null"]},"top10Rate":{"type":["number","null"],"description":"Share of supply held by the top 10 wallets"},"mintRenounced":{"type":["boolean","null"]},"lpLocked":{"type":["boolean","null"]},"honeypot":{"type":["boolean","null"]}},"required":["symbol","mcap","holders","liquidity","change24h","buys24h","sells24h","top10Rate","mintRenounced","lpLocked","honeypot"],"description":"On-chain snapshot at the time the dossier was written. Not live: re-read the project to refresh it."},{"type":"null"}]}},"required":["name","category","description","stage","confidence","chains","founders","backers","notable","token","links","unverified","onchain"],"description":"Our research on a project. Null when nobody has written it up yet."},"Onchain":{"type":"object","properties":{"symbol":{"type":["string","null"]},"mcap":{"type":["number","null"],"description":"Market cap in USD"},"holders":{"type":["number","null"]},"liquidity":{"type":["number","null"],"description":"Pool liquidity in USD"},"change24h":{"type":["number","null"],"description":"Price change over 24h, as a ratio"},"buys24h":{"type":["number","null"]},"sells24h":{"type":["number","null"]},"top10Rate":{"type":["number","null"],"description":"Share of supply held by the top 10 wallets"},"mintRenounced":{"type":["boolean","null"]},"lpLocked":{"type":["boolean","null"]},"honeypot":{"type":["boolean","null"]}},"required":["symbol","mcap","holders","liquidity","change24h","buys24h","sells24h","top10Rate","mintRenounced","lpLocked","honeypot"],"description":"On-chain snapshot at the time the dossier was written. Not live: re-read the project to refresh it."},"Gg":{"type":"object","properties":{"status":{"type":"string","enum":["matched","checked_no_match","identity_unknown","identity_mismatch"]},"historyComplete":{"type":"boolean","description":"First-call fields are published only when complete, orderable history was verified."},"posts":{"type":["integer","null"],"description":"Verified calls for this chain-qualified token. Null means identity is unresolved; 0 means a verified no-call result."},"firstAt":{"type":["string","null"],"format":"date-time","description":"When it was first called"},"firstMcap":{"type":["number","null"],"description":"Market cap at the FIRST call, which is not the cheapest or the latest. A token with fifteen calls has fourteen other entries."},"firstCaller":{"type":["string","null"],"description":"gg handle of whoever called it first"},"latestAt":{"type":["string","null"],"format":"date-time","description":"The most recent call"},"mcap":{"type":["number","null"],"description":"gg's current market cap for the token"},"multiple":{"type":["number","null"],"description":"mcap over firstMcap. Below 1 when the call went down, and reported that way."},"checkedAt":{"type":["string","null"],"format":"date-time","description":"When we last asked gg"}},"required":["status","historyComplete","posts","firstAt","firstMcap","firstCaller","latestAt","mcap","multiple","checkedAt"],"description":"What gg.xyz knows about this project token. Null when we have not looked yet, which is not the same as {posts: 0}, which means we looked and nobody has called it."},"PulseCard":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["live","quiet"],"description":"quiet means nothing moved, not broken"},"asOf":{"type":"string","description":"When the desk wrote this card"},"beat":{"type":"string"},"headline":{"type":"string"},"lede":{"type":"string"},"plain":{"type":["string","null"],"description":"The same story without the jargon"},"bullets":{"type":"array","items":{"type":"string"}},"receipts":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"href":{"type":"string"}},"required":["label","href"]},"description":"Links to the X posts behind the card"}},"required":["id","status","asOf","beat","headline","lede","plain","bullets","receipts"]},"Beat":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"blurb":{"type":"string"},"card":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["live","quiet"],"description":"quiet means nothing moved, not broken"},"asOf":{"type":"string","description":"When the desk wrote this card"},"beat":{"type":"string"},"headline":{"type":"string"},"lede":{"type":"string"},"plain":{"type":["string","null"],"description":"The same story without the jargon"},"bullets":{"type":"array","items":{"type":"string"}},"receipts":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"href":{"type":"string"}},"required":["label","href"]},"description":"Links to the X posts behind the card"}},"required":["id","status","asOf","beat","headline","lede","plain","bullets","receipts"]},{"type":"null"}]}},"required":["id","label","blurb","card"]},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]},"GgCall":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"sourceUrl":{"type":"string","format":"uri"},"thesisText":{"type":"string","maxLength":12000,"description":"Plain text as stored. Ingestion may shorten a long source post with an explicit note; follow sourceUrl for the original. An author opinion, not a verified fact or investment recommendation."},"caller":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"pseudo":{"type":"string"},"name":{"type":"string"},"profileUrl":{"type":"string","format":"uri"},"avatarUrl":{"type":["string","null"]},"subscribersCount":{"type":["integer","null"],"minimum":0},"xHandle":{"type":["string","null"]},"bio":{"type":["string","null"]},"pnl":{"oneOf":[{"type":"object","properties":{"realizedUsd":{"type":"number"},"realizedPercent":{"type":"number"},"period":{"type":"string","const":"7d"},"checkedAt":{"type":"string","format":"date-time"},"closedTrades":{"type":"integer","minimum":0},"skippedUnknownCostBasis":{"type":"integer","minimum":0}},"required":["realizedUsd","realizedPercent","period","checkedAt","closedTrades","skippedUnknownCostBasis"],"additionalProperties":false},{"type":"null"}],"description":"GG-tracked realized trading results over seven days, NOT the return on this call or complete wallet history. Negative and zero values are valid. Unknown, future-dated or at least 24-hour-old observations are null. skippedUnknownCostBasis counts excluded trades."}},"required":["id","pseudo","name","profileUrl","avatarUrl","subscribersCount","xHandle","bio","pnl"],"additionalProperties":false},"tokens":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"chain":{"type":"string"},"contract":{"type":"string"},"name":{"type":"string"},"symbol":{"type":["string","null"]},"logoUrl":{"type":["string","null"]},"ggXHandle":{"type":["string","null"]},"ggWebsite":{"type":["string","null"]},"description":{"type":["string","null"]},"project":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"href":{"type":"string","description":"Relative canonical dossier URL, including unresearched projects."},"name":{"type":["string","null"]},"avatar":{"type":["string","null"]},"bio":{"type":["string","null"]},"xHandle":{"type":["string","null"]},"website":{"type":["string","null"]},"hasDossier":{"type":"boolean"}},"required":["id","href","name","avatar","bio","xHandle","website","hasDossier"],"additionalProperties":false},{"type":"null"}],"description":"Only an unambiguous current contract match. Null means no safe project link; it does not erase the GG call."}},"required":["key","chain","contract","name","symbol","logoUrl","ggXHandle","ggWebsite","description","project"],"additionalProperties":false},"minItems":1,"maxItems":20}},"required":["id","createdAt","updatedAt","sourceUrl","thesisText","caller","tokens"],"additionalProperties":false},"GgCallCaller":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"pseudo":{"type":"string"},"name":{"type":"string"},"profileUrl":{"type":"string","format":"uri"},"avatarUrl":{"type":["string","null"]},"subscribersCount":{"type":["integer","null"],"minimum":0},"xHandle":{"type":["string","null"]},"bio":{"type":["string","null"]},"pnl":{"oneOf":[{"type":"object","properties":{"realizedUsd":{"type":"number"},"realizedPercent":{"type":"number"},"period":{"type":"string","const":"7d"},"checkedAt":{"type":"string","format":"date-time"},"closedTrades":{"type":"integer","minimum":0},"skippedUnknownCostBasis":{"type":"integer","minimum":0}},"required":["realizedUsd","realizedPercent","period","checkedAt","closedTrades","skippedUnknownCostBasis"],"additionalProperties":false},{"type":"null"}],"description":"GG-tracked realized trading results over seven days, NOT the return on this call or complete wallet history. Negative and zero values are valid. Unknown, future-dated or at least 24-hour-old observations are null. skippedUnknownCostBasis counts excluded trades."}},"required":["id","pseudo","name","profileUrl","avatarUrl","subscribersCount","xHandle","bio","pnl"],"additionalProperties":false},"GgCallPnl":{"type":"object","properties":{"realizedUsd":{"type":"number"},"realizedPercent":{"type":"number"},"period":{"type":"string","const":"7d"},"checkedAt":{"type":"string","format":"date-time"},"closedTrades":{"type":"integer","minimum":0},"skippedUnknownCostBasis":{"type":"integer","minimum":0}},"required":["realizedUsd","realizedPercent","period","checkedAt","closedTrades","skippedUnknownCostBasis"],"additionalProperties":false},"GgCallToken":{"type":"object","properties":{"key":{"type":"string"},"chain":{"type":"string"},"contract":{"type":"string"},"name":{"type":"string"},"symbol":{"type":["string","null"]},"logoUrl":{"type":["string","null"]},"ggXHandle":{"type":["string","null"]},"ggWebsite":{"type":["string","null"]},"description":{"type":["string","null"]},"project":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"href":{"type":"string","description":"Relative canonical dossier URL, including unresearched projects."},"name":{"type":["string","null"]},"avatar":{"type":["string","null"]},"bio":{"type":["string","null"]},"xHandle":{"type":["string","null"]},"website":{"type":["string","null"]},"hasDossier":{"type":"boolean"}},"required":["id","href","name","avatar","bio","xHandle","website","hasDossier"],"additionalProperties":false},{"type":"null"}],"description":"Only an unambiguous current contract match. Null means no safe project link; it does not erase the GG call."}},"required":["key","chain","contract","name","symbol","logoUrl","ggXHandle","ggWebsite","description","project"],"additionalProperties":false},"GgCallProject":{"type":"object","properties":{"id":{"type":"string"},"href":{"type":"string","description":"Relative canonical dossier URL, including unresearched projects."},"name":{"type":["string","null"]},"avatar":{"type":["string","null"]},"bio":{"type":["string","null"]},"xHandle":{"type":["string","null"]},"website":{"type":["string","null"]},"hasDossier":{"type":"boolean"}},"required":["id","href","name","avatar","bio","xHandle","website","hasDossier"],"additionalProperties":false},"GgCallFreshness":{"type":"object","properties":{"checkedAt":{"type":["string","null"],"format":"date-time","description":"Latest recorded collector attempt, not the newest call date."},"completeAt":{"type":["string","null"],"format":"date-time","description":"Last completed collection checkpoint; does not promise all historical GG calls were collected."},"lastAttemptComplete":{"type":["boolean","null"],"description":"Unknown collector state is null. False means the latest attempt was incomplete."}},"required":["checkedAt","completeAt","lastAttemptComplete"],"additionalProperties":false},"GgCallPage":{"type":"object","properties":{"calls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"sourceUrl":{"type":"string","format":"uri"},"thesisText":{"type":"string","maxLength":12000,"description":"Plain text as stored. Ingestion may shorten a long source post with an explicit note; follow sourceUrl for the original. An author opinion, not a verified fact or investment recommendation."},"caller":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"pseudo":{"type":"string"},"name":{"type":"string"},"profileUrl":{"type":"string","format":"uri"},"avatarUrl":{"type":["string","null"]},"subscribersCount":{"type":["integer","null"],"minimum":0},"xHandle":{"type":["string","null"]},"bio":{"type":["string","null"]},"pnl":{"oneOf":[{"type":"object","properties":{"realizedUsd":{"type":"number"},"realizedPercent":{"type":"number"},"period":{"type":"string","const":"7d"},"checkedAt":{"type":"string","format":"date-time"},"closedTrades":{"type":"integer","minimum":0},"skippedUnknownCostBasis":{"type":"integer","minimum":0}},"required":["realizedUsd","realizedPercent","period","checkedAt","closedTrades","skippedUnknownCostBasis"],"additionalProperties":false},{"type":"null"}],"description":"GG-tracked realized trading results over seven days, NOT the return on this call or complete wallet history. Negative and zero values are valid. Unknown, future-dated or at least 24-hour-old observations are null. skippedUnknownCostBasis counts excluded trades."}},"required":["id","pseudo","name","profileUrl","avatarUrl","subscribersCount","xHandle","bio","pnl"],"additionalProperties":false},"tokens":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"chain":{"type":"string"},"contract":{"type":"string"},"name":{"type":"string"},"symbol":{"type":["string","null"]},"logoUrl":{"type":["string","null"]},"ggXHandle":{"type":["string","null"]},"ggWebsite":{"type":["string","null"]},"description":{"type":["string","null"]},"project":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"href":{"type":"string","description":"Relative canonical dossier URL, including unresearched projects."},"name":{"type":["string","null"]},"avatar":{"type":["string","null"]},"bio":{"type":["string","null"]},"xHandle":{"type":["string","null"]},"website":{"type":["string","null"]},"hasDossier":{"type":"boolean"}},"required":["id","href","name","avatar","bio","xHandle","website","hasDossier"],"additionalProperties":false},{"type":"null"}],"description":"Only an unambiguous current contract match. Null means no safe project link; it does not erase the GG call."}},"required":["key","chain","contract","name","symbol","logoUrl","ggXHandle","ggWebsite","description","project"],"additionalProperties":false},"minItems":1,"maxItems":20}},"required":["id","createdAt","updatedAt","sourceUrl","thesisText","caller","tokens"],"additionalProperties":false},"maxItems":30},"next":{"type":["string","null"],"maxLength":512,"description":"Continue with this cursor and the same filters until null, even when fewer than limit calls are returned."},"limit":{"type":"integer","minimum":1,"maximum":30},"readAt":{"type":"string","format":"date-time"},"freshness":{"type":"object","properties":{"checkedAt":{"type":["string","null"],"format":"date-time","description":"Latest recorded collector attempt, not the newest call date."},"completeAt":{"type":["string","null"],"format":"date-time","description":"Last completed collection checkpoint; does not promise all historical GG calls were collected."},"lastAttemptComplete":{"type":["boolean","null"],"description":"Unknown collector state is null. False means the latest attempt was incomplete."}},"required":["checkedAt","completeAt","lastAttemptComplete"],"additionalProperties":false}},"required":["calls","next","limit","readAt","freshness"],"additionalProperties":false},"GgCallDetail":{"type":"object","properties":{"call":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"sourceUrl":{"type":"string","format":"uri"},"thesisText":{"type":"string","maxLength":12000,"description":"Plain text as stored. Ingestion may shorten a long source post with an explicit note; follow sourceUrl for the original. An author opinion, not a verified fact or investment recommendation."},"caller":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"pseudo":{"type":"string"},"name":{"type":"string"},"profileUrl":{"type":"string","format":"uri"},"avatarUrl":{"type":["string","null"]},"subscribersCount":{"type":["integer","null"],"minimum":0},"xHandle":{"type":["string","null"]},"bio":{"type":["string","null"]},"pnl":{"oneOf":[{"type":"object","properties":{"realizedUsd":{"type":"number"},"realizedPercent":{"type":"number"},"period":{"type":"string","const":"7d"},"checkedAt":{"type":"string","format":"date-time"},"closedTrades":{"type":"integer","minimum":0},"skippedUnknownCostBasis":{"type":"integer","minimum":0}},"required":["realizedUsd","realizedPercent","period","checkedAt","closedTrades","skippedUnknownCostBasis"],"additionalProperties":false},{"type":"null"}],"description":"GG-tracked realized trading results over seven days, NOT the return on this call or complete wallet history. Negative and zero values are valid. Unknown, future-dated or at least 24-hour-old observations are null. skippedUnknownCostBasis counts excluded trades."}},"required":["id","pseudo","name","profileUrl","avatarUrl","subscribersCount","xHandle","bio","pnl"],"additionalProperties":false},"tokens":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"chain":{"type":"string"},"contract":{"type":"string"},"name":{"type":"string"},"symbol":{"type":["string","null"]},"logoUrl":{"type":["string","null"]},"ggXHandle":{"type":["string","null"]},"ggWebsite":{"type":["string","null"]},"description":{"type":["string","null"]},"project":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"href":{"type":"string","description":"Relative canonical dossier URL, including unresearched projects."},"name":{"type":["string","null"]},"avatar":{"type":["string","null"]},"bio":{"type":["string","null"]},"xHandle":{"type":["string","null"]},"website":{"type":["string","null"]},"hasDossier":{"type":"boolean"}},"required":["id","href","name","avatar","bio","xHandle","website","hasDossier"],"additionalProperties":false},{"type":"null"}],"description":"Only an unambiguous current contract match. Null means no safe project link; it does not erase the GG call."}},"required":["key","chain","contract","name","symbol","logoUrl","ggXHandle","ggWebsite","description","project"],"additionalProperties":false},"minItems":1,"maxItems":20}},"required":["id","createdAt","updatedAt","sourceUrl","thesisText","caller","tokens"],"additionalProperties":false},"readAt":{"type":"string","format":"date-time"},"freshness":{"type":"object","properties":{"checkedAt":{"type":["string","null"],"format":"date-time","description":"Latest recorded collector attempt, not the newest call date."},"completeAt":{"type":["string","null"],"format":"date-time","description":"Last completed collection checkpoint; does not promise all historical GG calls were collected."},"lastAttemptComplete":{"type":["boolean","null"],"description":"Unknown collector state is null. False means the latest attempt was incomplete."}},"required":["checkedAt","completeAt","lastAttemptComplete"],"additionalProperties":false}},"required":["call","readAt","freshness"],"additionalProperties":false}}},"paths":{"/gg/calls":{"get":{"operationId":"listGgCalls","summary":"Stored GG calls and attributed theses, newest first","description":"Read-only browsing, not a delta sync or immutable snapshot. Calls can be edited, backfilled or suppressed. Follow next until null; short pages may reflect the 512 KiB response budget (including MCP escaping), not exhaustion. Source text is not cut to fit a page. No provider fetches, research or writes. A contract filter selects at most 5001 indexed candidate call IDs and refuses more than 5000 before payload reads; use unfiltered browsing for broader histories. Chain requires contract; no fuzzy search. Repeat normalized filters with the cursor. Protected by the existing per-key limit; if protection is unavailable return 503 with Retry-After 60. Private, no-store responses; no call cache so each read checks suppression.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":30,"default":20},"description":"Maximum calls, not a guarantee of page length."},{"name":"cursor","in":"query","schema":{"type":"string","maxLength":512},"description":"Opaque next cursor from this feed, with matching contract/chain filters."},{"name":"contract","in":"query","schema":{"type":"string","maxLength":100},"description":"Exact token address. Without chain, returns explicitly chain-qualified calls across matching chains."},{"name":"chain","in":"query","schema":{"type":"string","maxLength":60},"description":"Optional chain name/key, only with contract. For example base, sol or robinhood."}],"responses":{"200":{"description":"A bounded page of stored calls.","content":{"application/json":{"schema":{"type":"object","properties":{"calls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"sourceUrl":{"type":"string","format":"uri"},"thesisText":{"type":"string","maxLength":12000,"description":"Plain text as stored. Ingestion may shorten a long source post with an explicit note; follow sourceUrl for the original. An author opinion, not a verified fact or investment recommendation."},"caller":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"pseudo":{"type":"string"},"name":{"type":"string"},"profileUrl":{"type":"string","format":"uri"},"avatarUrl":{"type":["string","null"]},"subscribersCount":{"type":["integer","null"],"minimum":0},"xHandle":{"type":["string","null"]},"bio":{"type":["string","null"]},"pnl":{"oneOf":[{"type":"object","properties":{"realizedUsd":{"type":"number"},"realizedPercent":{"type":"number"},"period":{"type":"string","const":"7d"},"checkedAt":{"type":"string","format":"date-time"},"closedTrades":{"type":"integer","minimum":0},"skippedUnknownCostBasis":{"type":"integer","minimum":0}},"required":["realizedUsd","realizedPercent","period","checkedAt","closedTrades","skippedUnknownCostBasis"],"additionalProperties":false},{"type":"null"}],"description":"GG-tracked realized trading results over seven days, NOT the return on this call or complete wallet history. Negative and zero values are valid. Unknown, future-dated or at least 24-hour-old observations are null. skippedUnknownCostBasis counts excluded trades."}},"required":["id","pseudo","name","profileUrl","avatarUrl","subscribersCount","xHandle","bio","pnl"],"additionalProperties":false},"tokens":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"chain":{"type":"string"},"contract":{"type":"string"},"name":{"type":"string"},"symbol":{"type":["string","null"]},"logoUrl":{"type":["string","null"]},"ggXHandle":{"type":["string","null"]},"ggWebsite":{"type":["string","null"]},"description":{"type":["string","null"]},"project":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"href":{"type":"string","description":"Relative canonical dossier URL, including unresearched projects."},"name":{"type":["string","null"]},"avatar":{"type":["string","null"]},"bio":{"type":["string","null"]},"xHandle":{"type":["string","null"]},"website":{"type":["string","null"]},"hasDossier":{"type":"boolean"}},"required":["id","href","name","avatar","bio","xHandle","website","hasDossier"],"additionalProperties":false},{"type":"null"}],"description":"Only an unambiguous current contract match. Null means no safe project link; it does not erase the GG call."}},"required":["key","chain","contract","name","symbol","logoUrl","ggXHandle","ggWebsite","description","project"],"additionalProperties":false},"minItems":1,"maxItems":20}},"required":["id","createdAt","updatedAt","sourceUrl","thesisText","caller","tokens"],"additionalProperties":false},"maxItems":30},"next":{"type":["string","null"],"maxLength":512,"description":"Continue with this cursor and the same filters until null, even when fewer than limit calls are returned."},"limit":{"type":"integer","minimum":1,"maximum":30},"readAt":{"type":"string","format":"date-time"},"freshness":{"type":"object","properties":{"checkedAt":{"type":["string","null"],"format":"date-time","description":"Latest recorded collector attempt, not the newest call date."},"completeAt":{"type":["string","null"],"format":"date-time","description":"Last completed collection checkpoint; does not promise all historical GG calls were collected."},"lastAttemptComplete":{"type":["boolean","null"],"description":"Unknown collector state is null. False means the latest attempt was incomplete."}},"required":["checkedAt","completeAt","lastAttemptComplete"],"additionalProperties":false}},"required":["calls","next","limit","readAt","freshness"],"additionalProperties":false}}}},"400":{"description":"Bad request. The message says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"Missing, malformed, unknown, revoked or expired key. One response for all of them.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Over 60 requests in 60 seconds. Retry-After says how long to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"503":{"description":"The archive could not be read. Retryable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/gg/calls/{id}":{"get":{"operationId":"getGgCall","summary":"One stored GG call with thesis and caller profile","description":"Read the stored public call and uniquely matched current projects. Rechecks suppression; missing and suppressed IDs both return 404. No provider traffic or research. Same strict rate protection as the GG call feed. Private, no-store; the response budget includes MCP text escaping. PnL is dated seven-day realized trading performance, not this call’s return.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"The stable GG call UUID."}],"responses":{"200":{"description":"One stored public call.","content":{"application/json":{"schema":{"type":"object","properties":{"call":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"sourceUrl":{"type":"string","format":"uri"},"thesisText":{"type":"string","maxLength":12000,"description":"Plain text as stored. Ingestion may shorten a long source post with an explicit note; follow sourceUrl for the original. An author opinion, not a verified fact or investment recommendation."},"caller":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"pseudo":{"type":"string"},"name":{"type":"string"},"profileUrl":{"type":"string","format":"uri"},"avatarUrl":{"type":["string","null"]},"subscribersCount":{"type":["integer","null"],"minimum":0},"xHandle":{"type":["string","null"]},"bio":{"type":["string","null"]},"pnl":{"oneOf":[{"type":"object","properties":{"realizedUsd":{"type":"number"},"realizedPercent":{"type":"number"},"period":{"type":"string","const":"7d"},"checkedAt":{"type":"string","format":"date-time"},"closedTrades":{"type":"integer","minimum":0},"skippedUnknownCostBasis":{"type":"integer","minimum":0}},"required":["realizedUsd","realizedPercent","period","checkedAt","closedTrades","skippedUnknownCostBasis"],"additionalProperties":false},{"type":"null"}],"description":"GG-tracked realized trading results over seven days, NOT the return on this call or complete wallet history. Negative and zero values are valid. Unknown, future-dated or at least 24-hour-old observations are null. skippedUnknownCostBasis counts excluded trades."}},"required":["id","pseudo","name","profileUrl","avatarUrl","subscribersCount","xHandle","bio","pnl"],"additionalProperties":false},"tokens":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"chain":{"type":"string"},"contract":{"type":"string"},"name":{"type":"string"},"symbol":{"type":["string","null"]},"logoUrl":{"type":["string","null"]},"ggXHandle":{"type":["string","null"]},"ggWebsite":{"type":["string","null"]},"description":{"type":["string","null"]},"project":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"href":{"type":"string","description":"Relative canonical dossier URL, including unresearched projects."},"name":{"type":["string","null"]},"avatar":{"type":["string","null"]},"bio":{"type":["string","null"]},"xHandle":{"type":["string","null"]},"website":{"type":["string","null"]},"hasDossier":{"type":"boolean"}},"required":["id","href","name","avatar","bio","xHandle","website","hasDossier"],"additionalProperties":false},{"type":"null"}],"description":"Only an unambiguous current contract match. Null means no safe project link; it does not erase the GG call."}},"required":["key","chain","contract","name","symbol","logoUrl","ggXHandle","ggWebsite","description","project"],"additionalProperties":false},"minItems":1,"maxItems":20}},"required":["id","createdAt","updatedAt","sourceUrl","thesisText","caller","tokens"],"additionalProperties":false},"readAt":{"type":"string","format":"date-time"},"freshness":{"type":"object","properties":{"checkedAt":{"type":["string","null"],"format":"date-time","description":"Latest recorded collector attempt, not the newest call date."},"completeAt":{"type":["string","null"],"format":"date-time","description":"Last completed collection checkpoint; does not promise all historical GG calls were collected."},"lastAttemptComplete":{"type":["boolean","null"],"description":"Unknown collector state is null. False means the latest attempt was incomplete."}},"required":["checkedAt","completeAt","lastAttemptComplete"],"additionalProperties":false}},"required":["call","readAt","freshness"],"additionalProperties":false}}}},"400":{"description":"Bad request. The message says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"Missing, malformed, unknown, revoked or expired key. One response for all of them.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No public GG call with that ID.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Over 60 requests in 60 seconds. Retry-After says how long to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"503":{"description":"The archive could not be read. Retryable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/search":{"get":{"operationId":"searchProjects","summary":"Find a stored project by contract, website or X profile","description":"Exact identity lookup, not fuzzy text search. Never adds projects or starts research. A bare contract works when one stored project matches; ambiguous matches require a more specific identity. Non-found states have null project and context. Votes, research status and freshness describe stored data, not a live provider fetch. Requires working rate protection; otherwise 503 with Retry-After. Responses are private and not HTTP-cacheable; public snapshots may be reused internally for 30 seconds. Names are authorized fresh.","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":500},"description":"Contract (optional chain prefix), public website, X profile URL/handle, ~stableID or quests dossier URL."}],"responses":{"200":{"description":"A stored identity result.","content":{"application/json":{"schema":{"type":"object","properties":{"state":{"type":"string","enum":["found","missing","ambiguous","chain_required"]},"project":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Stable. Match on this, never on handle."},"handle":{"type":["string","null"],"description":"X handle without @, or null for projects without X. Can be reused by a different account."},"identity":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["x","website","contract"]},"handle":{"type":["string","null"]},"website":{"type":["string","null"]},"chain":{"type":["string","null"]},"contract":{"type":["string","null"]}},"required":["kind","handle","website","chain","contract"]},{"type":"null"}],"description":"Closed submitted public identity, available before research. No Discord or private ingestion metadata."},"name":{"type":["string","null"]},"pfp":{"type":["string","null"],"description":"Profile image URL"},"fol":{"type":["number","null"],"description":"Follower count at the last sighting"},"why":{"type":["string","null"],"description":"One line on why it reached the board"},"bio":{"type":["string","null"]},"firstSeenByUs":{"type":"string","format":"date-time","description":"When this project first reached our board. Not when the project started."},"entry":{"type":"object","properties":{"at":{"type":["string","null"]},"fol":{"type":["number","null"]}},"required":["at","fol"],"description":"The first sighting: when, and the follower count then."},"vel":{"type":"object","properties":{"h24":{"type":["number","null"]},"d7":{"type":["number","null"]}},"required":["h24","d7"],"description":"Follower velocity over 24 hours and 7 days."},"aixbt":{"type":"object","properties":{"lead":{"type":["string","null"]}},"required":["lead"],"description":"How far ahead of aixbt we were, when we were."},"dossier":{"oneOf":[{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string","description":"e.g. defi, infra, memecoin"},"description":{"type":"string"},"stage":{"type":"string","description":"e.g. idea, testnet, live"},"confidence":{"type":"string","description":"How firm the research is: low, medium or high"},"chains":{"type":"array","items":{"type":"string"}},"founders":{"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"handle":{"type":["string","null"]},"note":{"type":["string","null"]}},"required":["name","handle","note"]}},"backers":{"type":"array","items":{"type":"string"}},"notable":{"type":"array","items":{"type":"string"},"description":"Facts worth knowing that fit nowhere else"},"token":{"oneOf":[{"type":"object","properties":{"ticker":{"type":["string","null"]},"contract":{"type":["string","null"]},"chain":{"type":["string","null"]}},"required":["ticker","contract","chain"]},{"type":"null"}]},"links":{"type":"object","properties":{"site":{"type":["string","null"]},"docs":{"type":["string","null"]},"github":{"type":["string","null"]}},"required":["site","docs","github"]},"unverified":{"type":"array","items":{"type":"string"},"description":"Claims the project makes that we could not confirm. Read these before acting."},"onchain":{"oneOf":[{"type":"object","properties":{"symbol":{"type":["string","null"]},"mcap":{"type":["number","null"],"description":"Market cap in USD"},"holders":{"type":["number","null"]},"liquidity":{"type":["number","null"],"description":"Pool liquidity in USD"},"change24h":{"type":["number","null"],"description":"Price change over 24h, as a ratio"},"buys24h":{"type":["number","null"]},"sells24h":{"type":["number","null"]},"top10Rate":{"type":["number","null"],"description":"Share of supply held by the top 10 wallets"},"mintRenounced":{"type":["boolean","null"]},"lpLocked":{"type":["boolean","null"]},"honeypot":{"type":["boolean","null"]}},"required":["symbol","mcap","holders","liquidity","change24h","buys24h","sells24h","top10Rate","mintRenounced","lpLocked","honeypot"],"description":"On-chain snapshot at the time the dossier was written. Not live: re-read the project to refresh it."},{"type":"null"}]}},"required":["name","category","description","stage","confidence","chains","founders","backers","notable","token","links","unverified","onchain"],"description":"Our research on a project. Null when nobody has written it up yet."},{"type":"null"}]},"gg":{"oneOf":[{"type":"object","properties":{"status":{"type":"string","enum":["matched","checked_no_match","identity_unknown","identity_mismatch"]},"historyComplete":{"type":"boolean","description":"First-call fields are published only when complete, orderable history was verified."},"posts":{"type":["integer","null"],"description":"Verified calls for this chain-qualified token. Null means identity is unresolved; 0 means a verified no-call result."},"firstAt":{"type":["string","null"],"format":"date-time","description":"When it was first called"},"firstMcap":{"type":["number","null"],"description":"Market cap at the FIRST call, which is not the cheapest or the latest. A token with fifteen calls has fourteen other entries."},"firstCaller":{"type":["string","null"],"description":"gg handle of whoever called it first"},"latestAt":{"type":["string","null"],"format":"date-time","description":"The most recent call"},"mcap":{"type":["number","null"],"description":"gg's current market cap for the token"},"multiple":{"type":["number","null"],"description":"mcap over firstMcap. Below 1 when the call went down, and reported that way."},"checkedAt":{"type":["string","null"],"format":"date-time","description":"When we last asked gg"}},"required":["status","historyComplete","posts","firstAt","firstMcap","firstCaller","latestAt","mcap","multiple","checkedAt"],"description":"What gg.xyz knows about this project token. Null when we have not looked yet, which is not the same as {posts: 0}, which means we looked and nobody has called it."},{"type":"null"}]}},"required":["id","handle","identity","name","pfp","fol","why","bio","firstSeenByUs","entry","vel","aixbt","dossier","gg"],"description":"One project on the board. Every field is always present; unknown values are null."},{"type":"null"}]},"context":{"oneOf":[{"type":"object","properties":{"votes":{"type":"object","properties":{"up":{"type":"integer","minimum":0},"down":{"type":"integer","minimum":0}},"required":["up","down"]},"voters":{"oneOf":[{"type":"object","properties":{"up":{"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"avatar":{"type":["string","null"]}},"required":["name","avatar"]},"maxItems":20},"down":{"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"avatar":{"type":["string","null"]}},"required":["name","avatar"]},"maxItems":20},"limitPerSide":{"type":"integer","const":20}},"required":["up","down","limitPerSide"]},{"type":"null"}],"description":"Display names and avatars only for a currently allowlisted key owner. Null means withheld, not no voters."},"research":{"type":"object","properties":{"state":{"type":"string","enum":["ready","queued","researching","budget_wait","awaiting_admission","paused","needs_review","failed","not_requested","registration_pending","unavailable"]},"hasDossier":{"type":"boolean"},"nextEligibleAt":{"type":["string","null"],"format":"date-time"}},"required":["state","hasDossier","nextEligibleAt"]},"freshness":{"type":"object","properties":{"readAt":{"type":"string","format":"date-time","description":"Original public snapshot read time, retained on cache hits for up to 30 seconds. Not the time its sources updated."},"dossierAt":{"type":["string","null"],"format":"date-time"},"ggCheckedAt":{"type":["string","null"],"format":"date-time"},"onchainCheckedAt":{"type":["string","null"],"format":"date-time","description":"Last successful scheduled on-chain check. Unknown is null."}},"required":["readAt","dossierAt","ggCheckedAt","onchainCheckedAt"]}},"required":["votes","voters","research","freshness"]},{"type":"null"}]}},"required":["state","project","context"]}}}},"400":{"description":"Bad request. The message says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"Missing, malformed, unknown, revoked or expired key. One response for all of them.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Over 60 requests in 60 seconds. Retry-After says how long to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"503":{"description":"The archive could not be read. Retryable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/projects":{"get":{"operationId":"listProjects","summary":"The board, or what changed on it","description":"Two modes, kept apart on purpose.\n\n**Browse** with `page`: newest first, with totals, exactly what /dossiers shows.\n\n**Sync** with `since` or `cursor`: oldest change first, with a `next` cursor and no totals. Store `next`, pass it back tomorrow. You are caught up when fewer projects come back than `pageSize`.\n\nMixing the two is a 400 rather than a silent preference, because a consumer who thinks it is syncing while the server is paging builds a broken sync and never finds out.","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1},"description":"Browse mode. Not with since or cursor."},{"name":"since","in":"query","schema":{"type":"string","format":"date-time"},"description":"Sync mode. ISO 8601, inclusive of its own timestamp, because a whole poll batch shares one. Not with cursor."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Sync mode. A `next` value from an earlier response. Not with since."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50},"description":"Sync mode only."},{"name":"has_dossier","in":"query","schema":{"type":"boolean"},"description":"Sync mode only. Researched projects, or only unresearched ones."}],"responses":{"200":{"description":"A page of the board, or a delta.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"projects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Stable. Match on this, never on handle."},"handle":{"type":["string","null"],"description":"X handle without @, or null for projects without X. Can be reused by a different account."},"identity":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["x","website","contract"]},"handle":{"type":["string","null"]},"website":{"type":["string","null"]},"chain":{"type":["string","null"]},"contract":{"type":["string","null"]}},"required":["kind","handle","website","chain","contract"]},{"type":"null"}],"description":"Closed submitted public identity, available before research. No Discord or private ingestion metadata."},"name":{"type":["string","null"]},"pfp":{"type":["string","null"],"description":"Profile image URL"},"fol":{"type":["number","null"],"description":"Follower count at the last sighting"},"why":{"type":["string","null"],"description":"One line on why it reached the board"},"bio":{"type":["string","null"]},"firstSeenByUs":{"type":"string","format":"date-time","description":"When this project first reached our board. Not when the project started."},"entry":{"type":"object","properties":{"at":{"type":["string","null"]},"fol":{"type":["number","null"]}},"required":["at","fol"],"description":"The first sighting: when, and the follower count then."},"vel":{"type":"object","properties":{"h24":{"type":["number","null"]},"d7":{"type":["number","null"]}},"required":["h24","d7"],"description":"Follower velocity over 24 hours and 7 days."},"aixbt":{"type":"object","properties":{"lead":{"type":["string","null"]}},"required":["lead"],"description":"How far ahead of aixbt we were, when we were."},"dossier":{"oneOf":[{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string","description":"e.g. defi, infra, memecoin"},"description":{"type":"string"},"stage":{"type":"string","description":"e.g. idea, testnet, live"},"confidence":{"type":"string","description":"How firm the research is: low, medium or high"},"chains":{"type":"array","items":{"type":"string"}},"founders":{"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"handle":{"type":["string","null"]},"note":{"type":["string","null"]}},"required":["name","handle","note"]}},"backers":{"type":"array","items":{"type":"string"}},"notable":{"type":"array","items":{"type":"string"},"description":"Facts worth knowing that fit nowhere else"},"token":{"oneOf":[{"type":"object","properties":{"ticker":{"type":["string","null"]},"contract":{"type":["string","null"]},"chain":{"type":["string","null"]}},"required":["ticker","contract","chain"]},{"type":"null"}]},"links":{"type":"object","properties":{"site":{"type":["string","null"]},"docs":{"type":["string","null"]},"github":{"type":["string","null"]}},"required":["site","docs","github"]},"unverified":{"type":"array","items":{"type":"string"},"description":"Claims the project makes that we could not confirm. Read these before acting."},"onchain":{"oneOf":[{"type":"object","properties":{"symbol":{"type":["string","null"]},"mcap":{"type":["number","null"],"description":"Market cap in USD"},"holders":{"type":["number","null"]},"liquidity":{"type":["number","null"],"description":"Pool liquidity in USD"},"change24h":{"type":["number","null"],"description":"Price change over 24h, as a ratio"},"buys24h":{"type":["number","null"]},"sells24h":{"type":["number","null"]},"top10Rate":{"type":["number","null"],"description":"Share of supply held by the top 10 wallets"},"mintRenounced":{"type":["boolean","null"]},"lpLocked":{"type":["boolean","null"]},"honeypot":{"type":["boolean","null"]}},"required":["symbol","mcap","holders","liquidity","change24h","buys24h","sells24h","top10Rate","mintRenounced","lpLocked","honeypot"],"description":"On-chain snapshot at the time the dossier was written. Not live: re-read the project to refresh it."},{"type":"null"}]}},"required":["name","category","description","stage","confidence","chains","founders","backers","notable","token","links","unverified","onchain"],"description":"Our research on a project. Null when nobody has written it up yet."},{"type":"null"}]},"gg":{"oneOf":[{"type":"object","properties":{"status":{"type":"string","enum":["matched","checked_no_match","identity_unknown","identity_mismatch"]},"historyComplete":{"type":"boolean","description":"First-call fields are published only when complete, orderable history was verified."},"posts":{"type":["integer","null"],"description":"Verified calls for this chain-qualified token. Null means identity is unresolved; 0 means a verified no-call result."},"firstAt":{"type":["string","null"],"format":"date-time","description":"When it was first called"},"firstMcap":{"type":["number","null"],"description":"Market cap at the FIRST call, which is not the cheapest or the latest. A token with fifteen calls has fourteen other entries."},"firstCaller":{"type":["string","null"],"description":"gg handle of whoever called it first"},"latestAt":{"type":["string","null"],"format":"date-time","description":"The most recent call"},"mcap":{"type":["number","null"],"description":"gg's current market cap for the token"},"multiple":{"type":["number","null"],"description":"mcap over firstMcap. Below 1 when the call went down, and reported that way."},"checkedAt":{"type":["string","null"],"format":"date-time","description":"When we last asked gg"}},"required":["status","historyComplete","posts","firstAt","firstMcap","firstCaller","latestAt","mcap","multiple","checkedAt"],"description":"What gg.xyz knows about this project token. Null when we have not looked yet, which is not the same as {posts: 0}, which means we looked and nobody has called it."},{"type":"null"}]}},"required":["id","handle","identity","name","pfp","fol","why","bio","firstSeenByUs","entry","vel","aixbt","dossier","gg"],"description":"One project on the board. Every field is always present; unknown values are null."}},"page":{"type":"integer"},"pages":{"type":"integer"},"pageSize":{"type":"integer"},"total":{"type":"integer"},"researched":{"type":"integer"},"fetchedAt":{"type":["string","null"]}},"required":["projects","page","pages","pageSize","total","researched","fetchedAt"],"title":"Browse"},{"type":"object","properties":{"projects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Stable. Match on this, never on handle."},"handle":{"type":["string","null"],"description":"X handle without @, or null for projects without X. Can be reused by a different account."},"identity":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["x","website","contract"]},"handle":{"type":["string","null"]},"website":{"type":["string","null"]},"chain":{"type":["string","null"]},"contract":{"type":["string","null"]}},"required":["kind","handle","website","chain","contract"]},{"type":"null"}],"description":"Closed submitted public identity, available before research. No Discord or private ingestion metadata."},"name":{"type":["string","null"]},"pfp":{"type":["string","null"],"description":"Profile image URL"},"fol":{"type":["number","null"],"description":"Follower count at the last sighting"},"why":{"type":["string","null"],"description":"One line on why it reached the board"},"bio":{"type":["string","null"]},"firstSeenByUs":{"type":"string","format":"date-time","description":"When this project first reached our board. Not when the project started."},"entry":{"type":"object","properties":{"at":{"type":["string","null"]},"fol":{"type":["number","null"]}},"required":["at","fol"],"description":"The first sighting: when, and the follower count then."},"vel":{"type":"object","properties":{"h24":{"type":["number","null"]},"d7":{"type":["number","null"]}},"required":["h24","d7"],"description":"Follower velocity over 24 hours and 7 days."},"aixbt":{"type":"object","properties":{"lead":{"type":["string","null"]}},"required":["lead"],"description":"How far ahead of aixbt we were, when we were."},"dossier":{"oneOf":[{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string","description":"e.g. defi, infra, memecoin"},"description":{"type":"string"},"stage":{"type":"string","description":"e.g. idea, testnet, live"},"confidence":{"type":"string","description":"How firm the research is: low, medium or high"},"chains":{"type":"array","items":{"type":"string"}},"founders":{"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"handle":{"type":["string","null"]},"note":{"type":["string","null"]}},"required":["name","handle","note"]}},"backers":{"type":"array","items":{"type":"string"}},"notable":{"type":"array","items":{"type":"string"},"description":"Facts worth knowing that fit nowhere else"},"token":{"oneOf":[{"type":"object","properties":{"ticker":{"type":["string","null"]},"contract":{"type":["string","null"]},"chain":{"type":["string","null"]}},"required":["ticker","contract","chain"]},{"type":"null"}]},"links":{"type":"object","properties":{"site":{"type":["string","null"]},"docs":{"type":["string","null"]},"github":{"type":["string","null"]}},"required":["site","docs","github"]},"unverified":{"type":"array","items":{"type":"string"},"description":"Claims the project makes that we could not confirm. Read these before acting."},"onchain":{"oneOf":[{"type":"object","properties":{"symbol":{"type":["string","null"]},"mcap":{"type":["number","null"],"description":"Market cap in USD"},"holders":{"type":["number","null"]},"liquidity":{"type":["number","null"],"description":"Pool liquidity in USD"},"change24h":{"type":["number","null"],"description":"Price change over 24h, as a ratio"},"buys24h":{"type":["number","null"]},"sells24h":{"type":["number","null"]},"top10Rate":{"type":["number","null"],"description":"Share of supply held by the top 10 wallets"},"mintRenounced":{"type":["boolean","null"]},"lpLocked":{"type":["boolean","null"]},"honeypot":{"type":["boolean","null"]}},"required":["symbol","mcap","holders","liquidity","change24h","buys24h","sells24h","top10Rate","mintRenounced","lpLocked","honeypot"],"description":"On-chain snapshot at the time the dossier was written. Not live: re-read the project to refresh it."},{"type":"null"}]}},"required":["name","category","description","stage","confidence","chains","founders","backers","notable","token","links","unverified","onchain"],"description":"Our research on a project. Null when nobody has written it up yet."},{"type":"null"}]},"gg":{"oneOf":[{"type":"object","properties":{"status":{"type":"string","enum":["matched","checked_no_match","identity_unknown","identity_mismatch"]},"historyComplete":{"type":"boolean","description":"First-call fields are published only when complete, orderable history was verified."},"posts":{"type":["integer","null"],"description":"Verified calls for this chain-qualified token. Null means identity is unresolved; 0 means a verified no-call result."},"firstAt":{"type":["string","null"],"format":"date-time","description":"When it was first called"},"firstMcap":{"type":["number","null"],"description":"Market cap at the FIRST call, which is not the cheapest or the latest. A token with fifteen calls has fourteen other entries."},"firstCaller":{"type":["string","null"],"description":"gg handle of whoever called it first"},"latestAt":{"type":["string","null"],"format":"date-time","description":"The most recent call"},"mcap":{"type":["number","null"],"description":"gg's current market cap for the token"},"multiple":{"type":["number","null"],"description":"mcap over firstMcap. Below 1 when the call went down, and reported that way."},"checkedAt":{"type":["string","null"],"format":"date-time","description":"When we last asked gg"}},"required":["status","historyComplete","posts","firstAt","firstMcap","firstCaller","latestAt","mcap","multiple","checkedAt"],"description":"What gg.xyz knows about this project token. Null when we have not looked yet, which is not the same as {posts: 0}, which means we looked and nobody has called it."},{"type":"null"}]}},"required":["id","handle","identity","name","pfp","fol","why","bio","firstSeenByUs","entry","vel","aixbt","dossier","gg"],"description":"One project on the board. Every field is always present; unknown values are null."}},"next":{"type":"string","description":"Always present, including on an empty page."},"pageSize":{"type":"integer"}},"required":["projects","next","pageSize"],"title":"Sync"}]}}}},"400":{"description":"Bad request. The message says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"Missing, malformed, unknown, revoked or expired key. One response for all of them.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Over 60 requests in 60 seconds. Retry-After says how long to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"503":{"description":"The archive could not be read. Retryable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/projects/{handle}":{"get":{"operationId":"getProject","summary":"One project by X handle or stable ID","description":"Case sensitive, because the column is. A handle is not unique over time, so this returns the most recently changed match. Use ~ followed by a stable project ID for an unambiguous lookup, including projects without X.","parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string","pattern":"^(?:[A-Za-z0-9_]{1,40}|~[A-Za-z0-9_-]{1,32})$"},"description":"X handle without @, or ~stableProjectId"},{"name":"include","in":"query","schema":{"type":"string","enum":["context"]},"description":"Opt in to votes, public research state and freshness. Requires working rate protection; otherwise 503. Voter names require an allowlisted key owner. Does not start research."}],"responses":{"200":{"description":"The project; context only when requested.","content":{"application/json":{"schema":{"type":"object","properties":{"project":{"type":"object","properties":{"id":{"type":"string","description":"Stable. Match on this, never on handle."},"handle":{"type":["string","null"],"description":"X handle without @, or null for projects without X. Can be reused by a different account."},"identity":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["x","website","contract"]},"handle":{"type":["string","null"]},"website":{"type":["string","null"]},"chain":{"type":["string","null"]},"contract":{"type":["string","null"]}},"required":["kind","handle","website","chain","contract"]},{"type":"null"}],"description":"Closed submitted public identity, available before research. No Discord or private ingestion metadata."},"name":{"type":["string","null"]},"pfp":{"type":["string","null"],"description":"Profile image URL"},"fol":{"type":["number","null"],"description":"Follower count at the last sighting"},"why":{"type":["string","null"],"description":"One line on why it reached the board"},"bio":{"type":["string","null"]},"firstSeenByUs":{"type":"string","format":"date-time","description":"When this project first reached our board. Not when the project started."},"entry":{"type":"object","properties":{"at":{"type":["string","null"]},"fol":{"type":["number","null"]}},"required":["at","fol"],"description":"The first sighting: when, and the follower count then."},"vel":{"type":"object","properties":{"h24":{"type":["number","null"]},"d7":{"type":["number","null"]}},"required":["h24","d7"],"description":"Follower velocity over 24 hours and 7 days."},"aixbt":{"type":"object","properties":{"lead":{"type":["string","null"]}},"required":["lead"],"description":"How far ahead of aixbt we were, when we were."},"dossier":{"oneOf":[{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string","description":"e.g. defi, infra, memecoin"},"description":{"type":"string"},"stage":{"type":"string","description":"e.g. idea, testnet, live"},"confidence":{"type":"string","description":"How firm the research is: low, medium or high"},"chains":{"type":"array","items":{"type":"string"}},"founders":{"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"handle":{"type":["string","null"]},"note":{"type":["string","null"]}},"required":["name","handle","note"]}},"backers":{"type":"array","items":{"type":"string"}},"notable":{"type":"array","items":{"type":"string"},"description":"Facts worth knowing that fit nowhere else"},"token":{"oneOf":[{"type":"object","properties":{"ticker":{"type":["string","null"]},"contract":{"type":["string","null"]},"chain":{"type":["string","null"]}},"required":["ticker","contract","chain"]},{"type":"null"}]},"links":{"type":"object","properties":{"site":{"type":["string","null"]},"docs":{"type":["string","null"]},"github":{"type":["string","null"]}},"required":["site","docs","github"]},"unverified":{"type":"array","items":{"type":"string"},"description":"Claims the project makes that we could not confirm. Read these before acting."},"onchain":{"oneOf":[{"type":"object","properties":{"symbol":{"type":["string","null"]},"mcap":{"type":["number","null"],"description":"Market cap in USD"},"holders":{"type":["number","null"]},"liquidity":{"type":["number","null"],"description":"Pool liquidity in USD"},"change24h":{"type":["number","null"],"description":"Price change over 24h, as a ratio"},"buys24h":{"type":["number","null"]},"sells24h":{"type":["number","null"]},"top10Rate":{"type":["number","null"],"description":"Share of supply held by the top 10 wallets"},"mintRenounced":{"type":["boolean","null"]},"lpLocked":{"type":["boolean","null"]},"honeypot":{"type":["boolean","null"]}},"required":["symbol","mcap","holders","liquidity","change24h","buys24h","sells24h","top10Rate","mintRenounced","lpLocked","honeypot"],"description":"On-chain snapshot at the time the dossier was written. Not live: re-read the project to refresh it."},{"type":"null"}]}},"required":["name","category","description","stage","confidence","chains","founders","backers","notable","token","links","unverified","onchain"],"description":"Our research on a project. Null when nobody has written it up yet."},{"type":"null"}]},"gg":{"oneOf":[{"type":"object","properties":{"status":{"type":"string","enum":["matched","checked_no_match","identity_unknown","identity_mismatch"]},"historyComplete":{"type":"boolean","description":"First-call fields are published only when complete, orderable history was verified."},"posts":{"type":["integer","null"],"description":"Verified calls for this chain-qualified token. Null means identity is unresolved; 0 means a verified no-call result."},"firstAt":{"type":["string","null"],"format":"date-time","description":"When it was first called"},"firstMcap":{"type":["number","null"],"description":"Market cap at the FIRST call, which is not the cheapest or the latest. A token with fifteen calls has fourteen other entries."},"firstCaller":{"type":["string","null"],"description":"gg handle of whoever called it first"},"latestAt":{"type":["string","null"],"format":"date-time","description":"The most recent call"},"mcap":{"type":["number","null"],"description":"gg's current market cap for the token"},"multiple":{"type":["number","null"],"description":"mcap over firstMcap. Below 1 when the call went down, and reported that way."},"checkedAt":{"type":["string","null"],"format":"date-time","description":"When we last asked gg"}},"required":["status","historyComplete","posts","firstAt","firstMcap","firstCaller","latestAt","mcap","multiple","checkedAt"],"description":"What gg.xyz knows about this project token. Null when we have not looked yet, which is not the same as {posts: 0}, which means we looked and nobody has called it."},{"type":"null"}]}},"required":["id","handle","identity","name","pfp","fol","why","bio","firstSeenByUs","entry","vel","aixbt","dossier","gg"],"description":"One project on the board. Every field is always present; unknown values are null."},"context":{"type":"object","properties":{"votes":{"type":"object","properties":{"up":{"type":"integer","minimum":0},"down":{"type":"integer","minimum":0}},"required":["up","down"]},"voters":{"oneOf":[{"type":"object","properties":{"up":{"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"avatar":{"type":["string","null"]}},"required":["name","avatar"]},"maxItems":20},"down":{"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"avatar":{"type":["string","null"]}},"required":["name","avatar"]},"maxItems":20},"limitPerSide":{"type":"integer","const":20}},"required":["up","down","limitPerSide"]},{"type":"null"}],"description":"Display names and avatars only for a currently allowlisted key owner. Null means withheld, not no voters."},"research":{"type":"object","properties":{"state":{"type":"string","enum":["ready","queued","researching","budget_wait","awaiting_admission","paused","needs_review","failed","not_requested","registration_pending","unavailable"]},"hasDossier":{"type":"boolean"},"nextEligibleAt":{"type":["string","null"],"format":"date-time"}},"required":["state","hasDossier","nextEligibleAt"]},"freshness":{"type":"object","properties":{"readAt":{"type":"string","format":"date-time","description":"Original public snapshot read time, retained on cache hits for up to 30 seconds. Not the time its sources updated."},"dossierAt":{"type":["string","null"],"format":"date-time"},"ggCheckedAt":{"type":["string","null"],"format":"date-time"},"onchainCheckedAt":{"type":["string","null"],"format":"date-time","description":"Last successful scheduled on-chain check. Unknown is null."}},"required":["readAt","dossierAt","ggCheckedAt","onchainCheckedAt"]}},"required":["votes","voters","research","freshness"]}},"required":["project"]}}}},"400":{"description":"Bad request. The message says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"Missing, malformed, unknown, revoked or expired key. One response for all of them.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No project on the board has that handle.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Over 60 requests in 60 seconds. Retry-After says how long to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"503":{"description":"The archive could not be read. Retryable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/projects/{handle}/ask":{"get":{"operationId":"listAsks","summary":"What has been asked of Lark about a project, and what she answered","description":"Requests filed on the project and the answers to them. Needs a key with an owner on the allowlist; a plain read key gets a 403 that says so.","parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string","pattern":"^(?:[A-Za-z0-9_]{1,40}|~[A-Za-z0-9_-]{1,32})$"},"description":"Without the @"}],"responses":{"200":{"description":"Requests and answers.","content":{"application/json":{"schema":{"type":"object","properties":{"requests":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["dossier","question"]},"question":{"type":["string","null"]},"askedBy":{"type":"string","description":"Display name of whoever filed it."},"createdAt":{"type":"string","format":"date-time"},"state":{"type":"string","enum":["waiting","running","waiting_budget","done","failed"]},"error":{"type":["string","null"]},"reasonCode":{"type":["string","null"],"enum":["daily_x_budget","daily_grok_quota","grok_unavailable","database_capacity","attempt_x_budget","technical_retry","technical_attempts_exhausted","research_failed","actor_retired",null]},"nextEligibleAt":{"type":["string","null"],"format":"date-time","description":"Next eligibility, not a completion promise. Stop polling a budget wait until this time. Null for terminal attempt-budget failure."}},"required":["id","kind","question","askedBy","createdAt","state","error","reasonCode","nextEligibleAt"]},"description":"Open first, then the last few finished."},"answers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"question":{"type":"string"},"answer":{"type":"string","description":"Plain text. Lead line, then dash bullets with links."},"askedBy":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"model":{"type":["string","null"],"description":"e.g. \"gpt-5.6-luna on pi\"."}},"required":["id","question","answer","askedBy","createdAt","model"]},"description":"Newest first."}},"required":["requests","answers"]}}}},"400":{"description":"Bad request. The message says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"Missing, malformed, unknown, revoked or expired key. One response for all of them.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"403":{"description":"The key has no owner, or the owner is not on the allowlist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No project on the board has that handle.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Over 60 requests in 60 seconds. Retry-After says how long to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"503":{"description":"The archive could not be read. Retryable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}},"post":{"operationId":"askLark","summary":"Ask Lark about a project","description":"Files a request as the key's owner. `question` puts a specific question to Lark; the answer lands as a dated note beside the dossier when research completes. `dossier` requests the whole entry again, or writes it for a project that has none. Research uses the shared X budget. One dossier run at a time per project; an identical open question is not filed twice; five open requests per project is the ceiling. Stop on `done` or `failed`. For `waiting_budget`, wait until `nextEligibleAt` before polling again; eligibility is not a completion promise.","parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string","pattern":"^(?:[A-Za-z0-9_]{1,40}|~[A-Za-z0-9_-]{1,32})$"},"description":"Without the @"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["question","dossier"],"default":"question"},"question":{"type":"string","maxLength":500,"description":"Required when kind is question."}},"required":["kind","question"]}}}},"responses":{"200":{"description":"Filed. The fresh request list and answers.","content":{"application/json":{"schema":{"type":"object","properties":{"requests":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["dossier","question"]},"question":{"type":["string","null"]},"askedBy":{"type":"string","description":"Display name of whoever filed it."},"createdAt":{"type":"string","format":"date-time"},"state":{"type":"string","enum":["waiting","running","waiting_budget","done","failed"]},"error":{"type":["string","null"]},"reasonCode":{"type":["string","null"],"enum":["daily_x_budget","daily_grok_quota","grok_unavailable","database_capacity","attempt_x_budget","technical_retry","technical_attempts_exhausted","research_failed","actor_retired",null]},"nextEligibleAt":{"type":["string","null"],"format":"date-time","description":"Next eligibility, not a completion promise. Stop polling a budget wait until this time. Null for terminal attempt-budget failure."}},"required":["id","kind","question","askedBy","createdAt","state","error","reasonCode","nextEligibleAt"]},"description":"Open first, then the last few finished."},"answers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"question":{"type":"string"},"answer":{"type":"string","description":"Plain text. Lead line, then dash bullets with links."},"askedBy":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"model":{"type":["string","null"],"description":"e.g. \"gpt-5.6-luna on pi\"."}},"required":["id","question","answer","askedBy","createdAt","model"]},"description":"Newest first."}},"required":["requests","answers"]}}}},"400":{"description":"Bad request. The message says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"Missing, malformed, unknown, revoked or expired key. One response for all of them.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"403":{"description":"The key has no owner, or the owner is not on the allowlist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No project on the board has that handle.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"Refused by the per-project rules. The message says which.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Over 60 requests in 60 seconds. Retry-After says how long to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"503":{"description":"The archive could not be read. Retryable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/pulse":{"get":{"operationId":"listPulse","summary":"All eight current pulse cards","description":"One card per beat, the current state of each. There is no history to page: each beat is one row, rewritten in place. A beat with no card is `card: null`, which means quiet, not broken.","responses":{"200":{"description":"Every beat.","content":{"application/json":{"schema":{"type":"object","properties":{"beats":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"blurb":{"type":"string"},"card":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["live","quiet"],"description":"quiet means nothing moved, not broken"},"asOf":{"type":"string","description":"When the desk wrote this card"},"beat":{"type":"string"},"headline":{"type":"string"},"lede":{"type":"string"},"plain":{"type":["string","null"],"description":"The same story without the jargon"},"bullets":{"type":"array","items":{"type":"string"}},"receipts":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"href":{"type":"string"}},"required":["label","href"]},"description":"Links to the X posts behind the card"}},"required":["id","status","asOf","beat","headline","lede","plain","bullets","receipts"]},{"type":"null"}]}},"required":["id","label","blurb","card"]}}},"required":["beats"]}}}},"400":{"description":"Bad request. The message says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"Missing, malformed, unknown, revoked or expired key. One response for all of them.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Over 60 requests in 60 seconds. Retry-After says how long to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"503":{"description":"The archive could not be read. Retryable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/pulse/{beat}":{"get":{"operationId":"getBeat","summary":"One pulse card","parameters":[{"name":"beat","in":"path","required":true,"schema":{"type":"string","enum":["robinhood","solana","base","agents","breaking","bitcoin","institutions","products"]}}],"responses":{"200":{"description":"The beat.","content":{"application/json":{"schema":{"type":"object","properties":{"beat":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"blurb":{"type":"string"},"card":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["live","quiet"],"description":"quiet means nothing moved, not broken"},"asOf":{"type":"string","description":"When the desk wrote this card"},"beat":{"type":"string"},"headline":{"type":"string"},"lede":{"type":"string"},"plain":{"type":["string","null"],"description":"The same story without the jargon"},"bullets":{"type":"array","items":{"type":"string"}},"receipts":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"href":{"type":"string"}},"required":["label","href"]},"description":"Links to the X posts behind the card"}},"required":["id","status","asOf","beat","headline","lede","plain","bullets","receipts"]},{"type":"null"}]}},"required":["id","label","blurb","card"]}},"required":["beat"]}}}},"400":{"description":"Bad request. The message says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"Missing, malformed, unknown, revoked or expired key. One response for all of them.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No beat by that name. The eight are a closed set.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Over 60 requests in 60 seconds. Retry-After says how long to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"503":{"description":"The archive could not be read. Retryable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","rate_limited","bad_request","not_found","conflict","unavailable"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}}}}