The user-agent says ChatGPT. Is that proof?
No. Anyone can send the header ChatGPT-User, Claude-User, or Perplexity-User. Declared is self-reported: the user-agent names a published token and nothing was signed. Signed authenticates the request operator with Web Bot Auth, not buyer intent or payment. If the signature fails, the order stays Unknown.
The other risk is a plugin that paints “AI fraud” on a real customer because a script copied a user-agent. Declared means this is what they called themselves. Signed means the operator’s key checked out on this server. Neither one proves a person asked to buy or that payment is legitimate.
What each confidence means
- Declared: self-reported from the user-agent or checkout agent field. It says what the request called itself, not who paid or why.
- Signed: the operator’s published key checked out on this server. It authenticates who sent the request, not that a person asked to buy or that payment is valid.
- Payment: When the order moves to processing, completed, or on-hold, Stripe or PayPal may name the agent from gateway meta. That is gateway attribution, not proof of settlement. Strong gateway signals can update the stamp unless it was already signed. Stripe Link alone is weak evidence and never changes the stamp.
Two orders that are easy to confuse
Order #14 sent ChatGPT-User and no signature. The stamp was ChatGPT (declared). Order #20 sent a valid Web Bot Auth signature, and the key checked out, so the stamp named the signer, marked signed. A person can type ChatGPT-User into a script. They cannot pass the key check by typing. The order box on the home page is a stylized illustration of order #14, not a real customer record.
What signed requires
The signature has to be readable, current, and tied to a key that operator publishes. An expired signature, a replayed one, or a key that does not match does not get the agent’s name. The order stays Unknown, and the detail line on the order says the check failed. With no signature at all, a published name is stamped declared. The check is an HTTP message signature, Ed25519 only, as in RFC 9421.
Google signs some Google-Agent requests as agent.bot.goog, and not every one of them. A signed request is named Google. An unsigned Google-Agent request is declared. A normal browser with no token is Human.
The check runs on the store. Your store fetches the published key. The checkout request is not sent to Agent Stamp to be classified. Unknown is what a failed check becomes.