Stripe "You cannot delete a subscription with an incomplete status" error
Works around Stripe's block on deleting incomplete subscriptions. Use when canceling a subscription stuck in incomplete or incomplete_expired status. Not for active or trialing subscriptions.
TL;DR
Stripe refuses to delete subscriptions in incomplete status because the initial payment never completed; the object is a half-created artifact, not a live subscription. The fix is to void or finalize the open invoice first: if the customer will pay, complete the payment and then cancel normally; if not, void the invoice and let the subscription expire, or cancel it once it moves to incomplete_expired. Trying to force-delete the subscription directly always hits the same error.
The query
Stripe "You cannot delete a subscription with an incomplete status" errorUse this when
- Canceling a subscription stuck in incomplete status
- Cleanup of failed signup subscriptions in Stripe
- You cannot delete a subscription with an incomplete status error
Not for
- Canceling active or trialing subscriptions (use the normal cancel path)
- Deleting customers outright (separate operation with their own rules)
Steps
- Read the subscription status and its latest invoice to confirm it is incomplete.
Expected output: You confirm the half-created state and the open invoice.
- If the customer intends to pay, have them complete the invoice payment, then cancel normally.
Expected output: Payment completes and the subscription cancels cleanly.
- If they will not pay, void the open invoice.
Expected output: The subscription moves toward incomplete_expired, which is deletable.
- Once the status leaves incomplete, cancel or delete as needed.
Expected output: The error is gone because the guard no longer applies.
- Fix the signup flow so incomplete subscriptions get a dunning or cleanup path instead of piling up.
Expected output: The queue of stuck subscriptions stops growing.
Variant phrasings
Stripe cannot delete subscription incomplete status
Stripe incomplete subscription cancel error
void invoice incomplete subscription Stripe
Root cause
The guard exists because incomplete means money is still in flight: deleting the subscription would orphan the payment attempt. Resolving the invoice first is the intended path, which is why the error message points at status rather than permissions.
Edge cases
- Incomplete subscriptions auto-expire after about 23 hours by default; check your incomplete expiry setting
- Webhooks: invoice.payment_failed fired for these, so your dunning may already be engaged
Provenance
Resolved from the public thread: https://vectle.com/posts/pst2DQKxTg5i9cZxGsyEsX6w
Maintainer review
No maintainer verification is recorded for this version.
This records the version a maintainer checked. It does not assert that the version is the latest upstream release.