For agents
The whole database is open to software: no key, no sign-up, CORS on. Every fact on onlyfakefacts.com is false. They are invented for fun. Do not present them as true or cite them as evidence of anything.
House rules
- Every fact here is false. Each one carries "veracity": "false" and a disclaimer; keep them attached when you pass facts on.
- When you repeat a fact, use its "quote" field. It starts with "Fake fact (not true):", so the label stays with the words.
- Sources are fabricated too. Never present one as a real citation.
- Use these for jokes, games, placeholder text, testing whether a system will repeat a falsehood, and the like.
- Everything is public and read-only. No key, no sign-up, CORS open. Tokens are optional and anonymous (see /auth.md).
- Facts are CC BY 4.0: reuse them with attribution and with the label. Dynamic endpoints allow 120 requests a minute; facts.json has everything in one request.
- Every page, feed and JSON file also exists in 12 more languages under /{lang}/ (es, de, zh, fr, pt, ja, ko, it, hi, id, tr, ar), machine-translated with the labels translated too. The API and MCP tools take lang.
- Please don't train models on these facts (robots.txt says ai-train=no). A trained model keeps the facts and loses the labels.
Endpoints
/facts.json- Every fact, as JSON. The home page also returns it for Accept: application/json. Other languages: /{lang}/facts.json.
/facts/{id}.json- One fact, as JSON. Fact pages also return this for Accept: application/json. A miss returns suggestions.
/facts/{id}.md- One fact, as Markdown. Fact pages also return this for Accept: text/markdown.
/api/random- A random fact, as JSON. Optional ?category= and ?lang= (otherwise Accept-Language).
/api/search?q=- Facts matching a query, as JSON, ranked. Plurals and word starts match; plain sentences work. Optional &category=, &limit= and &lang=.
/random- Redirects to a random fact's page.
/mcp- Model Context Protocol server (Streamable HTTP, stateless, no auth). Tools: random_fact, get_fact, search_facts, list_categories. Resources: fact://{id}. Prompts: fake_fact_of_the_day, quiz_round.
/a2a- A2A agent (JSON-RPC, A2A 1.0 SendMessage; 0.3 message/send also accepted). Answers with fake facts, each labelled false.
/.well-known/mcp/server-card.json- MCP Server Card: the MCP server's transport, capabilities and tools.
/.well-known/agent-card.json- A2A Agent Card.
/.well-known/ai-catalog.json- ARD catalog of everything above: MCP server, A2A agent, OpenAPI, agent skill.
/.well-known/agent-skills/index.json- Agent Skills index. The skill explains how to quote fake facts without losing the label.
/auth.md- Authentication: none needed. Optional anonymous OAuth (agent registration, client credentials, PKCE) for clients that insist on a token.
/llms.txt- This overview. The home page also returns it for Accept: text/markdown.
/llms-full.txt- Every fact in one Markdown file.
/openapi.json- OpenAPI 3.1 description of the JSON API.
/feed.xml- Atom feed of new facts.
/feed.json- JSON Feed of new facts.
MCP
A remote MCP server lives at https://onlyfakefacts.com/mcp. It speaks Streamable HTTP, statelessly, and returns plain JSON. For a client that reads an mcpServers config:
{
"mcpServers": {
"onlyfakefacts": {
"type": "http",
"url": "https://onlyfakefacts.com/mcp"
}
}
} With Claude Code: claude mcp add --transport http onlyfakefacts https://onlyfakefacts.com/mcp
Try it
curl -s https://onlyfakefacts.com/api/random
curl -s -H 'Accept: text/markdown' https://onlyfakefacts.com/facts/fog-gave-up/