AdCP to AAMP terminology map

The AdCP to AAMP terminology map pairs the vocabularies of the two agentic advertising standards term by term, showing which words translate between them. Of the eight words both stacks use, only Product and Account mean the same thing in each.

The AdCP to AAMP terminology map is a term-by-term correspondence between the two agentic advertising vocabularies. Eight words appear in both. Two mean the same thing, four mean something different in each stack, and two exist as objects on only one side. Each row cites the schema file it comes from.

AdCP terms come from the stable 3.1.13 release; the AAMP terms come mostly from iab-agentic-primitives v0.5.0, the wire contract both agent repositories pin and which its own front page states is not released. Neither corpus mentions the other, so no equivalence here has been agreed by either body. The nearest thing to an official comparison is a six-row table in AdCP’s FAQ headed “As of April 2026”, which calls AdCP “3.0 GA” while the schema registry publishes 3.1.13 and describes AAMP’s public schemas as “being defined” against 48 published JSON Schemas. No AAMP document describes AdCP.

Four shared words that mean different things

TermIn AdCP 3.1.13In AAMPWhat breaks if they are mapped
Package“A specific product within a media buy (line item)”“Curated inventory package for media kit discovery”AdCP’s Package sits inside a buy that already exists. AAMP’s is a bundle advertised before anyone has bought anything.
ProposalThe publisher’s strategic recommendation; a committed one executes via create_media_buyThe buyer’s offer under negotiation, proposal_id seller-issuedThe publisher writes one and the buyer writes the other, so the write path inverts.
Agent“The authenticated entity making API calls”, identified by the auth tokenAn A2A card plus a registry identity recordAdCP’s Agent is whoever holds the token. AAMP’s is a document published in advance.
Rate cardrate_card on core/account.json, an opaque identifier with no schema behind itRateCard.json, a full object, “private to the pair … NEVER public”Only AAMP defines what is inside one, and then forbids publishing it.

get_products returns “products with pricing specific to this account’s rate card”, so AdCP has rate cards without ever saying what is in one.

Objects that map by function rather than by name

AdCPAAMPReading
Media buy, core/media-buy.jsonOrder, Order.jsonThe campaign container. AAMP merges the buyer’s OpenDirect Order into the seller’s ExecutionOrder and the seller’s record is authoritative, so after a change request the buyer’s copy is a cache.
Package, core/package.jsonLine, Line.jsonLine.json states that “Line is the only execution unit on the wire”.
ProductProduct, Product.json“Represents available advertising inventory” against “Sellable unit of publisher inventory”.
Account, core/account.jsonAccount, Account.jsonAdCP’s “determines rate cards, payment terms, and billing entity”; AAMP’s does the same job.
Natural-language brief on get_productsMedia kit, MediaKit.jsonA prose brief against a catalogue with tier-gated views: public ranges, exact pricing once the caller authenticates.
Creative manifest, 13 canonical format kindsCreative, Creative.json, plus AssignmentAAMP’s is “Metadata only — never executable markup”. Twelve of AdCP’s 13 kinds have a schema under formats/canonical/; custom does not.

They line up this well because AAMP’s direct-buying model came from OpenDirect: agentic-direct ships opendirect.json at version 2.1.0, and Order.json describes the AAMP order as a container that “merges the buyer’s OpenDirect Order with the seller’s ExecutionOrder”. Media buy to Order and Package to Line hold up once the seller’s record is accepted as authoritative, which Order.json states explicitly. The brief-to-media-kit row is the exception: a prose brief and a tier-gated catalogue answer different questions.

Agent and seller roles do not line up

AdCPAAMPNotes
Sales agentSeller agentAdCP’s is “An MCP server that exposes publisher inventory for discovery and purchase”. The phrase “sales agent” is absent from AAMP.
Seller (the role)Seller agentAdCP keeps the commercial role and the software apart. AAMP does not.
OrchestratorBuyer agentprotocol/required-tasks.mdx: “Orchestrators are not MCP/A2A servers — they call sales agent tasks.”

Two of those rows are renamings and survive an integration untouched: sales agent to seller agent, orchestrator to buyer agent. The third is not. AdCP’s seller is the commercial party and its sales agent is the MCP server answering on that party’s behalf. AAMP mints one agent_id per agent, hangs trust status off it, and the endpoint becomes the identity, so one seller agent fronting two publishers books both publishers’ inventory under a single identity. AAMP publishes no field binding an agent_id to a commercial party.

The registry that mints every AAMP agent_id has one published implementation, an eight-file example repository, and no conformance suite runs anywhere in the corpus. AdCP publishes a numbered stable release and a compliance runner that reports a pass or a fail.

Terms with no counterpart

Eleven concepts exist in AdCP with nothing to map onto in AAMP:

Ten exist in AAMP with nothing to map onto in AdCP:

  • Registry-registered agent, agent_id minted at registration
  • Media kit, MediaKit.json, tier-gated catalogue
  • Quote, Quote.json, non-binding, carries expires_at
  • Negotiation: accept, counter, final_offer, reject, with a round counter
  • Deal, Deal.json, deal_id seller-issued
  • Access tier and trust status
  • ChangeRequest.json, post-booking change with its own lifecycle
  • Mutation and the nine-value Intent enum
  • Embedding and embedding_space_id, in agentic-audiences
  • ConsentContext.json, carrying all three interoperable consent-string carriers

AdCP’s buy is a purchase against published terms, and nothing moves between the published price and the signature. AAMP’s is a bilateral negotiation that ends holding a deal object which did not exist when the conversation started. In the other direction, AdCP’s governance and signals vocabulary has no AAMP counterpart of any kind: CreativeApproval and DecisionRecord exist inside the seller reference implementation, on no wire, and AAMP’s audience work is a vector-scoring prototype whose specs/v1.0/schema/agent_interface.schema.json is zero bytes.

What breaks if the two vocabularies are swapped

Three points do not survive a translation layer. AdCP can name the commercial party behind a call and AAMP names the endpoint, so one agent representing two sellers collapses them. A get_products brief and a tier-gated media kit are different transactions rather than two spellings of one. Quote, negotiation round and deal are AAMP objects with no AdCP equivalent, so a build on AdCP’s vocabulary has nowhere to record a price that moves before signature.

The stack-level argument is at Agentic Ad Lab. The AAMP pins behind this map are listed in AAMP Explorer, the AdCP schema surface in AdCP Explorer. Related terms: package, product, quote, deal, agent, OpenDirect 2.1.