Skip to content

New payment methods aren’t set as default in Stripe, causing failed charges and passive churn #25296

@andyvanbergen-stack

Description

@andyvanbergen-stack

Issue Summary

When a member adds a new payment method in Ghost, it is not set as the default in Stripe. As a result, Ghost continues attempting to charge the previous (default) card, even though a new card has been added. This can lead to failed payments and unnecessary passive churn.

Ghost also lacks any UI or backend logic for members to manage or select a default payment method.

Expected behavior:

  • Either the newly added card should automatically become the default payment method in Stripe, or
  • Members should have the ability to set their default card within Ghost’s billing management interface.

Actual behavior:

  • Adding a new card does not change the default payment method.
  • The old card remains active and continues to be charged.
  • There is no way for the user to manage or switch payment methods manually.

Steps to Reproduce

  1. Create a paid membership and complete checkout using any card (e.g., Visa).

  2. In the Ghost account portal, go to Billing Info and add a new card (e.g., Mastercard).

  3. Observe that:

  • The new card is accepted without error.
  • In the Billing Info section, the original card (Visa) still appears as the active payment method.
  1. Attempt to trigger a renewal or reattempt a failed payment.

  2. Note that Stripe continues to charge the old (default) card instead of the new one.

Ghost Version

6.5.1

Node.js Version

20.11.1

How did you install Ghost?

Ghost is installed via a Digital Ocean droplet

Database type

MySQL 8

Browser & OS version

Ubuntu 22.04

Relevant log / error output

Code of Conduct

  • I agree to be friendly and polite to people in this repository

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs:triage[triage] this needs to be triaged by the Ghost team

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions