Skip to content
Gaurav TiwariDocs

Sell Through Stripe Managed Payments

Updated November 7, 2026

You sell software, courses or downloads, and every buyer in another country brings a sales tax or VAT rule you’re meant to register for, charge and file. Taking cards with Stripe doesn’t change that: your business is still the seller on every one of those sales.

Stripe Managed Payments makes Stripe the merchant of record. Stripe works out sales tax and VAT, collects and remits it, handles fraud and disputes, and bills subscriptions on Stripe Billing. It’s a second gateway inside the Stripe module: buyers pay in Stripe Checkout, embedded on a page of your own store, and Stackless keeps orders, renewals, refunds and cancellations in step through the Stripe webhook you already use.

When to Use It

Use it for digital products when you’d rather Stripe carry the tax work. Keep the regular Stripe gateway for everything else. Both can be on at once: Managed Payments hides itself for carts it can’t take.

StripeStripe Managed Payments
Seller of recordYour businessStripe
Sales tax and VATYou, with WooCommerce taxStripe calculates, collects and remits it
What you can sellAnything Stripe allowsDigital products only
Where buyers payPayment form on your checkoutStripe Checkout on a pay page of your store
Subscription renewalsStackless charges the saved cardStripe Billing charges and retries
DisputesYou respond in StripeStripe handles them

Turn On Managed Payments at Stripe

Stripe has to approve your account first. In the Stripe Dashboard, open Settings → Managed Payments and activate it. Stripe reviews each account before it can take payments this way. Stripe’s eligibility rules also require:

  • Your business is based in the US, Canada, an EU country, the UK, Switzerland, Norway, Liechtenstein, Australia, Hong Kong, Japan or Singapore.
  • It’s a direct Stripe account. Connect platforms, Express accounts and accounts controlled by a platform can’t use Managed Payments.

If you sell subscriptions, also save your customer portal settings under Settings → Billing → Customer portal in Stripe. Customers update their card there.

Turn On the Gateway

  1. Set up the Stripe module first: keys and webhook under Stackless → Settings → Stripe, as described in Stripe. Managed Payments uses the same keys, webhook, test mode and debug log.
  2. Save the Stripe settings once, so the webhook also sends the Managed Payments events.
  3. Go to WooCommerce → Settings → Payments → Stripe Managed Payments (Stackless).
  4. Tick Enable (Accept payments with Stripe Managed Payments) and save.

This screen holds the Managed Payments options, plus an Open Stripe settings button for the shared keys and webhook:

  • Title: default “Card, Apple Pay, Google Pay or Link”.
  • Description: default “You’ll pay securely with Stripe on the next step. Sales tax or VAT for your location is added before you pay.”
  • Stripe tax code and Prices and tax: see the next section.

Set the Tax Code and Prices

Managed Payments needs an eligible Stripe tax code on everything it sells. Stripe tax code applies one code to every product in the order, so pick the one that best describes what you sell:

CodeWhat it covers
txcd_10000000Electronically supplied services (general), the default
txcd_10103000SaaS, personal use
txcd_10103001SaaS, business use
txcd_10103100SaaS, electronic download, personal use
txcd_10103101SaaS, electronic download, business use
txcd_10202000Downloadable software, personal use
txcd_10202003Downloadable software, business use
txcd_10701100Website hosting
txcd_20060058Training, self-study web-based

Prices and tax tells Stripe how to read your WooCommerce prices:

  • Add tax on top of my prices (default): the buyer pays your price plus tax.
  • My prices already include tax: Stripe works the tax out of your price.

Turn off WooCommerce tax for products you sell this way, or buyers are taxed twice. When an order does carry WooCommerce tax, it also goes to Stripe as one line for the whole order instead of one line per item.

Which Carts Can Use It

Managed Payments shows at checkout only when Stripe can be the seller for everything in the cart. On the block and classic checkout it hides itself when:

  • a product in the cart isn’t virtual or downloadable
  • the order has shipping
  • the cart holds subscriptions on more than one billing schedule
  • the currency is one Stripe doesn’t support
  • the total is zero and there’s no subscription to start

Being virtual isn’t enough on its own. Stripe’s rules leave out professional services such as consulting or design work, and live in-person events, even when you sell them as virtual products. Keep those on the regular Stripe gateway.

What Buyers See

Placing the order takes the buyer to a pay page on your own store. It has your logo or store name with a Secure checkout badge, the order summary on one side and Stripe Checkout on the other. The summary lists the items and totals, the amount due today and, for subscriptions, the free trial and the renewal line, such as “Then $19 every month”.

The page follows the buyer’s light or dark setting, and on phones the summary folds away while the renewal line stays in view. Back to the store returns to the order’s payment page to pick another method. In test mode, the page says no real payment will be taken.

Stripe Checkout collects the billing details, adds sales tax or VAT for the buyer’s location, and offers cards, Apple Pay, Google Pay, Link and the local payment methods Stripe picks for that buyer. Once Stripe confirms the payment, the buyer lands on your order received page. A bank payment that’s still processing puts the order on hold until the bank confirms it.

