
If your store talks to Stripe through your own code, a Stripe API version upgrade is a change to checkout and should be handled like a release. Find out which version each part of the integration uses: server calls, Stripe.js in the browser, and every webhook endpoint. Upgrade them in that order, in a test environment first, and keep the old webhook endpoint alive until the new one has processed real orders cleanly.
On 30 September 2026 Stripe published 2026-09-30.endive, a major release with breaking changes to payment method parameters and the Payment Request Button. If you want it before Black Friday (27 November 2026), finish early in November. Otherwise wait until after the peak.
2026-09-30.endive) is a major release.payment_method_types when creating a Checkout Session, Payment Intent or Setup Intent returns a 400 error, and elements.create('paymentRequestButton') throws an error.Since 2024-09-30.acacia, Stripe has followed a release process with monthly API versions that do not break existing code, plus a major release twice a year that starts with breaking changes. Stripe's webhook versioning guide states that you can move to any monthly version safely, while a new major release may require changes to your integration.
Endive is the major release published on 30 September 2026. According to Stripe's changelog, the items most likely to affect a store are:
payment_method_types is removed from the create call, and passing it now returns a 400 error. Stripe points to dynamic payment methods managed in the Dashboard, with excluded_payment_method_types or the new allowed_payment_method_types for per-request control.payment_method_types can no longer be sent on create, update or confirm. The error code is payment_method_types_no_longer_supported. The field still exists on the returned object as read-only.elements.create('paymentRequestButton') throws an error, and the React PaymentRequestButtonElement is affected as well. Stripe recommends the Express Checkout Element and notes that Stripe.js versions up to Dahlia still support the old button.Many older stores pass payment_method_types: ['card'] on every payment. On Endive that line stops payments from being created, while the checkout page and your uptime monitor look normal. For the wallet side, see our guide on Apple Pay not showing at checkout.
Stripe's upgrade documentation describes these sources:
Stripe-Version header or a pinned SDK, so that the Dashboard setting does not decide it for you.https://js.stripe.com/endive/stripe.js, or from the major version of @stripe/stripe-js on npm. Each Stripe.js version uses its matching API version for the requests it makes, and you cannot override that. Stripe says js.stripe.com/v3 remains supported and receives backported features, though it is no longer recommended for new integrations.So "we are on version X" is rarely true for the whole store. In practice an old store might call the server API on one version, load Stripe.js v3 in the browser, and receive webhooks rendered in a third version from years ago.
In the Stripe Dashboard, open Workbench and read the API versions your requests actually use. Then note the version on each webhook endpoint. In the codebase, record the server SDK name and release, any explicit Stripe-Version or apiVersion setting, and the Stripe.js URL or @stripe/stripe-js version.
Search for payment_method_types, paymentRequestButton and PaymentRequestButtonElement. Reading payment_method_types from a returned object is fine. Sending it in a create, update or confirm call is the problem.
If any blocker exists and you cannot test the fix thoroughly before your code freeze, pin the current version explicitly in the SDK configuration, leave Stripe.js where it is, and put the upgrade on the January list. Pinning removes the dependency on the account default, so a later Dashboard change cannot move you by accident. Our Black Friday code freeze guide explains how to separate changes you must still ship from those that can wait.
Replace payment_method_types with dynamic payment methods, or with allowed_payment_method_types where you need a fixed list. Stripe notes one behaviour difference: the old parameter returned an error for an incompatible method, while allowed_payment_method_types drops incompatible methods silently. Check the methods shown for each currency you sell in. Replace the Payment Request Button with the Express Checkout Element using Stripe's migration guide. Then run test payments through every path you support: card, wallet, a 3-D Secure test card, a declined card, a refund and, if you sell subscriptions, a renewal.
Upgrade the SDK and set the target version explicitly. Deploy, then watch API error rates in Workbench for 400 responses with payment_method_types_no_longer_supported or other parameter errors.
Change the script URL or the npm package major version. Stripe recommends keeping Stripe.js and the server API on the same release train, and says the two do not need to ship at the same moment.
Stripe's documented sequence:
?version=2026-09-30, the same event list and the new API version. Disable it straight away.If you use the .NET, Java or Go SDK, Stripe states the webhook endpoint version must match the SDK version, or the SDK cannot deserialize events.
Once your code sets its own version, the account default only affects calls that do not specify one. Upgrade it in Workbench after everything else works, and record the time. Stripe's upgrade steps give a 72-hour rollback window after that action.
| Risk | Owner | Check | Frequency |
|---|---|---|---|
Code sends payment_method_types on Endive |
Developer | Code search plus 400 errors in Workbench | Before any upgrade; daily for a week after |
| Payment Request Button breaks after a Stripe.js upgrade | Developer | Load checkout on a wallet-capable device after each front-end release | Every release |
| Webhook endpoint left on an old version or a duplicate left active | Developer / agency | List endpoints, versions and status in the Dashboard | Monthly |
| Account default changed by someone in the Dashboard | Store owner | Team access review; version pinned in code | Quarterly |
| Plugin or platform changes its pinned version in an update | Agency | Read plugin changelog before updating | Every plugin update |
| Orders stop while checkout loads normally | Store owner / agency | Order-rate monitoring against a normal baseline | Continuous |
STRIPE API VERSION UPGRADE: TEST PLAN
Store: ____________ Date: ____________ Owner: ____________
Inventory
[ ] Server SDK + release: ____________ Pinned version: ____________
[ ] Stripe.js source (URL or npm major): ____________
[ ] Webhook endpoints (URL / version / enabled):
1. ____________________________________________
2. ____________________________________________
[ ] Account default API version: ____________
Code search (sandbox branch)
[ ] No payment_method_types sent on create/update/confirm
[ ] No paymentRequestButton / PaymentRequestButtonElement
[ ] Payment methods shown per currency match expectations
Sandbox payments
[ ] Card, success [ ] Card, declined
[ ] 3-D Secure challenge [ ] Wallet (Express Checkout Element)
[ ] Refund [ ] Subscription renewal (if used)
[ ] Order status in the store matches Stripe for each payment
Webhooks
[ ] New endpoint created disabled, same events, ?version= param
[ ] Parallel run: old processed, new acknowledged with 200
[ ] Switch: new processed, old answered with 400
[ ] 24h of live orders reconciled against Stripe payments
[ ] Old endpoint disabled
Rollback
[ ] Previous code tagged and deployable
[ ] Workbench upgrade time recorded (72h rollback window): ________
[ ] Contact for payment failures during the change: ____________
An agency maintains a custom store built on stripe-php. The order count, prices and dates here are invented for the example. The store's code passes payment_method_types: ['card'] to every Payment Intent and loads js.stripe.com/v3, and its one webhook endpoint was created on a 2023 version.
On 3 November a developer upgrades stripe-php to a release that sends Endive by default and deploys on a Tuesday afternoon. Every new Payment Intent now fails with a 400 error. The checkout page still loads and the uptime check stays green. The store normally takes around 20 orders an hour on a weekday afternoon, and over the next two hours it records none.
The inventory step would have caught this in five minutes. With the test plan in place, the developer pins the old version in the SDK configuration, ships the SDK upgrade on its own, and fixes payment_method_types in a sandbox branch. The Endive move goes in after Cyber Monday, together with the webhook migration.
This plan covers the Endive changes most stores hit. If you use Billing, Connect or Tax, read their Endive entries in the changelog too. The 72-hour rollback covers the account version in Workbench, not code you deployed or events you already processed, and a sandbox run cannot reproduce a specific bank's 3-D Secure behaviour.
No. As of October 2026, the breaking changes apply to requests made on Endive, and Stripe's changelog says Stripe.js versions up to Dahlia still support the Payment Request Button. If you cannot test the change properly before your freeze, pin your current version and upgrade in January.
Probably not directly. A maintained plugin sets its own API version, so you should not change Stripe's version settings for it. Keep the plugin updated on a staging site first, as described in our WooCommerce update guide, and read its changelog for Stripe-related notes. Custom code that calls Stripe alongside the plugin still needs the checks above.
Compare orders in your store with successful payments in Stripe for at least a day of live traffic. Every paid payment should map to a paid order, and no order should be marked paid without a payment. Our guide to orders marked as paid without payment gives a reconciliation routine.
payment_method_types from Payment Intents and Setup Intents (2026-09-30.endive): https://docs.stripe.com/changelog/endive/2026-09-30/removes-the-payment-method-types-parameter-from-payment-intents-and-setup-intentspayment_method_types from Checkout Sessions (2026-09-30.endive): https://docs.stripe.com/changelog/endive/2026-09-30/remove-payment-method-types-checkout-sessionsLast reviewed: 2026-10-27
If you maintain WooCommerce stores, Pingvera's WordPress connector sends order events and compares the order rate with an hourly baseline. If a version change stops payments while the site stays up, you get an alert, and the deploy appears on the same timeline as the drop. See WooCommerce checkout monitoring for how that works.
Pingvera watches whether an online business actually works — uptime, checkout, orders, domain, SSL and server — and alerts you in Telegram, email or a webhook before a customer has to tell you.
Start freeRead next: AI Agents in Ecommerce: Safe Guardrails · How much to charge for website maintenance — and what to actually put… · Update PHP on WordPress: WooCommerce Plan Before 11.6 · Ecommerce Business Continuity Plan Template · Run a free site check.