Agent Registry

An agent registry is a directory of advertising agents, their endpoints, capabilities and trust signals. Two run: AgenticAdvertising.org's catalog for AdCP, which confers no authority, and IAB Tech Lab's for AAMP, where trust status caps price.

An agent registry is a directory of advertising agents: who they are, where their endpoints live, what they claim to do, and whether anyone has vouched for them. Two are running: the catalog of AgenticAdvertising.org (AAO), the paid-membership trade association that stewards AdCP, and the Agent Registry of IAB Tech Lab, the standards body behind AAMP. They take opposite positions on whether a registry may grant trust. In AAMP, trust status caps the price tier an agent can be quoted; the AAO catalog carries no trust signal at all.

AAO catalog (AdCP)Agent Registry (AAMP)
Read the listanonymous GET, 200, full public catalog401 Authentication required, JWT needed
Get listedan AAO member enrols you; no self-registrationfree and open, members and non-members
Public API specopenapi/registry.yaml, 456 KB, no auth“documented in the Portal”, behind a login
Entries23 visible to an anonymous caller, every one MCP40 shown in the portal UI, per the hub guide

Neither registry is a precondition for transacting. No AdCP operation touches the directory, and in AAMP an unregistered counterparty resolves to unknown and trades at the public tier.

How an agent gets listed

AAO enrolment buys discovery. It confers no authority: a publisher’s own adagents.json stays the trust root whether or not an agent appears in the catalog.

The catalog “contains only AAO-attested, member-enrolled agents”, and an AAO member “must explicitly enroll the agent on their member profile”. The same documentation states: “You cannot self-register today.” Entries default to visibility: "members_only", and reaching public requires a primary_brand_domain and a paid membership tier.

A public request from an account below that tier is stored as members_only with a visibility_downgraded warning, and reported to the caller as success.

The catalog itself is readable without credentials, and every visible entry declares protocol: "mcp". AdCP defines its tasks over both MCP and A2A, and the catalog carries a field to tell them apart. Anonymous callers see only the public records, so the visible list is a floor rather than a total.

A listing does not guarantee a reachable endpoint. Around half of the publicly listed agents complete an anonymous MCP handshake, and three listed sales agents return a product catalogue to an unauthenticated get_products. The agent-by-agent result is in the AdCP registry, measured.

IAB Tech Lab’s launch announcement says its Tools Portal “is open to both members and non-members and is free to register and use”, validating each company against its GPP ID and TCF Global Vendor List ID. Reading it is a different matter: GET https://registry.iabtechlab.ai/api/agents answers {"error":"Authentication required"}. Three base URLs for that registry circulate in the AAMP repositories, and registry.iabtechlab.ai is the one that answers; the agent discovery files guide untangles them and is also the source of the 40-agent portal figure. The registry’s routes, auth envelope and record shape are documented in iab-agentic-primitives rather than by IAB Tech Lab directly.

Whether a registry confers trust

AdCP’s registry documentation refuses the job:

This endpoint is discovery, not authorization. The publisher’s own adagents.json remains the trust root.

Publisher-attested signing_keys live in adagents.json on the publisher’s own domain, and a verifier “MUST reject any signature whose keyid is not in that pinned set, regardless of jwks_uri contents”. The registry never holds key material, and none of AdCP’s operations is a registry operation: the directory sits outside the protocol surface entirely.

AAMP takes the other position and prices it. Registry presence sets trust status, and trust status caps the access tier an agent can claim.

Trust statusCeiling in seller-agentWhat that tier is shownCeiling in iab-agentic-primitivesWhat that tier is shown
unknownpublicprice ranges only, no discountpublicprice ranges only, no discount
registeredseatexact prices, no discountseatexact prices, no discount
approvedadvertiserfull discounts plus volumeagencytier discounts
preferredadvertiserfull discounts plus volumeadvertiserfull discounts plus volume
blockednone, hard rejectnothingpublicprice ranges only

Of the five statuses only registered is automatic; the rest are operator decisions. On the sample rate card in the buyer agent’s media-kit documentation, under a column headed “Typical Discount”, the ladder is worth roughly 5 percent at seat, 10 at agency and 15 at advertiser off the same base CPM.

The library both IAB reference agents pin calls the ladder legacy. iab-agentic-primitives annotates TRUST_TIER_CEILING “(Legacy AAMP trust-tier model; retained for the EP-7.1 harness)”, and its sandbox registry note records that the real registry “does not implement” that model and has “no self-asserted access-tier / trust-tier enum”. The two maps disagree in two rows. On approved it is advertiser tier against agency tier, 15 percent off a live deal against 10. On blocked it is a hard reject against a public ceiling: one map refuses the agent, the other prices it at rate card.

In the shipped seller agent the ladder is not wired up. The registry client is a stub: agent search returns [] unconditionally, lookups hand back mock data stamped "[STUB] Pending AAMP API integration", and the real-API client in the same file is switched off because aamp_registry_url defaults to "". The seller agent’s documentation states this under “Current Limitations”: the integration “is stubbed pending the public API specification. Currently, agent trust is managed locally by the operator.”

Out of the box every counterparty resolves to UNKNOWN, and UNKNOWN buys at the public tier. A counterparty is added through POST /registry/agents/discover. Because trust is held locally, each deployment ends up with its own list.

Revocation and change feeds

AdCP’s registry ships a cursor-based change feed at GET /api/registry/feed, with an SSE variant, 90-day retention and 410 Gone when a cursor expires. Event types include agent.removed, agent.verification_lost and authorization.revoked. AAMP has nothing in that shape: the seller agent files “Automatic trust refresh (periodic re-verification against registries)” under planned improvements. Trust status has no expiry and no re-verification step.

The two registries store different things. The AAO catalog takes an agent url, is idempotent on create, and carries no trust signal; a submitted agent type is overwritten with the crawler’s latest snapshot. The IAB record takes agent_name and primary_domain and carries three trust signals, verification_status, domain_verified and iab_member, of which only domain_verified says anything about the agent’s own infrastructure. An IAB registered records a validated GPP ID and TCF Global Vendor List ID, not a check of the agent’s endpoint. An AAO listing records member enrolment.