Stripe emails the receipt and invoice from Link, its checkout service, and the card statement reads LINK.COM* followed by your statement descriptor. Prices always come from WooCommerce, and nothing is added to your Stripe product catalog. If the amount Stripe charged before tax doesn’t match the order total, the order goes on hold with a note.

Subscriptions on Managed Payments

Stripe Billing runs the schedule for subscriptions bought this way:

  • One subscription schedule per checkout. One-time items and a signup fee in the same cart are charged on the first invoice.
  • Free trials work. The trial is passed to Stripe in days, and nothing is charged until it ends.
  • Each renewal Stripe charges becomes a paid WooCommerce renewal order, with the Stripe invoice ID in the order notes.
  • The next payment date follows Stripe.
  • When a renewal charge fails, Stripe retries it on its own schedule. The renewal order stays pending with a note and the decline reason, and the subscription goes On hold while Stripe reports it past due.

Stripe statuses map to Stackless ones: past due and unpaid become On hold, canceled becomes Cancelled, a cancellation set for the end of the period becomes Pending cancellation, and paused collection becomes Paused.

Cancelling from WooCommerce or My Account cancels at Stripe too, at the end of the paid period or straight away. If Stripe doesn’t confirm, the cancellation is refused. Pausing the subscription pauses collection at Stripe: invoices Stripe creates while it’s paused are voided, so the customer isn’t charged, and billing starts again when you resume it or on the resume date you set.

Stripe keeps the card for these subscriptions, so the subscription page in My Account shows Update payment method, which opens Stripe’s customer portal. Customers can also manage the subscription from their Link account. A cancellation made there reaches WooCommerce through the webhook.

Because Stripe controls billing, customers can’t renew early, switch plans, skip a renewal or undo a pending cancellation, and you can’t change the next payment date. A renewal order waiting for Stripe can’t be paid from the order-pay page either: Stripe retries it itself, so a second payment would charge the customer twice. The page points them to their subscription instead.

A subscription product set to Manual only isn’t billed by Stripe. Its first order goes through Managed Payments as a one-time payment, and the store emails each renewal invoice, which the customer pays with another payment method. The renewal mode of a subscription on Managed Payments can’t be changed after checkout.

Refunds and Disputes

Refund from the WooCommerce order screen, in full or in part. The refund is made in Stripe and includes the tax Stripe collected. Refunds made in the Stripe Dashboard are recorded on the order through the webhook. So are refunds Stripe makes on its own: as the seller, Stripe can refund a buyer within 60 days of purchase in some cases, for example to head off a chargeback.

Stripe handles disputes for you. When one opens, the order gets a note with the amount and reason, and a Processing or Completed order goes on hold until you’ve checked it in Stripe.

Good to Know

  • Billing Health warns when the Stripe webhook may be missing the Managed Payments events, and lists Stripe webhook events that failed or never finished in the last 7 days.
  • Payment failure alerts in Extra Enhancements can watch Stripe Managed Payments on its own. If you saved that list before, add it under Watch these gateways.
  • Post-purchase offers don’t charge Managed Payments orders in one click. Accepting an offer opens a payment page for the new order instead.
  • Debug log in the Stripe settings covers Managed Payments too (stackless-stripe_gateway).

Limits

  • Stripe must approve your account, and only direct accounts in the supported business locations qualify.
  • Digital products only, with no shipping, and one subscription schedule per checkout.
  • Stripe charges at least one full billing cycle on the first payment, so a first-payment discount outside a free trial can’t use Managed Payments. The longest billing interval is three years.
  • Only new subscriptions use it. Subscriptions started with another method keep renewing there, and the WooCommerce Subscriptions migration can’t move subscriptions into Managed Payments.
  • Stripe picks the payment methods each buyer sees. Some, such as Klarna, Afterpay and Bancontact, take one-time payments only, so they don’t show for subscriptions.
  • Every product in an order uses the same Stripe tax code.
  • On a copy of your live store, cancelling or pausing a subscription that Stripe bills is refused, so a staging site never changes live billing.

For Developers

Filters: stackless_stripe_managed_tax_code (tax code per order), stackless_stripe_managed_is_digital (which products count as digital), stackless_stripe_managed_session_args (the Checkout Session request), stackless_stripe_managed_pay_page_config (pay page settings, including accent) and stackless_stripe_managed_api_version. The action stackless_stripe_managed_subscription_synced fires after a subscription takes a new status from Stripe. To restyle the pay page, copy managed-pay-page.php to yourtheme/stackless/stripe_gateway/managed-pay-page.php.

add_filter('stackless_stripe_managed_tax_code', function ($code, $order) {
    // Business SaaS code when the buyer gives a company name.
    return ($order && $order->get_billing_company() !== '') ? 'txcd_10103001' : $code;
}, 10, 2);

add_filter('stackless_stripe_managed_pay_page_config', function ($config) {
    $config['accent'] = '#1a7f37';
    return $config;
});
Share

Was this helpful?

Still stuck? Open a support ticket