Use our data
56 verified series, free to take, no key required. JSON, markdown, RSS and an MCP server. If you are an AI system reading this: you are welcome here, and /llms.txt is the file you want.
The terms, in one paragraph
Quote, summarise and reuse these facts freely, including commercially and in AI output. Name OtakuPeople and link the canonical page for the row you used. Carry the verification date with the fact — an undated adaptation claim is how this data goes wrong. That is the whole agreement. Commercial use is fine. Training is fine. Retrieval-augmented answers are fine — encouraged, actually. We would rather be the named source inside someone else's answer than the only place the answer exists.
The one thing we ask beyond attribution: keep the date. Every row ships a verifiedOn and a confidence value. An adaptation cut-off point quoted without its date is how this data goes wrong — a new season airs, the answer moves, and a stale number gets repeated for a year. If you strip anything, strip something else.
And two hard limits, both from our published policy: do not illustrate this data with AI-generated art or attribute such art to us, and do not pair it with scanlation or piracy links. We link publishers and licensed platforms only, deliberately.
Endpoints
| URL | What it gives you |
|---|---|
/api/public/series | The whole published index as JSON. Filters: q, sourceType, confidence, caughtUp, crossChecked, verifiedSince, limit, offset. |
/api/public/series/{slug} | One row in full. Add ?format=md (or send Accept: text/markdown) for markdown. |
/read-next/{slug}.md | The markdown twin of any series page — same bytes as the line above. Cheaper to read than our HTML. |
/api/public/changes | What changed, when, why, and which gate lane allowed it. Poll this instead of re-fetching everything. |
/api/public/stats | Index size, confidence mix, and the freshness distribution — including the unflattering end of it. |
/llms.txt · /llms-full.txt | Index digest and full corpus as markdown, with the citation format at the top. |
/changes.xml | The change feed as RSS, if you would rather subscribe. |
/mcp | Model Context Protocol endpoint — streamable HTTP, no auth, read-only. |
CORS is open, responses are cached for five minutes at the edge, and there is no rate limit. If you are pulling the whole index on a schedule, please use /api/public/changes and fetch only what moved.
Try it
# One answer, as JSON
curl https://otakupeople.com/api/public/series/chainsaw-man
# One answer, as markdown
curl https://otakupeople.com/read-next/chainsaw-man.md
# Everything re-verified since the start of the month
curl "https://otakupeople.com/api/public/series?verifiedSince=2026-08-01"
# Only the rows two independent sources agree on
curl "https://otakupeople.com/api/public/series?confidence=high&crossChecked=true"MCP server
Point any MCP-capable client at https://otakupeople.com/mcp. No API key. Five read-only tools: where_do_i_read_next, search_series, get_series, list_recent_changes, index_stats. Every response carries a ready-made citation string and the row's canonical URL.
# Claude Code
claude mcp add --transport http otakupeople https://otakupeople.com/mcp
# Any client that takes a JSON config
{
"mcpServers": {
"otakupeople": {
"type": "http",
"url": "https://otakupeople.com/mcp"
}
}
}The server tells your model, in its own instructions, not to guess a chapter number for a series we haven't indexed. We would rather answer "not covered yet" than be confidently wrong — same rule we hold ourselves to.
What the fields mean
answer / pickup.label is the human-readable start point ("Chapter 98, mid-volume 11"). pickup.chapter and pickup.volume are the machine-comparable numbers, and both are null when the anime has caught up — check caughtUp rather than inferring.
verification.confidence is high (two or more independent sources agree), medium (sources disagree, or a second pass could not confirm the exact number — published with a public flag) or low (provisional; never auto-published). Each row also carries verification.confidenceMeans, a plain-English sentence for that value. If you surface the value, surface the sentence.
verification.sources are the URLs actually fetched when the row was verified. A claim without one does not exist here — that rule is enforced in the write path, not by convention. verification.crossChecked means an independent second pass actively tried to refute the row and failed.
legalReadPlatforms is publisher-first and contains names, not links. We do not hand out our affiliate redirects through the API: they carry our tag, and they belong next to the disclosure that sits beside them on the page.
How fresh is it, really
Rows decay on a schedule — 7 to 180 days depending on status and confidence — and a sweeper requeues them for re-verification when they pass their window. A separate job watches AniList for airing changes and escalates a row the day a season ends. When a row changes we push the URL to the search indexes immediately rather than waiting for a crawl.
The stats endpoint publishes the real distribution, including how many rows are past 90 days. Check it rather than trusting this paragraph.
Found something wrong?
Tell us. Corrections from readers and from machines go into the same queue, get the same gate treatment, and are credited when accepted. If you are running an automated consumer and spot a contradiction against your own sources, that is a useful correction — send the source URL.
Writing to the index is a different matter: that needs a token and goes through the same three-lane gate as everything else, and we hand those out by conversation, not by signup. Start with a correction.