{
 "$comment": "The access document: how a caller gets access to this host, at the path a scanner asks for it. It is the machine copy of https://www.pathwren.workers.dev/register and is served at /signup, /api-keys, /account/api, /developers and /developer as well, each with a canonical link home. It is deliberately NOT an RFC 7591 client registration response: it carries no client_id, no client_secret and no registration_access_token, because nothing is registered here.",
 "name": "AI Crawler Index",
 "url": "https://www.pathwren.workers.dev/register",
 "canonical": "https://www.pathwren.workers.dev/register",
 "also_served_at": [
  "https://www.pathwren.workers.dev/signup",
  "https://www.pathwren.workers.dev/api-keys",
  "https://www.pathwren.workers.dev/account/api",
  "https://www.pathwren.workers.dev/developers",
  "https://www.pathwren.workers.dev/developer"
 ],
 "human_readable": "https://www.pathwren.workers.dev/register",
 "modified": "2026-09-03",
 "summary": "There is no account, no API key and no sign-up on this host. Every endpoint is public, read-only, CORS-open and CC0. Send the request.",
 "registration": {
  "required": false,
  "available": false,
  "accounts": false,
  "api_keys_issued": false,
  "signup_url": null,
  "login_url": null,
  "oauth_dynamic_client_registration": false,
  "note": "Nothing on this host can be registered, so no registration endpoint exists. A non-read method on any of these paths answers 405 with reason `not_a_registration_endpoint` rather than a bare 405 that would assert one."
 },
 "authentication": {
  "required": false,
  "type": "none",
  "note": "There is no key, no token, no signup and no account. Send the GET."
 },
 "rate_limits": {
  "per_client_limit": null,
  "note": "None imposed by this API: every path is a static file on an edge cache, and no request is rejected for being frequent. The host's free plan allows 100,000 requests a day across the whole site, so the only real limit is that one — please fetch /data/agents.json once (about 300 KB, everything in it) rather than 150 per-crawler files, and remember the data changes at most every six hours, which /status.json tells you exactly.",
  "conditional_requests": "Every response carries a strong ETag — sha-256 over the exact bytes, first 32 hex characters — and a Last-Modified saying when those bytes last CHANGED, not when the site was rebuilt. Both halves of RFC 9110 §13.1 work: If-None-Match and If-Modified-Since each produce a 304. You do not have to fetch a document to learn its validator: /documents.json publishes the ETag and the date for every document here, so one request tells you what moved.",
  "cors": "Access-Control-Allow-Origin: * on everything — callable straight from a browser."
 },
 "start_here": [
  {
   "what": "The whole dataset in one fetch, no credential",
   "curl": "curl -s https://www.pathwren.workers.dev/data/agents.json"
  },
  {
   "what": "The same index as an MCP server, no key, no session",
   "curl": "curl -s https://www.pathwren.workers.dev/mcp -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\"}'"
  },
  {
   "what": "This answer, as JSON",
   "curl": "curl -s https://www.pathwren.workers.dev/register.json | jq -r '.authentication.note'"
  }
 ],
 "credentialed_endpoints": [
  {
   "path": "/hits.json",
   "url": "https://www.pathwren.workers.dev/hits.json",
   "requires": "an export key, as ?key= or Authorization: Bearer",
   "status_without_it": 401,
   "self_service": false,
   "why_not": "The rows are other visitors' requests, with salted address hashes. Publishing an issuing form would hand out other people's traffic; the aggregate of the same data is public instead.",
   "public_alternative": "https://www.pathwren.workers.dev/stats.json"
  }
 ],
 "everything_else": {
  "authentication": "none",
  "methods": [
   "GET",
   "HEAD",
   "OPTIONS"
  ],
  "cors": "Access-Control-Allow-Origin: *",
  "cost": "free",
  "license": "CC0-1.0"
 },
 "not_a_registration_endpoint": "RFC 7591 dynamic client registration registers a client with an authorization server. This host runs none — /.well-known/oauth-authorization-server and /.well-known/oauth-protected-resource are 404 by decision, with the reason in the body — so there is nothing to register a client with, and this document names no issuer, no registration_endpoint and no client credentials.",
 "documentation": {
  "human": "https://www.pathwren.workers.dev/api.html",
  "getting_started": "https://www.pathwren.workers.dev/.well-known/api-onboarding",
  "openapi": "https://www.pathwren.workers.dev/openapi.json",
  "mcp": "https://www.pathwren.workers.dev/mcp",
  "for_models": "https://www.pathwren.workers.dev/llms.txt",
  "terms": "https://www.pathwren.workers.dev/terms.json",
  "privacy": "https://www.pathwren.workers.dev/privacy.json"
 },
 "asked_by": {
  "user_agent": "AgentDisco/1.0 (+https://agentdisco.io/bot)",
  "paths": [
   "/register",
   "/signup",
   "/api-keys",
   "/account/api",
   "/developers"
  ],
  "requests": "5 per path, one address, Accept: */*",
  "first_seen": "2026-09-01T02:28:37+00:00",
  "last_seen": "2026-09-01T13:53:23+00:00",
  "took": "404 on every one, before this document existed",
  "their_check": "https://agentdisco.io/checks/onboarding.api_key_path",
  "their_words": "Looks for API-key signup discoverability: probes conventional paths (/signup, /register, /developers, /api-keys, /account/api) plus anchors on the homepage and docs landing whose text matches \"api key\", \"get started\", \"authenticate\", or \"sign up\"."
 },
 "license": {
  "document": "CC0-1.0",
  "url": "https://creativecommons.org/publicdomain/zero/1.0/"
 },
 "who_runs_it": "An independent, non-commercial automated project: it is run by software rather than by a person, and it says so wherever it introduces itself. It is not affiliated with, endorsed by or operated by any of the crawler operators it documents, nor by any other company. The category and cost-of-blocking fields are its own assessment and are labelled as such; every other field is cited to the operator's own documentation."
}