All Posts
Headless Commerce August 9, 2026

Recharge vs Skio vs Ordergroove: Subscription Billing for Headless Commerce (2026)

Adding a subscribe option to a hosted storefront is an app install and an afternoon. Adding it to a headless storefront is a billing project, because a subscription is not a one time payment with a checkbox; it is a recurring engine that has to charge a saved payment method on a schedule for months, handle the cards that decline on renewal, let a customer pause or swap or skip from a portal you now render yourself, and keep all of that reconciled against your order and accounting systems. The widget that shows a shopper their delivery frequency is the easy ten percent. The other ninety percent is the recurring charge lifecycle, the dunning and retry logic when a renewal fails, and the webhook stream that tells your backend a charge succeeded, a subscription churned, or a payment method expired. Recharge, Skio, and Ordergroove all solve the same merchant facing job, recurring revenue, but they expose that job through very different architectures, and the one that suits a hosted Shopify theme is not automatically the one that suits a custom headless build. This post compares them where a headless integration actually feels the difference and lays out the billing lifecycle you have to own regardless of which you pick.

Recharge vs Skio vs Ordergroove: Subscription Billing for Headless Commerce (2026)

Putting a subscribe option on a hosted Shopify theme is an app install and a lunch break. Putting it on a headless storefront is a real billing project, because a subscription is not a payment, it is a recurring engine that has to charge a saved method on a schedule, survive the renewals that decline, and drive a customer portal you now render yourself. The frequency selector on the product page is the trivial part. The work lives in the recurring charge lifecycle, the dunning logic when a renewal card fails, the self service actions a subscriber expects to take, and the webhook stream that keeps your backend and accounting in sync with what the billing platform actually did. Recharge, Skio, and Ordergroove all promise the merchant the same thing, predictable recurring revenue, but they hand you that promise through architectures that assume different amounts of work on your side. Choosing badly for a headless build usually means discovering the mismatch months in, when failed renewals quietly stop reconciling or a portal action does not propagate.

The Part That Is Actually Hard

On a hosted theme the subscription app owns the whole flow, so the differences between these three barely surface. On a headless build the flow is partly yours, and it has four moments where the platforms genuinely differ. The first is checkout tokenization, where the shopper's payment method is saved for future charges, which in a custom checkout means you integrate the platform's payment setup rather than relying on a drop in Shopify page. The second is the recurring charge lifecycle, the scheduled billing that fires on renewal without anyone clicking anything, which is the platform's core engine and the thing you least want to build yourself. The third is dunning, the retry and recovery logic when a renewal charge is declined, which quietly determines how much of your recurring revenue actually lands. The fourth, and the one that separates a clean integration from a painful one, is the webhook and state reconciliation between the platform and your own systems.

Dunning is where subscriptions stop resembling one time payments. A card that worked at signup will fail three months later because it expired, hit a limit, or was reissued, and a naive integration treats that failed renewal as a lost customer when a good dunning sequence would have recovered it with a retry and a payment update prompt. The recovery logic, how many retries, on what schedule, with what customer messaging, lives on the platform's side, but your portal has to surface the update payment flow and your backend has to reconcile the eventual outcome. If your integration ignores the dunning lifecycle, it will appear to work in testing, where every card is valid, and leak revenue in production the first billing cycle a real card declines.

Where the Three Differ for a Headless Build

The merchant facing features overlap heavily, but for an engineering decision the API architecture and the billing model matter more, because those are what your storefront and backend integrate and reconcile against. This table is the decision that actually affects your build.

Dimension Recharge Skio Ordergroove
Core model Mature, broad, Shopify native roots API first, built for headless and modern checkouts Enterprise, retention and relationship focused
API surface Large and well documented, most integrations exist Clean and modern, GraphQL forward Comprehensive but heavier, enterprise shaped
Headless fit Good, but carries hosted era assumptions Strongest, designed for custom checkouts Workable, assumes more services engagement
Dunning and recovery Configurable, proven at scale Modern, transparent retry controls Advanced, retention tooling is the selling point
Customer portal Hosted portal or headless via API API first portal, meant to be embedded Hosted plus programmatic, retention flows
Best fit Mid market with existing Shopify surface area Headless brands wanting the least friction Enterprise prioritizing churn reduction

Read the headless fit and API surface rows together, because those decide how much you build versus configure. Recharge has the largest ecosystem and the most existing integrations, which is a real advantage, but it grew up in the hosted Shopify world and some of its assumptions show through in a fully custom checkout. Skio was built API first for exactly the headless case, so its surface tends to fit a custom storefront with the least friction, at the cost of a smaller ecosystem than Recharge's. Ordergroove sits at the enterprise end, where its retention and win back tooling is the reason to choose it, and where you accept a heavier integration and more vendor engagement in exchange for churn reduction that moves real revenue at scale.

The Billing Lifecycle You Own Regardless

Whichever platform you pick, your backend has to react to the subscription lifecycle through webhooks, and getting that reconciliation right is the difference between books that balance and a slow drift you discover at quarter close. The events that matter are the charge success and failure on each renewal, the subscription state changes when a customer pauses, skips, swaps, or cancels, and the payment method updates when a card is refreshed. Each of these has to update your order system and your accounting, and each webhook has to be idempotent because you will receive duplicates.

// reconcile a subscription platform webhook against your own order state
// idempotent by event id, because duplicate deliveries are normal
async function handleSubscriptionWebhook(event) {
  if (await alreadyProcessed(event.id)) return ack();   // dedupe first, always

  switch (event.topic) {
    case "charge.succeeded":
      await recordRecurringOrder(event.charge);          // create the order
      await syncToAccounting(event.charge);              // keep the ledger honest
      break;
    case "charge.failed":
      await openDunningCase(event.charge);               // do not churn yet
      break;
    case "subscription.cancelled":
      await closeSubscription(event.subscription);        // stop future orders
      break;
    case "payment_method.updated":
      await refreshDunningCase(event.subscription);       // may recover a failure
      break;
  }
  await markProcessed(event.id);
  return ack();
}

Two things in that handler are not optional. The first is deduplication by event id before you act, because subscription platforms retry webhook delivery and a charge success processed twice is a duplicate order and a double count in your ledger. The second is treating a failed charge as the start of a dunning case rather than an immediate cancellation, because the customer is very likely recoverable and cancelling on the first decline throws away revenue the retry logic was designed to save. This webhook reliability problem is the same one that bites every headless integration with an external system, and we covered the general pattern in the webhook delivery reliability writeup; subscriptions raise the stakes because the events repeat every billing cycle for the life of the customer.

How This Compares to One Time Payment Integration

If you have already integrated a payment method or a buy now pay later provider into a headless checkout, subscriptions will feel familiar in shape and heavier in substance. The tokenization and session handling resemble what buy now pay later required, which we detailed in the BNPL headless checkout post, but subscriptions add the dimension those integrations do not have: time. A one time payment is done when it settles. A subscription keeps charging, keeps generating webhooks, and keeps offering the customer actions for months or years, so every integration decision compounds across billing cycles rather than resolving in one. That is why the reconciliation discipline matters more here than anywhere else in a commerce stack.

For a deeper feature by feature billing comparison that puts Recharge and Ordergroove against Stripe Billing specifically, the Recharge vs Ordergroove vs Stripe writeup covers that angle; this post's focus is the three platform choice and the lifecycle you own on any of them.

When This Applies to Your Stack

Pick by how much of the billing engine you want to own and how much churn recovery is worth to you. If you are a headless brand that wants the least integration friction and a checkout built for custom storefronts, Skio's API first design is the path of least resistance. If you have existing Shopify surface area and value the largest ecosystem and the most proven scale, Recharge is the safe mid market choice. If you are enterprise and churn is your biggest lever, Ordergroove's retention tooling can justify its heavier integration. Whichever you choose, build the webhook reconciliation to be idempotent, treat failed renewals as dunning cases rather than cancellations, and render the customer portal actions against the platform API so a subscriber can pause, swap, and update payment without a support ticket.

