antiwork/gumroad · error · Subscription::UpdateFailed
We could not verify this card for recurring payments. Please
Error message
We could not verify this card for recurring payments. Please update the payment method before you restart this subscription.
What it means
When restarting or resuming a membership with a saved card (use_existing_card true), validate_saved_indian_card_mandate! requires the stored Indian card's e-mandate to be active: subscription.indian_card_mandate_for(card.id) must report status "active", otherwise UpdateFailed with "...update the payment method before you restart this subscription." Non-mandate cards simply have their mandate state cleared. Applies when india_card_mandate_reliability_enabled?, the card is on Stripe, requires_mandate?, and a future subscription charge is expected.
Source
Thrown at app/services/subscription/updater_service.rb:442
if !had_saved_card && subscription.gift? && !is_resubscribing
CustomerLowPriorityMailer.subscription_giftee_added_card(subscription.id).deliver_later
end
end
def validate_saved_indian_card_mandate!
return unless subscription.india_card_mandate_reliability_enabled?
credit_card = subscription.credit_card_to_charge
return if credit_card.nil?
unless future_subscription_charge? && credit_card.stripe_charge_processor? && credit_card.requires_mandate?
subscription.clear_indian_card_mandate_state!(expected_credit_card_id: credit_card.id)
return
end
mandate, status, = subscription.indian_card_mandate_for(credit_card.id)
unless status == "active"
raise Subscription::UpdateFailed, "We could not verify this card for recurring payments. Please update the payment method before you restart this subscription."
end
subscription.update_renewal_for_indian_card_mandate!(
"active",
expected_credit_card_id: credit_card.id,
mandate_id: mandate.id
)
rescue ChargeProcessorError => e
ErrorNotifier.notify(e, subscription: subscription.external_id)
raise Subscription::UpdateFailed, "We could not verify this card for recurring payments. Please update the payment method before you restart this subscription."
end
def future_subscription_charge?
subscription.future_subscription_charge?(authenticated_offer_code_buyer: logged_in_user)
end
def mandate_billing_info_changed?
submitted_info = params[:contact_info]&.slice(:country, :state, :zip_code)&.symbolize_keysView on GitHub (pinned to afeacbd394)
Solutions
- Have the buyer submit a new payment method instead of the saved card — the new-card path (validate_indian_card_mandate!) creates and validates a fresh mandate.
- Verify the mandate status in Stripe for that customer/payment method before directing the buyer.
- An inactive mandate cannot be fixed server-side; the buyer must re-authorize via a new card update or a fresh checkout.
Defensive patterns
Strategy: validation
Validate before calling
# Only offer restart-with-saved-card when the mandate is actually active card = subscription.credit_card_to_charge mandate_ok = true if subscription.india_card_mandate_reliability_enabled? && card&.stripe_charge_processor? && card.requires_mandate? _, mandate_ok, = subscription.indian_card_mandate_for(card.id) mandate_ok = mandate_ok == "active" end show_use_existing_card_option = mandate_ok
Try / catch
result = Subscription::UpdaterService.new(...).perform unless result[:success] # message tells the buyer to update the payment method; route them to the new-card flow redirect_to_change_payment_method(result[:error_message]) end
Prevention
- Check mandate status before rendering a restart CTA that defaults to the saved card.
- Track mandate expiry dates for Indian cards and proactively prompt re-authorization before renewal dates.
- Never assume an old membership pre-dating the reliability feature has a mandate — verify per card id.
When it happens
Trigger: Buyer restarts a cancelled membership whose saved Indian card never obtained an e-mandate (created before the reliability feature), or whose mandate has since expired, been revoked by the bank, or deleted in Stripe; a renewal resume after renewal_disabled_due_to_indian_card_mandate while still choosing the existing card.
Common situations: Memberships created before the mandate feature shipped; RBI mandates aging out per bank rules; buyer's bank revoking the auto-debit authorization; test data with mandates created in another Stripe environment.
Related errors
- We could not verify this card for recurring payments. Please
- error_message (PayPal account unsupported / payment method n
- india_card_mandate_missing
- upi_recurring_authorization_required
- upi_recurring_authorization_required
AI-assisted analysis of antiwork/gumroad@afeacbd394 (2026-08-21).
Data as JSON: /api/errors/48050b422e191390.
Report an issue: GitHub.