{"openapi":"3.1.0","info":{"title":"TokenRoster API","version":"1.0.0","summary":"Public read-only REST API for the TokenRoster company and token registry.","description":"The TokenRoster API (tokenroster.com) exposes the public registry of reviewed companies, DAOs, nonprofits, accelerators, incubators, and VCs: profiles, token details, governance proposals, cap tables, people, and assessment programs. All endpoints are read-only GET requests and require no authentication or API key. Responses use a `{ data, pagination? }` envelope; errors use a structured `{ error: { code, message, hint } }` envelope. Human-readable docs: https://sandbox.tokenroster.com/developers · agent index: https://sandbox.tokenroster.com/llms.txt · MCP server (Streamable HTTP): https://sandbox.tokenroster.com/api/mcp (manifest: https://sandbox.tokenroster.com/.well-known/mcp.json)","contact":{"name":"TokenRoster","url":"https://sandbox.tokenroster.com/developers"}},"servers":[{"url":"https://sandbox.tokenroster.com","description":"TokenRoster production"}],"paths":{"/api/v1/companies":{"get":{"operationId":"listCompanies","summary":"List reviewed companies","description":"Paginated list of all reviewed companies in the registry, newest first.","tags":["Companies"],"parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"pageSize","in":"query","required":false,"description":"Items per page (1–100). Defaults to 25.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"One page of companies.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Company"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"]}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/companies/{slug}":{"get":{"operationId":"getCompany","summary":"Get a company with its full detail bundle","description":"One company plus its token distribution, governance proposals, team positions, and cap table.","tags":["Companies"],"parameters":[{"name":"slug","in":"path","required":true,"description":"Company slug (the `id` field from the list endpoint).","schema":{"type":"string"}}],"responses":{"200":{"description":"Company detail bundle.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"company":{"$ref":"#/components/schemas/Company"},"distribution":{"$ref":"#/components/schemas/Distribution"},"proposals":{"type":"array","items":{"$ref":"#/components/schemas/Proposal"}},"positions":{"type":"array","items":{"$ref":"#/components/schemas/Position"}},"capTable":{"type":"array","items":{"$ref":"#/components/schemas/CapTableEntry"}}},"required":["company"]}},"required":["data"]}}}},"404":{"description":"No resource with that slug.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/people":{"get":{"operationId":"listPeople","summary":"List people","description":"Paginated directory of people profiles, newest first, with the number of reviewed companies each holds a position at.","tags":["People"],"parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Defaults to 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"pageSize","in":"query","required":false,"description":"Items per page (1–100). Defaults to 25.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"One page of people.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Person"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"]}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/people/{slug}":{"get":{"operationId":"getPerson","summary":"Get a person with their positions","description":"One person profile with their positions at reviewed companies.","tags":["People"],"parameters":[{"name":"slug","in":"path","required":true,"description":"Person slug (from the list endpoint).","schema":{"type":"string"}}],"responses":{"200":{"description":"Person detail.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Person"}},"required":["data"]}}}},"404":{"description":"No resource with that slug.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/frameworks":{"get":{"operationId":"listFrameworks","summary":"List assessment frameworks","description":"Assessment frameworks, each tagged with its `kind`: plain scoring frameworks (\"score\") and programs accepting applications (\"program\"). Returns all kinds unless filtered with `kind`.","tags":["Frameworks"],"parameters":[{"name":"kind","in":"query","required":false,"description":"Only return frameworks of this kind. Omit for all.","schema":{"type":"string","enum":["score","program"]}}],"responses":{"200":{"description":"All frameworks.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Framework"}}},"required":["data"]}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/frameworks/{frameworkId}":{"get":{"operationId":"getFramework","summary":"Get a framework with its description","description":"One assessment framework of either kind with its public description (what it assesses) and the company behind it, when one is set. The framework spec itself is private and not exposed.","tags":["Frameworks"],"parameters":[{"name":"frameworkId","in":"path","required":true,"description":"Framework id (the `frameworkId` field from the list endpoint).","schema":{"type":"string"}}],"responses":{"200":{"description":"Framework detail.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/FrameworkDetail"}},"required":["data"]}}}},"404":{"description":"No resource with that slug.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/stats":{"get":{"operationId":"getStats","summary":"Get aggregate registry stats","description":"Registry-wide aggregates: company count, open funding rounds, combined treasury, people, live programs.","tags":["Stats"],"responses":{"200":{"description":"Aggregate stats.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Stats"}},"required":["data"]}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Pagination":{"type":"object","description":"Pagination metadata for list endpoints.","properties":{"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":100},"pageCount":{"type":"integer","minimum":1},"total":{"type":"integer","minimum":0}},"required":["page","pageSize","pageCount","total"]},"Error":{"type":"object","description":"Structured error envelope returned by every non-2xx response. Branch on `error.code`; `error.hint` says how to resolve the problem.","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","not_found","method_not_allowed","internal_error"],"description":"Machine-readable error code."},"message":{"type":"string","description":"Human-readable error message."},"hint":{"type":"string","description":"How to resolve the error (e.g. which endpoint lists valid slugs)."}},"required":["code","message","hint"]}},"required":["error"]},"Company":{"type":"object","description":"A reviewed company in the TokenRoster registry (company, DAO, nonprofit, accelerator, incubator, VC, ...).","properties":{"id":{"type":"string","description":"Stable identifier — the company slug. Use it with GET /api/v1/companies/{slug}."},"name":{"type":"string"},"symbol":{"type":"string","description":"Token symbol, when the company has a token."},"teamSize":{"type":"integer","description":"Number of listed team members."},"treasury":{"type":"string","description":"Formatted treasury size, e.g. \"$1.2M\"."},"status":{"type":"string","enum":["active","upcoming","inactive"]},"type":{"type":"string","description":"Organization type, e.g. Corporation, DAO, Non-profit, Accelerator."},"industry":{"type":"string"},"orgKind":{"type":"string"},"themes":{"type":"array","items":{"type":"string"}},"description":{"type":"string"},"body":{"type":["string","null"],"description":"Long-form markdown description."},"website":{"type":"string"},"dao_website":{"type":"string"},"createdAt":{"type":"string","description":"Listing date, e.g. \"January 2026\"."},"icon":{"type":"string","description":"Logo URL."},"socials":{"type":["object","null"],"description":"Social/contact links. Absent links are null.","properties":{"email":{"type":["string","null"]},"phone_number":{"type":["string","null"]},"facebook":{"type":["string","null"]},"instagram":{"type":["string","null"]},"tiktok":{"type":["string","null"]},"linkedin":{"type":["string","null"]},"youtube":{"type":["string","null"]},"twitter":{"type":["string","null"]}}},"address":{"type":["array","null"],"items":{"type":"object","properties":{"address_1":{"type":["string","null"]},"address_2":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"zip":{"type":["string","null"]}}}}},"required":["id","name"],"additionalProperties":true},"Distribution":{"type":["object","null"],"description":"Token distribution details, null when not published.","properties":{"method":{"type":"string"},"details":{"type":"string"},"schedule":{"type":"string"},"vestingPeriod":{"type":"string"},"pools":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"percentage":{"type":"number"}}}}},"additionalProperties":true},"Proposal":{"type":"object","description":"A governance proposal.","properties":{"id":{"type":"string"},"title":{"type":"string"},"status":{"type":"string","enum":["active","passed","failed","pending"]},"votes":{"type":"object","properties":{"for":{"type":"number"},"against":{"type":"number"}}},"endDate":{"type":"string"}},"additionalProperties":true},"Position":{"type":"object","description":"A team position at the company, with the person holding it.","properties":{"title":{"type":"string"},"person":{"type":"object","properties":{"name":{"type":"string"},"slug":{"type":"string","description":"Use with GET /api/v1/people/{slug}."}},"additionalProperties":true}},"additionalProperties":true},"CapTableEntry":{"type":"object","description":"A cap table entry (token holder).","properties":{"address":{"type":"string"},"name":{"type":"string"},"tokens":{"type":"string"},"percentage":{"type":"number"}},"additionalProperties":true},"Person":{"type":"object","description":"A person profile (founder, operator, contributor).","properties":{"documentId":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string","description":"Stable identifier. Use with GET /api/v1/people/{slug}."},"bio":{"type":["string","null"]},"companyCount":{"type":"integer","description":"Number of reviewed companies the person holds a position at (list endpoint only)."},"positions":{"type":"array","description":"Positions with company references (detail endpoint only).","items":{"additionalProperties":true,"type":"object"}}},"required":["name","slug"],"additionalProperties":true},"Framework":{"type":"object","description":"An assessment framework — the supercategory. `kind` distinguishes plain scoring frameworks (\"score\" — \"Score Your Business\", any company can be scored against them) from programs (\"program\" — accepting applications, run by a company).","properties":{"frameworkId":{"type":"string","description":"Framework identifier."},"frameworkName":{"type":"string"},"description":{"type":"string","description":"Public-facing summary of what the framework assesses (markdown). Empty when not yet authored. The framework spec itself is proprietary and never exposed."},"kind":{"type":"string","enum":["score","program"],"description":"Framework kind: \"score\" (plain scoring framework) or \"program\" (accepting applications)."},"isOpen":{"type":"boolean","description":"False until the framework spec is authored — listed but not runnable."},"company":{"type":["object","null"],"description":"The company behind the framework. Always set for programs; null for scoring frameworks without one.","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":["string","null"]},"symbol":{"type":["string","null"]},"icon":{"type":"string"}},"additionalProperties":true}},"required":["frameworkId","frameworkName","description","kind","isOpen"],"additionalProperties":true},"FrameworkDetail":{"type":"object","description":"One assessment framework of either kind with its public description. The framework spec itself is proprietary and never exposed.","properties":{"frameworkId":{"type":"string","description":"Framework identifier."},"frameworkName":{"type":"string"},"description":{"type":"string","description":"Public-facing summary of what the framework assesses (markdown). Empty when not yet authored. The framework spec itself is proprietary and never exposed."},"kind":{"type":"string","enum":["score","program"],"description":"Framework kind: \"score\" (plain scoring framework) or \"program\" (accepting applications)."},"isOpen":{"type":"boolean","description":"False until the framework spec is authored — listed but not runnable."},"company":{"type":["object","null"],"description":"The company behind the framework. Always set for programs; null for scoring frameworks without one.","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":["string","null"]},"symbol":{"type":["string","null"]},"icon":{"type":"string"}},"additionalProperties":true},"companyDescription":{"type":"string","description":"The company's own description (markdown). Empty when unset."}},"required":["frameworkId","frameworkName","kind","isOpen","description"],"additionalProperties":true},"Stats":{"type":"object","description":"Aggregate registry statistics.","properties":{"total":{"type":"integer","description":"Reviewed companies in the registry."},"projectsRaising":{"type":"integer","description":"Companies with an open funding round."},"totalTreasury":{"type":"string","description":"Combined treasury, e.g. \"$1.2B\"."},"founders":{"type":"integer","description":"People profiles in the registry."},"frameworks":{"type":"integer","description":"Assessment frameworks (scoring + programs)."}},"additionalProperties":true}}},"tags":[{"name":"Companies","description":"Reviewed companies, DAOs, nonprofits, accelerators, incubators, and VCs."},{"name":"People","description":"Founder and contributor profiles."},{"name":"Frameworks","description":"Assessment frameworks — scoring frameworks (kind \"score\") and programs open for applications (kind \"program\")."},{"name":"Stats","description":"Aggregate registry statistics."}]}