API reference
The public HTTP API behind the site: endpoints, versioning, rate limits, authentication and error format. Machine-readable schema at /openapi.json.
Which automated clients are allowed, which are challenged, which are blocked, and why the site does not use User-Agent as a security boundary.
Blocking everything automated is the easy answer and the wrong one. A large and growing share of discovery happens through machine clients: search crawlers, AI-search crawlers, social preview unfurlers, monitoring, and accessibility tooling. Blocking them costs reach and buys almost no security, because the clients you actually want to stop lie about who they are.
So the policy has two independent halves. robots.txt states our preference to well-behaved crawlers, which is a courtesy protocol, not enforcement. The edge makes the real decision from behaviour and reputation, which is enforcement and does not care what the User-Agent header claims.
Search engine crawlers: Googlebot, Bingbot, Applebot, DuckDuckBot, YandexBot, Baiduspider.
AI and AI-search crawlers: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-User, Claude-SearchBot, anthropic-ai, PerplexityBot, Perplexity-User, Applebot-Extended, Amazonbot, Bytespider, Google-Extended, cohere-ai, Meta-ExternalAgent, DuckAssistBot, MistralAI-User.
Archival and research: CCBot (Common Crawl), ia_archiver and the Internet Archive, and academic research crawlers that identify themselves.
Social preview: facebookexternalhit, Twitterbot, LinkedInBot, Slackbot, Discordbot, TelegramBot, WhatsApp, Pinterest, Redditbot.
Operational: uptime and TLS monitoring, and accessibility evaluation tools.
Unknown automated clients, clients whose request rate is well above human, clients whose TLS or header fingerprint does not match the browser they claim to be, and datacenter addresses behaving unlike a person. These get a managed challenge rather than a block, so a legitimate but unrecognised client can still get through.
Vulnerability scanners and exploit probes, credential stuffing, enumeration of users, IDs or endpoints, aggressive scraping, request floods, malformed and oversized requests, and requests for paths that exist only in an attack toolkit — .env, .git, wp-login.php, phpMyAdmin, backup archives.
Blocked probes are answered with a plain 404, without revealing whether the path exists or what the stack is.
A User-Agent header is a string the client chooses. Anyone can send Googlebot. Verifying a crawler means reverse DNS to the crawler operator domain and forward DNS back to the same address, or checking the published address ranges. The edge does that; robots.txt cannot.
The corollary matters too: because the header is not trusted for blocking, it is also not used for serving. The same HTML goes to every client.
Public API reads are limited per address per minute; public writes are limited harder and additionally protected by Turnstile. Limits return 429 with a Retry-After header rather than a silent drop, so a well-behaved client can back off correctly.
Where this page states a standard, an obligation or a research result, this is what it is drawn from. All external, all checkable.
The public HTTP API behind the site: endpoints, versioning, rate limits, authentication and error format. Machine-readable schema at /openapi.json.
How this site and the systems behind it are secured: headers, transport, secrets, dependencies, monitoring and disclosure.
The canonical name, description, logo, domains and social handles. Use these verbatim in directories, articles and structured data.
Last reviewed · Site changelog