Fixing Checkouts That Stop AI Agents Part Way
An AI shopping agent can often find the right product and put it in the basket, then fail somewhere between the basket and the order confirmation.
The usual culprits are a checkout that insists on creating an account, a basket that empties itself while the customer is being asked to approve the purchase, a CAPTCHA at every stage, or an address or delivery widget that only responds to a human hand. This guide walks the checkout from basket to confirmation, shows where agents get stuck and why, and explains how to make the hand-over to the customer at payment work smoothly.
Where agents drop out of a checkout
A checkout is a sequence of small tasks, and an agent has to succeed at every one of them. It helps to picture the flow as a chain and ask where each link can snap.
| Stage | What goes wrong for agents | What the customer sees |
|---|---|---|
| Add to basket | Size or colour chosen in a custom swatch the agent cannot operate; button stays disabled | "I couldn't add the item to the basket" |
| Basket | Pop-up offering a discount or upsell covers the checkout button | The agent clicks the wrong thing or stalls |
| Account step | Checkout requires sign-in or registration before continuing | The agent stops and asks the person to create an account |
| Contact and address | Unlabelled fields, postcode lookup that only fills on a mouse click, country list built from divs | Wrong address, or no way forward |
| Delivery | Date or slot picker drawn on a canvas or made of unlabelled tiles | The agent cannot pick a slot |
| Anti-fraud | A CAPTCHA before each stage | Repeated interruptions, then abandonment |
| Payment | Session expires while the person approves; basket lost | Starting again from scratch |
Most of these also trouble people using a keyboard, a screen reader or a small phone screen. Fixing them for agents tends to lift ordinary conversion at the same time, which makes the work easier to justify.
The payment hand-off is a feature, not a failure
General-purpose browsing agents are designed to stop at sensitive moments. When they reach a password field, a card number field, a bank's 3-D Secure screen or the final "pay" button, they typically pause and ask the person to take over or to confirm. You should not try to remove that pause. What you can do is make sure nothing breaks during it.
Think about what happens in real time. The agent fills in the delivery details and reaches payment. It messages the customer, who might be in a meeting, on a train or asleep. Ten or twenty minutes later they come back, open the session and enter their card. If your checkout has already timed out, emptied the basket or released a reserved delivery slot, the whole task is lost and the customer has to start over, probably on another site.
In the UK, most card payments online also go through strong customer authentication, usually a 3-D Secure step in the card issuer's app. That step is for the person, not the agent, and it adds more waiting time. Build the checkout on the assumption that a pause of many minutes at payment is normal.
Agent payment protocols: what exists and what to do about it
Alongside browser-driving agents, there are newer efforts to let agents buy without clicking through a checkout at all. The best known are the Agentic Commerce Protocol, published by OpenAI and Stripe, and Google's Agent Payments Protocol (AP2). Both aim to let an agent hand a merchant an order and an approved payment in a structured way, with the customer's authorisation built in.
For most small and medium shops the practical advice is simple:
- Ask your platform and payment provider first. Support for these protocols mostly reaches merchants through their ecommerce platform or payment provider rather than through custom code.
- Do not skip the basics. Many agents will keep using your normal checkout for a long time, so the fixes on this page still matter.
- Keep product data accurate. Structured feeds and on-page data that disagree with the checkout price are a common cause of agents stopping to query the total.
These protocols are young and changing. Treat any claim that one of them is required, or that it guarantees sales through a particular assistant, with caution.
Checkout fields agents can fill correctly
The HTML autocomplete attribute tells browsers, password managers and agents exactly
what each field wants. It is the single most useful thing you can add to a checkout form, and it costs
nothing.
<form action="/checkout/address" method="post">
<label for="email">Email for your receipt</label>
<input id="email" name="email" type="email" autocomplete="email" required>
<label for="ship-name">Full name</label>
<input id="ship-name" name="ship_name" autocomplete="shipping name" required>
<label for="ship-line1">Address line 1</label>
<input id="ship-line1" name="ship_line1" autocomplete="shipping address-line1" required>
<label for="ship-line2">Address line 2 (optional)</label>
<input id="ship-line2" name="ship_line2" autocomplete="shipping address-line2">
<label for="ship-town">Town or city</label>
<input id="ship-town" name="ship_town" autocomplete="shipping address-level2" required>
<label for="ship-postcode">Postcode</label>
<input id="ship-postcode" name="ship_postcode" autocomplete="shipping postal-code" required>
<label for="tel">Phone, for delivery updates</label>
<input id="tel" name="tel" type="tel" autocomplete="tel">
<button type="submit">Continue to delivery options</button>
</form>
Notice the details. Every field has a visible label tied to it with for and id.
The shipping and billing prefixes tell the agent which address a field belongs
to, which matters when both appear on one page. The button says what happens next instead of "Next" or
an arrow icon. Optional fields say so in the label.
Common mistakes on checkout fields
- Placeholder text used as the only label. It disappears as soon as typing starts and is often not exposed as the field's name.
- One field split into several boxes, such as a phone number in three parts, with focus jumping between them by script.
- Input masks that fight typed values, for example a postcode box that rejects lower case or strips the space.
autocomplete="off"on address fields, added years ago to stop browser suggestions, which also removes the clearest signal agents have.
The fix, step by step
Step 1
Walk the checkout as an agent would
Use a staging copy or your payment provider's test mode and run the AI Agent Compatibility audit on the product, basket and first checkout page. Then complete a full test order using only the keyboard, with the Tab, Enter, Space and arrow keys. Write down each point where focus disappears, a control cannot be reached, a pop-up blocks the way or a choice needs a mouse. Finally give an agent you have access to a task such as buying a named test product, and note where it stops.
Step 2
Offer guest checkout from the basket
Make guest checkout the default path, with a clearly labelled button such as Check out as a guest next to the sign-in option rather than hidden under it. Ask for an email address for the receipt and offer account creation after the order is placed, when a password can be set from the confirmation page or email. On Shopify this is a checkout setting for customer accounts; on WooCommerce it is the option allowing customers to place orders without an account.
Step 3
Keep the basket alive through the hand-over
Check how long your basket and checkout session last, and make sure both survive a long pause at the payment step. Store the basket against a long-lived cookie or a server-side record rather than a short session, and let an expired checkout rebuild itself from the saved basket instead of starting from an empty page. If you reserve delivery slots or stock, hold them for a reasonable time and show the customer when the hold ends, rather than silently releasing them.
Step 4
Label every checkout field with autocomplete
Give every input a visible label joined to it with for and id,
a meaningful name, the right input type such as email or tel,
and an autocomplete token like shipping postal-code or billing address-line1.
Remove any autocomplete="off" from address and contact fields. Rename buttons so they describe
the result, such as Continue to payment, and make sure error messages name the field
and say how to fix it.
Step 5
Make address and delivery choices usable
If you use a postcode lookup, make its results a real list of options that can be chosen
with the keyboard, and always provide an Enter address manually link that reveals ordinary
labelled fields. Use a native select for country and a set of labelled radio buttons for
delivery methods, each showing its price and expected date as text. For delivery slot calendars, give
every slot a button with an accessible name that states the day, date and time window.
Step 6
Challenge risky orders, not every step
Remove CAPTCHAs from the basket, address and delivery stages and rely on your payment provider's fraud screening, which already scores each transaction. Where you still need a check, use an invisible or risk-based one such as Cloudflare Turnstile or reCAPTCHA v3 and only show a visible puzzle when the score is poor. Keep velocity limits on repeated failed payments and on unusually fast submissions from one address, so real abuse is still caught without troubling ordinary buyers.
Step 7
Show a clear review page before payment
Before the final button, show a plain summary as text: each item with its options and quantity, the delivery address, the delivery method and date, every charge including delivery and any surcharge, and the total in pounds. This is what the customer reads when the agent hands over, so it needs to be complete and readable at a glance. Label the final button clearly, for example Place order and pay, and avoid adding new charges after this page.
Platform notes
Shopify
Shopify's own checkout is generally well structured, so agent problems usually come from what surrounds it: apps that inject pop-ups on the basket page, upsell drawers that open over the checkout button, age verification apps and custom product option apps that replace standard selects. Test with those apps temporarily disabled on a development theme to see which one is responsible. Check the customer accounts setting so guests can check out.
WooCommerce
WooCommerce includes guest checkout, but themes and plugins often add a forced registration step, a multi-step checkout plugin with its own markup, or a CAPTCHA plugin set to protect every form on the site. Review the WooCommerce account and privacy settings, then check each checkout-related plugin's options for CAPTCHA placement. The block-based checkout and the older shortcode checkout render differently, so test the one you actually use.
Custom and headless shops
Custom checkouts are where the biggest problems appear: steps that change without the address changing,
buttons made from div elements, session tokens with short lifetimes and client-side validation
that only responds to real keyboard events. Treat each checkout step as a real form that submits to the
server, even if script enhances it. That way the flow still works if a script loads late or an agent
triggers the form in an unexpected way.
Keeping the checkout agent-friendly
- Run a test order after every app, plugin or theme change, using the keyboard only, and rerun the audit on the basket page.
- Monitor abandonment by step. A sudden rise at one step after a release usually means something new is getting in the way, for people and agents alike.
- Keep the price consistent. The price on the product page, in your structured data, in the basket and on the review page should always match. Agents are cautious when numbers change between steps.
- Write down session lifetimes. Note how long baskets, checkout sessions and slot holds last, so a developer does not shorten one for performance reasons without realising the impact.
- Review fraud settings quarterly with your payment provider, and remove extra checks that duplicate what the provider already does.
1. Can an AI agent pay for an order on my site?
Most general browsing agents are built to stop before payment and ask the person to enter card details or approve the purchase, often through a 3-D Secure step in their banking app. Some newer systems, such as the Agentic Commerce Protocol and Google's Agent Payments Protocol, let an agent pass an approved payment to the merchant in a structured way. These mostly reach shops through their platform or payment provider, so ask yours what is supported.
2. Why does the agent keep asking the customer to create an account?
Because your checkout requires it. When an agent meets a registration step it cannot complete on the person's behalf, it stops and hands the task back. Offer guest checkout as an equal option beside sign-in, ask only for an email address for the receipt, and invite the customer to save their details as an account after the order is complete. This usually helps human buyers as well, since forced registration is a common reason people leave.
3. How long should my basket last?
Long enough to survive a realistic pause while the customer is asked to approve payment, which can easily be twenty minutes or more. Many shops keep the basket for days using a persistent cookie or a server-side record, and only keep the payment session itself short. If a checkout session does expire, rebuild it from the saved basket rather than sending the customer to an empty page, so no one has to choose everything again.
4. Should I remove the CAPTCHA from my checkout?
Remove visible CAPTCHAs from the steps before payment and rely on your payment provider's fraud checks, which already assess each transaction. If you still want a check, use an invisible or score-based service and only show a puzzle when the risk score is poor. Keep limits on repeated failed payments, since card testing attacks are real. The aim is to stop abuse without interrupting every genuine customer at every step.
5. Do agents have trouble with payment iframes?
The card fields inside a payment provider's iframe are normally where the agent hands over to the person, so the iframe itself is not the problem. Trouble starts when the iframe loads slowly, sits inside a pop-up that closes unexpectedly, or when the surrounding page times out while the customer is entering details. Keep the iframe on the main checkout page where possible, and make sure the page around it stays valid during a long pause.
6. Does a postcode lookup stop agents?
It can. Many lookup widgets show results as a styled list that only responds to a mouse click, and some hide the ordinary address fields until a result is picked. Make the results a keyboard-usable list, and always include an Enter address manually link that reveals normal labelled fields with autocomplete attributes. That gives agents, browser autofill and people with unusual addresses a reliable way through, while keeping the lookup for everyone who prefers it.
7. Will these changes affect my conversion rate for people?
Most of them remove friction that people also feel: forced accounts, lost baskets, unclear buttons and repeated puzzles are long-standing reasons for abandoned checkouts. We cannot promise a particular improvement, because every shop is different, but you can measure it. Compare step-by-step abandonment in your analytics before and after each change, and roll changes out one at a time so you know which one made the difference. Watch refunds and failed payments too, so a gain at one step is not hiding a new problem later in the order.
The AI Agent Compatibility audit tests your page for bot blocks, content hidden behind JavaScript, unlabelled forms and controls, navigation agents cannot follow and missing structured data, and links each finding to the guide that fixes it.
Open AI Agent Compatibility Fixes โ