Skip to content
Ai And Automation 8 min read

Agent Checkout: The Order, Payment and Fulfilment Records a Merchant Must Join

An agent can complete checkout while the merchant still owns the order, payment result and fulfilment. A practical record and failure map for operators.

PB
By Shaun Toh
TL;DR

Agent checkout is a handoff between the agent platform and the merchant's order and payment systems. A completed checkout, a paid transaction, a fulfilled order and a refund are separate records.

Operator Summary

An agent checkout needs a durable join from the customer's instruction and platform checkout ID to the merchant order ID, payment object and fulfilment or refund events. The merchant remains the authority for its accepted order and payment processing in OpenAI's commerce documentation; UCP likewise gives the business the authoritative checkout and order responses. A completed checkout does not by itself prove payment settlement or delivery. If the response or an event is lost, query the authoritative state and reconcile before retrying or fulfilling.

An agent can return a cheerful “ordered” message while the merchant is still processing checkout, the payment method is still resolving, or the parcel has not been handed over. The operational job is to preserve the link between those states. A missing link creates the familiar incidents in an unfamiliar wrapper: duplicate orders, fulfilment against unpaid orders, and refunds that support can see but the agent cannot explain.

This article follows the merchant's records after an agent initiates a purchase. The protocol comparison explains what ACP, UCP, AP2 and Visa TAP specify. The payment lifecycle explains authorization, capture and settlement. Neither replaces the merchant's order-to-payment join.

Four records that should never collapse into one

RecordQuestion it answersWhat it cannot prove alone
Customer instruction and agent checkoutWhat the user asked the agent to attempt and which checkout the platform submittedThat the merchant accepted an order or that the issuer approved payment
Merchant orderWhat the merchant accepted, its line items, total and fulfilment promiseThat payment has settled or every item has shipped
Processor payment objectWhat happened to the payment attempt, authorization, capture or refundThat the merchant delivered what was sold
Fulfilment and post-order eventsWhat shipped, was delivered, canceled, returned or adjustedThat a refund reached its final payment status

This is PaymentBrief's join map, not a required schema imposed by every protocol. In UCP's Order capability, the order has its own id and a required checkout_id; line items, fulfilment data and optional adjustments live with that order. That gives the platform a way to follow the merchant's order without pretending the platform owns it. OpenAI's commerce concepts likewise put acceptance, charging and confirmation on the merchant's systems. These are descriptions of their respective integrations, not a claim that they interoperate.

OpenAI's March 2026 product update shifted its emphasis toward discovery and merchant checkout. The existence of ACP checkout documentation therefore does not mean every merchant currently checks out inside ChatGPT.

Checkout completion can still be in progress

UCP's checkout specification defines a complete_in_progress state: the business has accepted a completion request and is still processing it. The platform must observe the business's subsequent state. If completion and cancellation race, a cancellation is effective only when the business reports canceled. Neither the agent's local message nor a lost network response settles that question.

The payment system has its own state. Stripe's PaymentIntent reference distinguishes processing, requires_capture and succeeded. In a manual-capture flow, an authorization is not a capture; even a successful payment outcome is not evidence that goods were delivered. A merchant must use the payment events appropriate to its processor and method, then join them back to its order. The payment-link reference covers the same separation for reusable links.

The lost-response table

FailureWhat the documentation establishesOperator response — PaymentBrief guidance
Complete request times outUCP gives the business authoritative checkout state; Stripe's keyed API requests have documented retry behaviourQuery the checkout and payment object before submitting another completion or creating another order. Preserve the same business reference.
Merchant has an order; payment still processesUCP order and processor payment are separate records; Stripe exposes a processing stateHold fulfilment pending the method's confirmed payment outcome, with a defined exception policy for risk-approved delivery.
Platform misses an order updateUCP sends full order snapshots by webhook and recommends Get Order for reconciliation or on-demand retrievalVerify webhook signatures, deduplicate events and reconcile missed updates from the merchant order. Do not treat delivery as exactly once.
Customer cancels during completionUCP says cancellation can race completion and only a business-reported canceled is effectiveRead the final checkout state. If an order already exists, follow the merchant's post-order cancellation and payment process.
Partial refund after shipmentUCP can record a refund adjustment separately from fulfilment; Stripe exposes a separate Refund objectJoin the refund to its original payment and affected line items, then reconcile the actual refund status.

Stripe's idempotency rule is useful but narrow: a keyed POST returns the first result on a matching retry, including an error result, and keys may be removed after at least 24 hours. It does not make the merchant order, agent platform and PSP one atomic database. The operator still needs an order-level duplicate guard and a reconciliation path for uncertain outcomes. UCP and ACP have their own request contracts; use the version actually integrated.

Cancellation is not a refund instruction

The word “cancel” hides two different jobs. Before a checkout completes, a platform may try to cancel that checkout under the relevant protocol. After the merchant has accepted an order, changing or canceling it is a post-order operation. UCP's order model treats adjustments, including refunds and cancellations, separately from fulfilment events. A processor refund is another action again: Stripe's Refunds API creates a refund object against the original payment or charge. A checkout cancellation cannot be used as evidence that money was returned.

The refund operations runbook owns refund controls, dispute overlap and reconciliation across payment methods. The agent-specific addition is the platform handoff: the buyer's agent must not display “refunded” based solely on the merchant accepting a cancellation request.

The launch test

Run one test purchase, one uncertain-response retry and one post-order refund in the actual integration. From records alone, identify the customer's instruction, platform checkout ID, merchant order ID, processor payment ID, final payment event, each fulfilment event and the refund's final outcome. Confirm who sends each status to the buyer and how a missed event is recovered. That is the smallest useful evidence chain between an agent's promise and the merchant's ledger.

For authority and revocation controls before the purchase, use the agent payment-controls guide. For what each agentic protocol contributes, use the ACP/UCP/AP2/TAP comparison.

Sources & methodology (7)

OpenAI says ChatGPT calls a merchant's checkout endpoints, while the merchant validates the request, decides whether to accept or decline the order, charges the payment method through its existing processor and confirms the order; checkout and payment state remain on merchant systems

Checked:

UCP's checkout capability makes the business authoritative for checkout state; a completion can enter complete_in_progress; platforms query Get Checkout for the outcome and treat a cancellation as effective only once the business reports canceled

Checked:

UCP orders contain a merchant-provided order ID and associated checkout ID, line items, fulfilment, and optional post-order adjustments; the business sends full order snapshots by webhook, with Get Order used for reconciliation or on-demand retrieval

Checked:

Stripe idempotency keys let a client repeat a POST request under the same key, with the first result returned on a matching retry; keys can be pruned after at least 24 hours

Checked:

Source types explained in our Methodology.

Shaun Toh By Shaun Toh · Director, Digital Payments · Razer

More Ai And Automation briefings