curl -s https://www.pathwren.workers.dev/status.json # this page, as JSON
No key, no account, no handshake — every page here has a JSON twin one hop away. Machine doors: 6 keyless GET tools · documents.json · changes · llms.txt · openapi.json · agent card · mcp · a2a
15/15 endpoints answered · 1997 IPv4 + 1062 IPv6 prefixes · refreshed 2026-09-14T03:51:08+00:00 · json
curl -s https://www.pathwren.workers.dev/status.json | jq '.sources_ok, .sources_failed'
A source that stops answering keeps its last known prefixes and is marked failed rather than emptied, because a prefix list that silently shrinks is worse than one that is visibly stale.
Measured here, not asserted: How a 100,000-request/day free plan gets spent in eight hours — 178,877 requests against a 100,000 ceiling, the platform’s own hourly counter, and the residual of 124,901 nobody can name. One of five documents about the same 24 hours — the other four are named at the foot of each one — every one of them also at .md and .json, with the figures and the SQL under the data index beside them.
To follow this without re-downloading anything: /changes.json is a since-cursor feed of every real change — prefixes added or removed, upstreams that failed or recovered, records edited. Read cursor from the response, send it back as since, and an unchanged answer is a 304 with no body.
| Source | State | HTTP | Prefixes | Operator timestamp | Fetched | Changed |
|---|---|---|---|---|---|---|
| openai-gptbot | ok | 200 | 21 | 2025-10-30T11:00:00 | 2026-09-14T03:51:03 | no |
| openai-searchbot | ok | 200 | 39 | 2026-01-02T11:00:00 | 2026-09-14T03:51:03 | no |
| openai-chatgpt-user | ok | 200 | 213 | 2026-09-11T18:40:00 | 2026-09-14T03:51:04 | no |
| google-googlebot | ok | 200 | 317 | 2026-09-11T14:46:08 | 2026-09-14T03:51:05 | no |
| google-special | ok | 200 | 272 | 2026-09-11T14:46:08 | 2026-09-14T03:51:05 | no |
| google-user-triggered | ok | 200 | 1058 | 2026-09-11T14:46:07 | 2026-09-14T03:51:06 | no |
| google-user-triggered-google | ok | 200 | 496 | 2026-09-11T14:46:08 | 2026-09-14T03:51:07 | no |
| bing-bingbot | ok | 200 | 28 | 2024-01-03T10:00:00 | 2026-09-14T03:51:07 | no |
| apple-applebot | ok | 200 | 33 | 2026-07-31T10:00:00 | 2026-09-14T03:51:07 | no |
| duckduckgo-duckduckbot | ok | 200 | 486 | 2026-09-01T12:44:58 | 2026-09-14T03:51:08 | no |
| perplexity-bot | ok | 200 | 8 | 2025-02-07T16:56:00 | 2026-09-14T03:51:08 | no |
| perplexity-user | ok | 200 | 4 | 2025-10-17T10:17:00 | 2026-09-14T03:51:08 | no |
| google-user-triggered-agents | ok | 200 | 4 | 2026-03-03T10:00:00 | 2026-09-14T03:51:08 | no |
| commoncrawl-ccbot | ok | 200 | 5 | 2026-08-11T13:40:00 | 2026-09-14T03:51:08 | no |
| ahrefs-crawler | ok | 200 | 81 | — | 2026-09-14T03:51:08 | no |
This page as markdown: /status.md — the same text, no markup to strip, no JavaScript, no key, CC0. Every page here has one: add .md to any address (also .mdx, <page>.html.md, <page>.html.mdx), or send Accept: text/markdown to this one. All of them in a single index: /sitemap.md.