Skip to main content

Journey Overview

Preconditions

  • Member has attempted a payment
  • Payment was declined or failed
  • Member has access to update payment method

Journey Flow

Detailed Steps

1

Payment Failure Detection

System detects payment failure via:
  • Stripe webhook: payment_intent.payment_failed
  • Stripe webhook: invoice.payment_failed
  • Real-time checkout error
Failure recorded with:
  • Timestamp
  • Amount
  • Failure reason (Stripe error code)
  • Attempt number
  • Payment method used
2

Immediate Notification

Member receives immediate notification:In-App:
  • Banner on dashboard: “Payment failed - Action required”
  • Modal if currently in checkout
Email (sent immediately):
3

Dunning Sequence (Subscriptions)

For subscription renewals, automated retry schedule:
4

Member Updates Payment Method

Member clicks recovery link:
  1. Directed to payment update page
  2. Current (failed) method shown
  3. Option to:
    • Update existing card details
    • Add new card
    • Use saved alternative card
    • Try digital wallet (Apple/Google Pay)
  4. New card validated with $0 authorization
  5. New card set as default
5

Retry Payment

After updating payment method:Automatic Retry:
  • System immediately retries failed payment
  • Uses new default payment method
  • Member sees processing indicator
Manual Retry:
  • Member clicks “Retry Payment”
  • Full checkout flow with new card
6

Success Confirmation

On successful payment:
  • Success message displayed
  • Confirmation email sent
  • Invoice generated
  • Membership/access restored
  • Failure record marked resolved
  • Dunning sequence cancelled

Payment Failure Types

Recovery UI States

Smart Retry Logic

System implements intelligent retry:

Escalation Path

If automated recovery fails:
  1. Day 7: Support team notified
  2. Day 10: Member account flagged
  3. Day 14: Account manager outreach (if applicable)
  4. Manual options:
    • Phone payment
    • Invoice/bank transfer
    • Payment plan arrangement

Acceptance Criteria

Frontend

  • Payment failure banner on dashboard
  • Payment update page with current card shown
  • Stripe Elements for new card entry
  • Error messages in plain language (not codes)
  • Retry button with loading state
  • Success confirmation on resolution
  • Email links deep-link to recovery page

Backend

  • POST /api/payments/update-method - Update payment method
  • POST /api/payments/retry - Retry failed payment
  • GET /api/payments/failures - Get pending failures
  • Webhook: payment_intent.payment_failed
  • Webhook: invoice.payment_failed
  • Scheduled dunning job

Permissions

  • Member can only resolve their own failures
  • Support can manually resolve on behalf

Business Rules

  • Maximum 4 auto-retries before stopping
  • Grace period access during recovery window
  • Hard declines (fraud, stolen) not retried
  • Payment method update resets retry counter

Error Handling

  • All failure reasons mapped to friendly messages
  • Stripe error codes logged for debugging
  • Support notified of repeated failures