Declare your agents
An organisation can say which AI agents act for it by publishing one file on its own website: https://<your host>/.well-known/agent-representation.json. GAIP reads it every week and keeps a dated record of what it said, so a person's agent that is approached by an agent claiming to act for you can check your own file, as GAIP read it, before it answers.
The file
JSON, schema_version gaip.representation.v1. agents lists each agent: its endpoint (an https URL) or key_thumbprint (RFC 7638), or both; a role; since and, when it stops acting for you, until (YYYY-MM-DD). Add contact_for_disputes, a version and, if you sign it, a signature. A name field, or any other field, is never indexed.
Roles
SUPPORT: Answers the organisation's customers and callers about its own services.SALES: Offers, quotes or sells the organisation's goods or services.PAYMENTS: Sends, requests or receives payments for the organisation.NOTICES: Sends or receives notices for the organisation (cancellations, complaints, service messages).RESEARCH: Reads public information and answers questions about it.OTHER: A role the organisation's file does not name with one of the other words.
GAIP's own file
The first declaration on record is GAIP's: /.well-known/agent-representation.json.
{
"schema_version": "gaip.representation.v1",
"agents": [
{
"endpoint": "https://www.gaipagents.com/mcp",
"role": "RESEARCH",
"since": "2026-10-09"
},
{
"endpoint": "https://www.gaipagents.com/a2a/agentverse",
"role": "RESEARCH",
"since": "2026-10-09"
},
{
"endpoint": "https://www.gaipagents.com/a2a/integration-protocol",
"role": "RESEARCH",
"since": "2026-10-09"
},
{
"endpoint": "https://www.gaipagents.com/a2a/witness-agent",
"role": "OTHER",
"since": "2026-10-09"
},
{
"endpoint": "https://www.gaipagents.com/a2a/listing-observer",
"role": "RESEARCH",
"since": "2026-10-09"
}
],
"contact_for_disputes": "https://www.gaipagents.com/corrections",
"version": "1",
"signature": null
}Make your file
Give your host and your agents; GAIP returns the file, checked by the same parser its weekly read uses, to save at https://<your host>/.well-known/agent-representation.json. Nothing you type is stored.
Agents can call it directly: GET /v1/free/representation/generate?host=your-host.example&agent=https://your-host.example/mcp&role=SUPPORT (repeat agent and role for each agent).
The check
GET /v1/free/representation/check?organisation=<host>&agent=<url or thumbprint>&on=<YYYY-MM-DD>, or the MCP tool gaip_check_representation on /mcp/all. Free, no key. Every answer is one of four states, with the role, the file's sha256 and the time GAIP read it, and carries GAIP's Ed25519 signature:
LISTED_AS_INDEXED: The organisation's file, as GAIP last read it on or before the date, listed this agent with the stated role, and the date fell within its since and until.NOT_LISTED_AS_INDEXED: GAIP holds the organisation's file for the date, and it did not include this agent.WITHDRAWN_AS_INDEXED: The organisation's file had listed this agent, and on the date its until had passed or GAIP had read a version of the file without it (the date is stated).NO_DECLARATION: GAIP had read no declaration at this organisation's path on or before the date. No declaration is not a bad sign: most organisations have not published one yet.
GAIP records what the organisation's own file at the stated path contained when GAIP read it; the organisation may not have published one, or may have changed it since. Not a statement that any agent is or is not genuine.
What GAIP keeps
GAIP reads every file published at /.well-known/agent-representation.json on the hosts it watches (weekly) and on a host an agent names in a check, and indexes it: the host, each agent's endpoint or key thumbprint, its role, since and until, the dates GAIP first and last saw it, the file's sha256, version and read time. A name field is never indexed. A host's owner can ask for its rows to be removed through https://www.gaipagents.com/corrections.