Technology March 9, 2026 | 8 min read

ACPspec Over A2A: How Transaction State Survives the Agent Handoff

ACPspec Over A2A: How Transaction State Survives the Agent Handoff
<p>Agent-to-agent transport moves messages. It does not move state. That gap is where automotive transactions break.</p>

<p>We published the ACPspec A2A binding to close it. It is live at <a href="https://acpspec.org/a2a">acpspec.org/a2a</a>. The binding defines how a lifecycle-aware transaction envelope travels over agent-to-agent transport. The envelope does not change. Only the delivery path changes.</p>

<h2>Why the Handoff Loses the Deal</h2>

<p>A shopping assistant reaches a dealership agent. A service agent reaches a fleet operator. The message arrives. The history does not.</p>

<p>The receiving agent gets a request and no prior state. So it re-asks questions the buyer already answered. It quotes a payment against a trade value it never saw. It opens a second lead record for a customer who already exists.</p>

<p>Most teams treat this as a field mapping problem. It is a state problem. Mapping fields between two systems does not help when one system has no idea a transaction is already in progress.</p>

<h2>A2A Carries Messages. ACPspec Carries Transaction State.</h2>

<p>These are two layers, not two competitors.</p>

<p>A2A standardizes discovery and message exchange between independent agents. It defines agent cards at a well-known path, typed message parts, and wire bindings over JSON-RPC 2.0 and HTTP plus JSON. It governs how agents reach each other. It does not care what they discuss.</p>

<p>ACPspec standardizes lifecycle-aware transaction state between business systems. It defines eight top-level objects covering the full transaction lifecycle. It defines immutable snapshots and deltas that reference a parent. It enforces JSON Schema on every producer and every receiver. It governs what the transaction looks like at any moment. It does not care how the envelope arrived.</p>

<p>Neither protocol requires the other. The binding page is informational, not normative. A2A is governed by the Linux Foundation. ACPspec is maintained by the ACP Foundation. Describing carriage is not claiming partnership.</p>

<h2>One Envelope, One DataPart</h2>

<p>The carriage rule is short. An envelope travels as a single <strong>DataPart</strong> inside an A2A message. The part declares kind <strong>data</strong>. The value is a complete, schema-valid envelope.</p>

<p>It must not be flattened. It must not be split across parts. A message carrying two envelopes is non-conformant. Send two messages instead.</p>

<p>That keeps the unit of validation and the unit of delivery the same thing. A receiver validates before it acts. An envelope that fails validation is rejected whole. Partial ingestion is non-conformant, because a half-ingested envelope leaves the receiver in a state no snapshot describes.</p>

<h2>What Happens When Two Agents Meet Mid Transaction</h2>

<p>Snapshot and delta are distinguished exactly as they are in the core specification. A delta carries <strong>parent_envelope_id</strong>. A snapshot does not. The binding adds no discriminator field and no new envelope kind.</p>

<p>An agent declares what it accepts and what it emits. An agent that only ever sends complete state declares <strong>emits: ["snapshot"]</strong> and never implements delta construction at all.</p>

<p>Then the case that matters. A delta arrives referencing a parent the receiver does not hold. The receiver returns <strong>ACP_PARENT_UNKNOWN</strong>. The sender does not retry the delta. It issues a snapshot instead.</p>

<p>That is the recovery path for two agents meeting for the first time halfway through a deal. No shared history is assumed. The protocol resolves it in one round trip.</p>

<p>An agent can also ask for current state directly. The state request is the only message the binding defines that is not an envelope, because the core specification has no request form. It returns a snapshot or an error object. It never returns a delta. A delta means nothing to a requester that has just declared it holds no parent.</p>

<h2>Declaring Support in the Agent Card</h2>

<p>An agent advertises support by listing the extension URI in <strong>capabilities.extensions[]</strong> of its A2A agent card.</p>

<p>Four values carry the weight. <strong>acp_version</strong> declares the envelope version. <strong>schema_url</strong> must resolve to the JSON Schema document for that version. <strong>accepts</strong> and <strong>emits</strong> each carry at least one value, and an agent is held to both.</p>

<p>The extension URI versions the binding. <strong>acp_version</strong> versions the envelope. The two version independently. A transport revision never forces a schema migration. That separation is deliberate. It is what keeps early adopters from being punished for moving first.</p>

<h2>Consent Survives the Hop</h2>

<p>Consent rules live in the core specification. Transport does not change them. The binding states how they hold across the hop.</p>

<p>A receiving agent enforces the most restrictive consent state it holds for that subject. An inbound envelope cannot upgrade consent. Where an inbound envelope asserts a weaker state than the receiver holds, the receiver's state prevails.</p>

<p>The conflict is recorded as an event rather than discarded. The disagreement is itself information. A system that silently drops it loses the audit trail that made the enforcement defensible in the first place.</p>

<p>An agent that cannot establish consent rejects the envelope with <strong>ACP_CONSENT_REQUIRED</strong>. It does not ingest first and resolve later. Enforcement happens at the boundary, before any payload reaches a CRM or a DMS.</p>

<h2>The Conformance Rule That Decides Everything</h2>

<p>The binding lists seven conformance requirements. Six are structural. The seventh is the one that decides.</p>

<p>An implementation must produce identical envelopes on the A2A and HTTPS bindings for the same state. Byte-identical. If an envelope differs by transport, the implementation has forked ACPspec.</p>

<p>A binding that alters the payload is not a binding. That single constraint is the whole design, and every other requirement follows from it. Publish the card. Honor your declared kinds. One envelope, one part. Validate inbound and reject invalid envelopes whole. Enforce consent at the boundary. Append to the event stream rather than replacing it.</p>

<p>Envelopes carrying personal data travel over TLS. An agent card advertising ACPspec carriage over a non-TLS endpoint is non-conformant regardless of what else it satisfies.</p>

<h2>Where This Sits in the Stack</h2>

<p>ACPspec now documents two agent-facing paths.</p>

<p>The <a href="https://acpspec.org/mcp">MCP page</a> covers the reasoning layer. A snapshot becomes structured context for a model. A tool output becomes a delta. The agent reads state and writes state through validated interfaces at every step.</p>

<p>The <a href="https://acpspec.org/a2a">A2A page</a> covers the transport layer between agents. It answers the question the MCP page does not: what happens when the receiving system belongs to someone else.</p>

<p>CORDspec governs the same discipline at the general layer, across any AI-to-AI handoff. ACPspec applies it to automotive commerce. The principle is identical in both. The envelope is the contract. The transport is a detail.</p>

<hr style="border:none;border-top:1px solid rgba(26,26,46,.08);margin:48px 0;">

<p><strong>Structure before tools. Strategy before speed. Systems before scale.</strong></p>

<blockquote>
<p><strong>The AI Operator Framework</strong> is the methodology for designing, governing, and scaling AI operations inside a business. Explore the full framework at <a href="https://jamilashkar.com/framework">JamilAshkar.com/framework</a>. Start with the free course at <a href="https://jamilashkar.com/course">JamilAshkar.com/course</a>.</p>
</blockquote>

The AI Operator Field Notes

Structured breakdowns on building, governing, and scaling AI inside real businesses. One issue per week. No fluff.

No spam. Unsubscribe anytime.

Jamil Ashkar
Jamil Ashkar
AI Operator. Creator of CORDspec.org and ACPspec.org.