For shops
More and more shops ask AI agents to identify themselves. A method for this is taking shape: the agent signs its requests and names, in the Signature-Agent header, where its public key can be found (“HTTP Message Signatures for automated traffic”, an Internet-Draft of the IETF Web Bot Auth working group, 1 September 2026, authors from Cloudflare and Google).
That tells you which key signed. The draft itself says it does not express authorization or delegation and says nothing about who operates the agent. This is the gap ID MANDAT fills.
In three steps
- Verify the signature. A library or your provider (a content delivery network, for example) does this. ID MANDAT does not verify the signature.
- Ask ID MANDAT. Take the address from the
Signature-Agentheader and ask who has declared it. - Decide by your own house rules. For example: registered agents may compare prices, ordering needs a human's confirmation, entries that are no longer valid are rejected.
The lookup
Signature-Agent: sig="https://bot.example-company.com"
curl "https://idmandat.com/api/v1/verify?signature_agent=https://bot.example-company.com"
You can also pass the whole header value. Like the lookup by domain, the answer is digitally signed (Ed25519, beta, how to verify the signature) and valid for 15 minutes. AI agents can ask directly too: our MCP server offers the tool verify_signature_agent.
Python
import requests
def who_is_behind(signature_agent_header):
r = requests.get("https://idmandat.com/api/v1/verify",
params={"signature_agent": signature_agent_header}, timeout=5)
a = r.json()
if a.get("entry_state") in ("revoked", "suspended", "expired"):
return "deny: entry no longer valid"
if not a.get("registered") or a.get("ambiguous"):
return "unknown: decide by your own house rules"
agent = a["agents"][0] if a.get("agents") else {}
return a["organization"], a["level"], agent.get("may"), agent.get("mayNot")
JavaScript
async function whoIsBehind(signatureAgent) {
const url = "https://idmandat.com/api/v1/verify?signature_agent=" + encodeURIComponent(signatureAgent);
const a = await (await fetch(url)).json();
if (["revoked", "suspended", "expired"].includes(a.entry_state)) return { allow: false, why: a.entry_state };
if (!a.registered || a.ambiguous) return { allow: null, why: "unknown" };
return { allow: true, company: a.organization, level: a.level, agent: a.agents[0] };
}
What the answer means
| Field | Meaning |
|---|---|
registered | true: a registered company declares this key directory for one of its agents. |
level | verified, registered or listed_unverified. How far ID MANDAT has checked the company. |
agents[].may / mayNot | What the company says the agent may and may not do. This is the company's declaration, not a check by ID MANDAT. |
key_directory_link | same_domain: the key directory is hosted on the company's domain (or a subdomain). A hint, not a proof. declared_only: the company only declares it, it is hosted elsewhere. |
entry_state | revoked, suspended, expired: the entry is no longer valid. Do not rely on earlier answers. |
ambiguous | More than one company declares the same key directory. ID MANDAT cannot say who is responsible. |
What ID MANDAT does not do here
- It does not verify that the request's signature is valid.
- In this version it does not check that the company really controls the key directory. The address sits in the credential file the company puts on its own, DNS-confirmed domain. If two companies declare the same directory, we say so explicitly.
- It confirms identity and authority, not creditworthiness, trustworthiness or quality.
- No entry is not a sign of wrongdoing. So far there are only a few entries.
House rules for AI agents
A shop can put what agents may do on its site into a small file, served at /.well-known/agent-house-rules.json on your domain. Agent operators can then read whether they must identify themselves, whether an entry in a register is expected, and which actions are allowed, need a human's confirmation, or are off limits.
This is ID MANDAT's own proposal, not a standard. No agent reads this file automatically today. It helps because it states your rules clearly and operators can look them up. If the format is missing something or looks wrong to you, tell us.
Register your company and your agents
Do you run agents yourself? In your credential, enter the address that also appears in your Signature-Agent header in the field “Key directory”. Then shops can find you by key. Structure: standard. Register: €10 per year.