Skip to content
Create account
or
Sign in
The Stripe Docs logo
/
Ask AI
Create account
Sign in
Get started
Payments
Revenue
Platforms and marketplaces
Money management
Developer resources
Overview
Versioning
Changelog
    Overview
    Clover
    Basil
    Acacia
    Previous versions
Upgrade your API version
Upgrade your SDK version
Essentials
SDKs
API
Testing
Stripe CLI
Sample projects
Tools
Stripe Dashboard
Workbench
Developers Dashboard
Stripe Shell
Stripe for Visual Studio Code
Features
Workflows
Event destinations
Stripe health alertsFile uploads
AI solutions
Agent toolkit
Model Context ProtocolBuild agentic AI SaaS Billing workflows
Security and privacy
Security
Stripebot web crawler
Privacy
Extend Stripe
Build Stripe apps
Use apps from Stripe
Partners
Partner ecosystem
Partner certification
HomeDeveloper resourcesChangelogClover2025-09-30.clover

Prevents reusing client secrets for Intents in certain states when initializing ElementsBreaking changes

What’s new

Introduces validation to prevent reusing client secrets from Payment Intents or Setup Intents that are in succeeded, canceled, processing, requires_capture, or requires_action states with non-detachable payment methods (Boleto, knet, Oxxo, us_cash_voucher) when you create an Elements instance.

Why is this a breaking change?

Previously, Elements would allow you to initialize a instance with any valid client secret, regardless of the associated PaymentIntent or SetupIntent’s state. Now, Elements validates that the Intent is in an appropriate state before allowing the instance to be created. This means integrations that were reusing client secrets from completed or processing intents will now receive validation errors instead of successfully creating an Elements instance.

Impact

This change ensures that your customers don’t see broken payment forms by preventing Elements from rendering those forms in a broken state. Previously, you could create an Elements instance with a client secret from a completed or processing Intent, but any payment attempts by your customers would fail. Now, Elements validates the Intent state upfront and returns an error to your integration instead of rendering a non-functional payment form.

To ensure your integration continues to work:

  • Handle the new validation errors: Update your error handling to catch these validation errors when creating an Elements instance.
  • Create fresh PaymentIntents or SetupIntents: When you receive a validation error, create a new PaymentIntent or SetupIntent and use its client secret to initialize Elements.
  • Avoid reusing client secrets: Always use fresh client secrets for new payment flows or verify that the associated intent is in a valid state (typically requires_payment_method or requires_confirmation).

This validation only applies when using API version 2025-09-30.clover or later, so existing integrations on earlier API versions are unaffected.

Related changes

  • Updates default behavior for saved payment methods in Elements with Checkout Sessions
  • Removes deprecated messaging and bank elements that were replaced
Was this page helpful?
YesNo
  • Need help? Contact Support.
  • Join our early access program.
  • Check out our changelog.
  • Questions? Contact Sales.
  • LLM? Read llms.txt.
  • Powered by Markdoc