Post-Purchase eligibility & payment-method limits
Why a Post-Purchase offer is sometimes skipped or can't be accepted, and exactly which payment methods and order shapes are supported.
Post-Purchase offers play by stricter rules than any other campaign type. Sometimes the offer page never appears, and sometimes it appears but the customer sees an error the moment they click Pay now. This page explains why those rules exist, which payment methods and order shapes are supported, every error a customer can see, and how to test that your offer works.
If you only want a checklist for "my Post-Purchase offer didn't show," start with Campaign not showing on the storefront. For the engine that ranks and validates offers, see Post-Purchase advanced - priority, downsell & timer. This page focuses specifically on payment and eligibility constraints.
Why Post-Purchase has special rules
A Post-Purchase offer is not a new checkout. The customer has already paid, the order already exists, and the order confirmation is one click away. When the customer accepts your offer, Llama Upsells does not ask for payment again. Instead, it edits the order that was just placed and charges the additional amount against the same payment method the customer already used at checkout.
That single-click magic is exactly what makes Post-Purchase powerful, but it is also the source of every limitation on this page. Shopify will only let an app add a charge to a completed order when the original payment can be safely re-used. If the payment method can't accept an extra charge after checkout, or the order isn't in a state that allows editing, Shopify refuses — and the offer either never shows or can't be accepted.
Rule of thumb: if the order was paid with X, the Post-Purchase page may be skipped, or the offer can't be accepted. The deciding factor is almost always how the order was paid, not what's in it.
Mechanically, acceptance works through Shopify's changeset flow. The app builds a list of changes (add the offer variant, apply the discount, tag the order), gets that changeset signed, and then applies it to the order. Shopify validates the changeset at apply time. Any payment, inventory, or state problem comes back as a specific error code, which the app translates into a short message for the customer.
Supported vs unsupported payment methods
One-click Post-Purchase only works when the captured payment method supports adding a charge after checkout. Cards processed through a gateway that can charge again (the typical online card / Shop Pay / accelerated-checkout path) are the supported case. Methods that can't be charged again after the order completes are not eligible — and they cause one of two outcomes:
- The Post-Purchase page is suppressed entirely (the customer goes straight to the thank-you page), or
- The page shows, but accepting the offer fails with "Payment method is not supported."
| Payment / order type | Post-Purchase result | Why |
|---|---|---|
| Online card payment that supports a post-checkout charge | Supported | The same captured method can be charged for the added amount in one click. |
| Cash on Delivery (COD) | Not supported | A manual/offline method; nothing was captured online to charge again. |
| Bank deposit / bank transfer | Not supported | Manual/offline method; no online capture to re-charge. |
| Other manual / offline payment methods | Not supported | The merchant collects payment outside Shopify, so no automatic charge is possible. |
| Certain wallet, deferred, or local payment methods | May be unsupported | Some of these don't allow an additional charge after checkout. |
| Gift-card-only orders | Not supported | There's no chargeable payment method behind the order to bill the extra amount. |
| Partially paid / payment-not-complete orders | Not supported | The order isn't fully settled, so it can't accept a new charge yet. |
Manual payment methods are the most common reason an offer "doesn't work." Cash on Delivery, bank deposit, and any other manual payment method you've set up in Shopify cannot be charged automatically after checkout. Orders paid this way will usually skip the Post-Purchase page, and if the page does render, accepting fails with "Payment method is not supported." This is a Shopify platform limitation, not an app setting — there is no toggle that makes manual methods eligible.
What to tell yourself when troubleshooting
If a customer reports they never saw the offer, or saw it and got an error, your first question should be: how did they pay? Open the order in Shopify and check the payment method. If it's COD, a bank deposit, another manual method, a gift-card-only order, or the order is only partially paid, you've found your answer — and there's nothing to "fix" in the campaign. The offer was correctly withheld because it could never have been charged.
Other eligibility requirements
Payment method is necessary but not sufficient. Even on a perfectly chargeable order, the Post-Purchase page only shows when all of the following are also true. These are evaluated server-side before the page is allowed to render.
| Requirement | What it means |
|---|---|
| At least one valid offer variant exists | After excluding anything already in the order, at least one offer variant must remain. |
| The offer variant is available for sale | Variants that aren't available for sale are filtered out and can't be offered. |
| The variant isn't already in the order | Offer variants the customer just bought are removed, so you never re-offer what they already have. |
| A matching active campaign exists | The Post-Purchase campaign linked to the offer must be active. Inactive campaigns are skipped. |
| The order matches the campaign's conditions | The order's products, collections, tags, vendor, price thresholds, and any other targeting rules must match. |
| Only one Post-Purchase page per order | Shopify shows the Post-Purchase page once per order. If more than one of your campaigns could match, only the highest-priority one wins, and there's no second page. |
If every offer variant is filtered out — for example because the only offer product was already in the cart, or it's out of stock and not available for sale — there's nothing left to show, and the page is skipped. The same is true if no active campaign matches the order's contents.
There is only ever one Post-Purchase page. If you run several Post-Purchase campaigns, they don't stack — the customer sees a single page driven by the first matching campaign in priority order. A campaign being correct and active is not enough; a higher-priority campaign may have claimed the slot. See Post-Purchase advanced - priority, downsell & timer for how the winner is chosen.
The exact errors customers can see at accept time
When a customer clicks to accept the offer, the change is validated by Shopify at apply time. If validation fails, the app shows a short message mapped from Shopify's error code. The table below maps every code to its plain-English meaning and the action you should take.
| Error code | Message the customer sees | What it means | What you should do |
|---|---|---|---|
insufficient_inventory | Insufficient inventory | The offer variant ran out of stock between the page loading and the customer accepting. | Check the variant's inventory in Shopify. Keep enough stock for the variants you promote, or promote in-stock products only. |
unsupported_payment_method | Payment method is not supported | The order's payment method can't be charged after checkout (e.g. COD, bank deposit, gift-card-only). | Expected for manual/offline and gift-card-only orders. No fix — see the payment-method table above. |
payment_required | Payment is not complete | The original order isn't fully paid yet, so a new charge can't be added. | Wait until the order is fully paid, or expect this on partially paid orders. Not a campaign problem. |
changeset_already_applied | Purchase has already been applied | The offer was already accepted and added to this order. | No action needed — the product is already on the order. This guards against double-charging. |
invalid_request | Invalid purchase | The change Shopify received wasn't valid (e.g. a stale variant or malformed request). | Re-check the offer's variants are still valid and available for sale. If it persists, contact support. |
unknown | Something went wrong | An unexpected error that doesn't match any known code. | Ask the customer to retry. If it keeps happening, capture the order details and contact support. |
changeset_already_applied and payment_required are protective, not bugs. The first prevents a customer from accepting the same offer twice; the second prevents charging an order that hasn't fully settled. Seeing either of these usually means the system is doing its job.
How to test
The only reliable way to confirm a Post-Purchase offer works end to end is to place a real test order using a supported card payment. A supported card is the path that allows a one-click charge after checkout, so it's the only way to see both the page render and the accept flow succeed.
Activate the campaign and confirm conditions
Make sure the Post-Purchase campaign is active and that its conditions match the test order you're about to place. If the conditions don't match the cart, the page won't show — for reasons unrelated to payment.
Pick an offer product that's in stock and not in the cart
Choose an offer variant that is available for sale, has inventory, and is not one of the products you'll be buying in the test order. If the only offer variant is already in the cart, it gets filtered out and there's nothing to show.
Place a test order with a supported card payment
Complete a checkout paying with a card method that supports a post-checkout charge. After payment, the Post-Purchase page should appear before the thank-you page.
Accept the offer and confirm the order edit
Click to accept the offer. If everything is eligible, the changeset applies, the product is added to the order, and you land on the thank-you page. Open the order in Shopify and confirm the added line item.
Test orders paid with a manual method won't show the page. If you "test" by placing an order with Cash on Delivery, bank deposit, or any other manual payment method, the Post-Purchase page is expected to be skipped — and that is not a sign your campaign is broken. Always test with a supported card payment, or you'll be testing the one scenario that's guaranteed not to render.
Edge cases
A few order shapes behave in ways that surprise merchants. Call these out when you design a Post-Purchase offer.
Quick recipe: a Post-Purchase offer that "just works"
To minimize the chance of a skipped page or an accept-time error, combine the supported-path choices above:
- Promote a variant that is in stock and available for sale.
- Make sure that variant is not something the customer is likely to already have in the cart.
- Keep the campaign active with conditions that genuinely match your typical orders.
- Accept that orders paid with manual methods, gift cards only, or partial payment will not be offered — and don't count those toward your conversion math.
- Test with a supported card payment in every currency you sell in.
Related pages
Why a Post-Purchase offer doesn't show
A step-by-step checklist for diagnosing a Post-Purchase page that never appears.
Post-Purchase advanced - priority, downsell & timer
How offers are ranked, validated, and timed, and how the downsell fallback fires.
Post-Purchase campaign setup
Create and configure a Post-Purchase offer from scratch.
Post-Purchase offers in depth - accept, decline & downsell
How the two-stage post-purchase offer surface works — the main offer, the downsell fallback, one-click order edits, and every error a customer can hit.
Checkout Upsells (Shopify Plus)
Show product offers directly inside the Shopify checkout page. Requires Shopify Plus, and learn how to configure it.
