NewAgentCart ACP v2 shipped — delegated payments, order webhooks, Paddle billing.See products
← All posts
ACP

ACP explained: how an agent actually checks out

The Agentic Commerce Protocol is a small spec with big consequences. A walkthrough of the checkout lifecycle, delegated payments, and the idempotency trap.

GM
Golam Mostafa· Jul 2026 · 9 min read

When OpenAI and Stripe published the Agentic Commerce Protocol, most of the commentary focused on ChatGPT checkout. That misses the point. ACP is a wire format for any agent to buy from any merchant — and the spec is small enough to implement in a weekend.

The protocol has three moving parts: a product feed the agent can read, a checkout API the agent can drive, and delegated payment so the buyer's card never touches the merchant's servers unencrypted.

Why this matters

Every checkout an agent completes on your behalf still has to satisfy the same fraud, tax, and refund rules a human checkout does. ACP does not remove that complexity — it standardizes where it lives.

The checkout lifecycle

An agentic checkout is a state machine. The agent creates a checkout session, updates it as the buyer decides (address, shipping option, quantity), and completes it with a payment token. Every state transition is a plain HTTPS call:

HTTP
POST /checkout_sessions          → create
POST /checkout_sessions/:id      → update items, address
POST /checkout_sessions/:id/complete
     { payment_token }           → order created
The three-call checkout lifecycle: create, update, complete.

The subtle part is idempotency. Agents retry. If your complete endpoint isn't idempotent, a flaky connection means a double charge — and an agent will not apologize to your customer for you.

TypeScript
async function completeCheckout(sessionId, paymentToken, idemKey) {
  const existing = await db.completions.findByIdemKey(idemKey);
  if (existing) return existing.order; // safe retry

  const order = await charge(sessionId, paymentToken);
  await db.completions.record(idemKey, order);
  return order;
}

Where UCP fits

Google's Universal Commerce Protocol attacks the same problem from the discovery side: it standardizes how a storefront describes itself to agent surfaces. In practice you'll implement both — UCP to be found, ACP to be bought from. They share more DNA than either camp admits.

UCP answers: does this store exist, what does it sell, is it in stock
ACP answers: can an agent actually complete a purchase here
Shared product IDs are what lets the two protocols talk about the same item

An agent that can find you but not buy from you is a worse experience than not being found at all.

If you'd rather not build the plumbing yourself, that's what the products are: the protocol plumbing, delegated payments, webhooks, and test suites — ready to point at your stack.

GM

Golam Mostafa builds ACP, UCP, and MCP infrastructure at saify.dev. Get every deep-dive and every product with All-Access.