Web Bot Auth lets an automated client sign an HTTP request with an asymmetric key. A verifier reads Signature, Signature-Input, and Signature-Agent, fetches the signer's public key from its declared directory, and checks the signature before applying bot policy. The protocol works at the HTTP layer, so it does not require a new transport protocol or a per-site shared secret.
Key facts about Web Bot Auth
- On 2026-09-01, the IETF published
draft-ietf-webbotauth-httpsig-protocol-00, an Internet-Draft with Intended status: Standards Track. Thibault Meunier of Cloudflare and Sandor Major of Google are the authors. The draft expires on 2027-03-05. It is a work in progress, not an RFC. - A signed request carries
Signature,Signature-Input, andSignature-Agent. - The signature parameters include
created,expires, a base64url JWK SHA-256 thumbprint inkeyid, andtag="web-bot-auth". The covered components must include@authorityor@target-uri, and the signature must cover theSignature-Agentmember for its own label. - In the default directory mode, the verifier resolves an HTTPS origin to
/.well-known/http-message-signatures-directory, which returns a JWKS with media typeapplication/http-message-signatures-directory+json. - OpenAI says ChatGPT Work's Cloud browser signs requests with
Signature-Agent: "https://chatgpt.com". Google says only a subset ofGoogle-Agentrequests are signed, usinghttps://agent.bot.goog, and labels its implementation experimental.
How Web Bot Auth signs a request
Web Bot Auth uses RFC 9421, HTTP Message Signatures. The signature travels in HTTP headers, while TLS continues to protect the connection. The current IETF draft requires the Signature-Agent field to be a Structured Fields dictionary. A minimal current-draft shape is:
GET /api/v1/catalog HTTP/1.1
Host: api.example.com
Signature-Agent: sig1="https://agent.example"
Signature-Input: sig1=("@authority" "signature-agent";key="sig1");created=...;expires=...;keyid="...";alg="ed25519";tag="web-bot-auth"
Signature: sig1=:base64-signature:The signer chooses the components. The draft requires @authority or @target-uri, the time bounds, the key thumbprint, and the Web Bot Auth tag. It also requires the signer to cover the Signature-Agent member that corresponds to the signature label. A signer can cover more components, such as @method or @path, to narrow where a captured signature can be replayed. A body is not covered automatically. A request that needs body integrity must include and sign Content-Digest.
Cloudflare's deployed integration follows an older form of Signature-Agent, written as a quoted string:
Signature-Agent: "https://signature-agent.test"Cloudflare says it rejects the later dictionary form, rejects an unquoted URI, and rejects a request that does not include signature-agent in Signature-Input. This is an implementation difference to check before sending the current IETF syntax to Cloudflare.
In the default directory mode, the verifier treats the Signature-Agent value as an HTTPS origin and fetches /.well-known/http-message-signatures-directory. The directory must return HTTP 200, use HTTPS, serve a JWKS, and use the registered media type. The verifier selects a key by matching the request's keyid to the published key and can cache the directory according to its cache headers. A valid signature proves that the holder of that key signed the covered components. It does not prove that the agent is harmless or that the request is authorized.
The directory itself can carry a possession proof. Cloudflare requires one signature per published key over the directory response, with tag="http-message-signatures-directory" and @authority covered. The current IETF draft recommends this proof for domain binding and requires valid proof before a verifier attributes redistributed key material to a Signature-Agent URL. The response signature stops a copied key set from being presented as if it came from another authority.
How edge networks verify signed agents
An edge provider can fetch and cache the public key, verify the request, and apply a bot rule before the request reaches an origin. OpenAI's Cloud browser allowlisting guide documents these integrations:
Platform | Identifier | Operator action |
|---|---|---|
Cloudflare | Bot tag | Match the detection ID in a WAF rule |
Akamai |
| Allow it in Artificial Intelligence bots |
Vercel |
| No extra configuration for Vercel-hosted sites |
HUMAN |
| Manage it in Known Bots & Crawlers or AgenticTrust |
Cloudflare announced its signed-agent category on 2025-08-28. Cloudflare says its Browser Rendering product sends signed Web Bot Auth headers and that the first partner cohort included ChatGPT agent, Goose from Block, Browserbase, and Anchor Browser.
Cloudflare's implementation has constraints that do not describe every possible RFC 9421 deployment:
- Its documented signing flow uses Ed25519 keys and recommends covering
@authoritywith ASCII-only components. - It recommends signing the whole query with
@query, not an individual parameter with@query-params. - It rejects several RFC 9421 component parameters in requests, including
sf,bs,key, andreq. - Cloudflare is experimenting with RFC 7239
Forwardedvalues such asForwarded: for="openai";use="reference"to carry operator and content-use information through an intermediary.
What changed in Web Bot Auth
RFC 9421, the underlying HTTP Message Signatures standard, is dated February 2024. Cloudflare's signed-agent announcement followed on 2025-08-28. The current IETF Web Bot Auth Internet-Draft arrived on 2026-09-01 and expires on 2027-03-05. Calling that draft a finished standard would be wrong.
Google's current guide still calls its Web Bot Auth integration experimental. It says that not all Google user agents use the protocol, that Google does not sign every request, and that operators should retain IP, reverse-DNS, and User-Agent checks as fallbacks.
Sources
- IETF Web Bot Auth protocol draft: https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/ (read 2026-10-06)
- RFC 9421, HTTP Message Signatures: https://www.rfc-editor.org/rfc/rfc9421.html (read 2026-10-06)
- Cloudflare Web Bot Auth documentation: https://developers.cloudflare.com/bots/reference/bot-verification/web-bot-auth/ (read 2026-10-06)
- Cloudflare signed agents announcement: https://blog.cloudflare.com/signed-agents/ (read 2026-10-06)
- OpenAI ChatGPT Cloud browser allowlisting: https://help.openai.com/en/articles/11845367-chatgpt-agent-allowlisting (read 2026-10-06)
- Google Web Bot Auth verification guide: https://developers.google.com/crawling/docs/crawlers-fetchers/web-bot-auth (read 2026-10-06)
Last verified: 2026-10-06.