antiwork/gumroad · error · Subscription::UpdateFailed
error_message (PayPal account unsupported / payment method n
Error message
error_message (PayPal account unsupported / payment method no longer supported)
What it means
On a membership restart (is_resubscribing) or after an Indian-card mandate stop, UpdaterService verifies the card future charges will actually use — Subscription#credit_card_to_charge, which prefers the subscription's own card over the user's default — is still supported by the creator (link.user.supports_card?). If not, the update fails with one of two buyer-facing messages: a PayPal-specific one when the card is a PayPal instrument (creator's PayPal account problem), otherwise the generic no-longer-supported message. Nothing is charged.
Source
Thrown at app/services/subscription/updater_service.rb:188
# Do not allow a restart or renewal resume when the payment method that
# future charges will use is no longer supported by the product creator.
#
# We check `Subscription#credit_card_to_charge` — the same card recurring
# charges use (it prefers the subscription's own card over the user's
# default card) — so a supported default card on the user can't mask an
# unsupported card stored on the subscription itself. Subscriptions with
# no chargeable card (e.g. free memberships) have nothing to reject, and
# a new payment method supplied at checkout has already been validated
# and associated with the subscription above, so it is covered here too.
if is_resubscribing || had_indian_card_mandate_stop
card_to_charge = subscription.credit_card_to_charge
if card_to_charge.present? && !subscription.link.user.supports_card?(card_to_charge.as_json)
error_message = if card_to_charge.charge_processor_id == PaypalChargeProcessor.charge_processor_id
"There is a problem with creator's PayPal account, please try again later (your card was not charged)."
else
"The payment method saved on this membership is no longer supported by the creator. Please use a different payment method (your card was not charged)."
end
raise Subscription::UpdateFailed, error_message
end
validate_saved_indian_card_mandate! if use_existing_card?
end
if !apply_plan_change_immediately?
# If not an upgrade or changing plans during trial period, roll back changes
# made by `Subscription#update_current_plan!`
restore_original_purchase!
# If purchase is missing tier and user is not upgrading, associate default tier.
if tiered_membership? && original_purchase.variant_attributes.empty?
default_tier = product.default_tier
original_purchase.update!(variant_attributes: [default_tier])
if original_purchase.counts_towards_inventory? && original_purchase.quantity.to_i > 0
BaseVariant.where(id: default_tier.id).update_all("sales_count_for_inventory_cache = sales_count_for_inventory_cache + #{original_purchase.quantity.to_i}")
end
end
endView on GitHub (pinned to afeacbd394)
Solutions
- Have the buyer submit a new payment method with the restart instead of using the saved card — the new card is validated against the creator's supported processors when associated.
- For the PayPal variant, the creator must repair their PayPal connection in settings; retry later.
- Creators: confirm which charge processors are actually connected/live in account settings before fielding buyer reports.
Defensive patterns
Strategy: validation
Validate before calling
# Gate the restart-with-saved-card option before rendering it card = subscription.credit_card_to_charge saved_card_supported = card.nil? || subscription.link.user.supports_card?(card.as_json) show_use_existing_card_option = saved_card_supported
Try / catch
result = Subscription::UpdaterService.new(...).perform
unless result[:success]
# error_message already tells the buyer to use a different payment method; render it
render json: { success: false, error: result[:error_message] }, status: :unprocessable_entity
end Prevention
- Pre-check link.user.supports_card?(subscription.credit_card_to_charge.as_json) before offering a one-click restart.
- When a creator switches charge processors, proactively notify membership holders with old-processor cards to update payment methods.
- Use Subscription#credit_card_to_charge (not user's default card) for supportability checks — the renewal charges the subscription's own card.
When it happens
Trigger: Buyer clicks restart/resubscribe while their saved card is a PayPal billing agreement whose creator PayPal account is disconnected or broken, or the saved card belongs to a processor the creator has dropped (e.g. migrated to Stripe-only). Fires only when is_resubscribing or had_indian_card_mandate_stop is true.
Common situations: Creator migrates from PayPal/Braintree to Stripe and old memberships still carry processor-specific instruments; creator's PayPal account gets limited or disconnected; buyer restarts from an old purchase email years after the creator changed processors.
Related errors
- replacement_card.errors.messages[:base].first
- We could not verify this card for recurring payments. Please
- Server returned error response.
- paypal_capture_failure
- upi_recurring_authorization_required
AI-assisted analysis of antiwork/gumroad@afeacbd394 (2026-08-21).
Data as JSON: /api/errors/2ebd857f7d49d2be.
Report an issue: GitHub.