Are Headless-attributed orders eligible for post-purchase checkout extensions?

Hi Shopify team and community,

We’re looking for clarification about post-purchase eligibility for a Headless storefront.

Our setup:

  • Custom Next.js storefront
  • Carts created with the Storefront API through Shopify’s Headless channel
  • Customers complete Shopify-hosted checkout using the cart’s checkoutUrl
  • Completed orders are attributed to the Headless channel
  • Custom extension using Checkout::PostPurchase::ShouldRender and Checkout::PostPurchase::Render

Shopify’s documentation says post-purchase offers require orders placed through the Online Store sales channel:

Could someone from Shopify please confirm:

  1. Are Headless-attributed orders eligible for Checkout::PostPurchase::Render because they still use Shopify-hosted checkout?

  2. Can ShouldRender return { render: true } while Shopify later suppresses Render because the order is Headless-attributed?

  3. If Headless orders are ineligible, does rebuilding the cart through a permalink with storefront=true reliably create an Online Store-attributed and post-purchase-eligible order?

  4. Is there a supported direct-to-checkout approach that preserves the Headless storefront UX while producing Online Store attribution, without sending customers through the Liquid cart?

Thank you!

Hey @Baris_Fergana - thanks for reaching out

Right now, Headless-attributed orders aren’t eligible for post-purchase offers, even when they use Shopify-hosted checkout. Also, storefront=true redirects a cart permalink to the Online Store cart; so, it isn’t exactly an eligibility switch since it could potentially mix up channel attribution (unless you and the merchant are okay with this)

A few quick questions:

  • Are you already seeing ShouldRender run without Render, or is this architecture planning?
  • Is the extension an upsell/order modification or informational content?
  • Which cart features must be preserved—subscriptions, bundles, discounts, attributes, Markets, etc.?

Just wanted to understand your use case better here - hope to hear from you soon!