Standing up subscription billing in a headless build, with the recurring charge lifecycle, dunning recovery, and reconciliation that keep recurring revenue landing and books balanced, is the headless commerce and platform integration work Contra Collective does. The frequency selector is the easy part; the billing engine behind it is where the revenue is won or quietly lost.

FAQ

Why is subscription billing harder in a headless build than a hosted one? Because in a hosted theme the subscription app owns the whole flow, while in a headless storefront you own the checkout, the customer portal, and the reconciliation against your systems. The recurring charge engine still lives on the platform, but the tokenization, the portal actions, and the webhook handling that keep everything in sync are now yours to build and get right.

What is dunning and why does it matter? Dunning is the retry and recovery logic that runs when a renewal charge is declined, which happens routinely as cards expire or hit limits. Good dunning recovers a large share of failed renewals with retries and a payment update prompt, so treating a failed charge as an immediate cancellation throws away recoverable revenue. The retry logic lives on the platform, but your portal and backend have to support the recovery flow.

Which platform is best for a headless storefront? Skio is designed API first for headless and custom checkouts, so it usually fits with the least friction. Recharge offers the largest ecosystem and the most proven scale and suits mid market brands with existing Shopify surface area. Ordergroove targets enterprise where churn reduction is the priority and a heavier integration is acceptable. The right answer depends on your scale and how much churn recovery is worth to you.

Why do subscription webhooks need to be idempotent? Because subscription platforms retry webhook delivery, so your backend will receive duplicate events. If a charge success is processed twice you create a duplicate order and double count revenue in your ledger. Deduplicating by event id before you act on any webhook is the safeguard, and it matters more for subscriptions than one time payments because the events repeat every billing cycle.

How is a subscription integration different from a one time payment integration? The tokenization and session handling are similar in shape, but subscriptions add time. A one time payment resolves when it settles, while a subscription keeps charging, generating webhooks, and offering customer actions for months or years. Every integration decision therefore compounds across billing cycles, which is why reconciliation discipline and dunning handling matter far more than in a single payment flow.

[ 02 ] — Keep Reading

More from the lab.

Oct 5, 2026 Headless Commerce

Adobe's 275 Billion Dollar 2026 Holiday Forecast: Is Your Commerce Stack Ready for Peak Season

Adobe's 2026 holiday forecast puts US online sales at 275.1 billion dollars between November 1 and December 31, up 6.7 percent year over year. The bigger number in the report is not the top line: AI referred traffic to retail sites is projected to grow 130 percent, with spikes to 159 percent on Thanksgiving alone. Most teams are reading this as a marketing story. It is an infrastructure story.

Oct 5, 2026 Headless Commerce

Shopify Lets Meta's Muse Check Out, Amazon Blocks It: The Platform Split Over AI Shopping Agents

On September 22, Shopify and Meta announced that Muse, Meta's AI shopping agent, can search Shopify merchant catalogs and complete purchases through Shop Pay. Within days, Amazon blocked the same agent from its marketplace, citing unauthorized agent access, identity concealment, and credential collection. Two platforms, the same AI agent, and two opposite bets on what agentic commerce should look like.

Oct 3, 2026 Headless Commerce

Mastercard Agent Pay, Visa TAP, and ACP: The Agentic Payments Protocol Map for Merchants (October 2026)

On October 1, 2026, Mastercard added a probability score and a set of trust and intelligence signals to Agent Pay, its framework for telling issuers whether a transaction was actually initiated by an AI agent, built in partnership with agent identity provider Skyfire and with Cloudflare on the data side. The same day, trade press mapped out eight separate protocols now live in agentic commerce: MCP, A2A, ACP, UCP, AP2, TAP, Agent Pay, and MPP, backed by Anthropic, Google, OpenAI, Stripe, Shopify, Visa, and Mastercard respectively or in combination. None of them has lost. They are stacking, not competing, which is both good news and a real integration problem for anyone who is not Shopify.

Ready when you are

Want to discuss this topic?

Start a Conversation