What is a signed agent?

A signed agent is a bot or AI agent that signs each HTTP request with a private key, using HTTP Message Signatures as profiled by the IETF Web Bot Auth drafts. A site verifies the signature with the operator's published public key. That proves who operates the agent, whatever its IP address or user agent says.

At a glance

Mechanism
Web Bot Auth, built on HTTP Message Signatures (RFC 9421)
Headers
Signature, Signature-Input, Signature-Agent
How to verify
Fetch the operator's public key (JWK Set) and check the signature
Examples
ChatGPT agent signs. Google signs a subset of Google-Agent requests (experimental).
Standard status
IETF Internet-Draft (draft-ietf-webbotauth-httpsig-protocol), not yet an RFC
Term origin
Cloudflare introduced a signed agents category in August 2025

How to spot it

  • Headers: a signed request carries Signature-Input (what was signed, with tag="web-bot-auth"), Signature (the bytes) and Signature-Agent (where the keys live).
  • The user agent may mislead: signed agents often run real browsers, so the user agent can look like plain Chrome. The signature, not the string, names the operator.
  • Verify, don’t just detect: the headers are easy to add. Only a signature that checks out against the operator’s published key counts.

Status

The protocol is an IETF working-group draft and still changing. Providers already verify it in production, but only some bots sign, so treat a signature as the strongest signal when present and fall back to DNS and IP checks when it is not. Google says the same for its own signed traffic.

Related verification terms

Quick answers

How is a signed agent different from a verified bot?

A signed agent is verified one specific way, by its signature. A verified bot can also be confirmed by reverse DNS or published IP ranges.

Does a signed agent follow robots.txt?

A signature only proves identity. Whether the agent honors robots.txt is up to its operator, so check their documentation.

Can a signature be copied from one request and replayed?

Not usefully. The signature covers the target host and carries created and expires times, so a verifier rejects it elsewhere or once it lapses.

Sources