Skip to content

Save Revolut card for off-session automatic renewals#16

Merged
v0l merged 1 commit into
mainfrom
feat/revolut-auto-renewal
Jul 14, 2026
Merged

Save Revolut card for off-session automatic renewals#16
v0l merged 1 commit into
mainfrom
feat/revolut-auto-renewal

Conversation

@v0l

@v0l v0l commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Companion to LNVPS/api#160 (Fixes LNVPS/api#159).

Summary

When a subscription has auto_renewal_enabled, pass savePaymentMethodFor: 'merchant' to the Revolut card widget so the customer's card is saved for merchant-initiated (off-session) automatic renewals. The backend then captures the saved payment method on webhook completion and charges it automatically when the subscription is expiring.

Changes

  • RevolutPayWidget gains an optional saveCard prop; when set, cardField.submit(...) includes savePaymentMethodFor: 'merchant'.
  • SubscriptionPaymentFlow loads the subscription and enables saveCard when auto_renewal_enabled is true.

Notes

Card saving requires the embedded checkout widget (already used here) — the hosted checkout page does not support it. Validated end-to-end against the Revolut sandbox: the widget with savePaymentMethodFor: 'merchant' saves the card, after which the backend charges it off-session successfully.

When a subscription has auto_renewal_enabled, pass savePaymentMethodFor=merchant
to the Revolut card widget so the card is saved for merchant-initiated
(off-session) automatic renewals. The subscription payment flow loads the
subscription to determine whether to save the card.

Companion to LNVPS/api #160.
@v0l
v0l merged commit 5050cd7 into main Jul 14, 2026
1 check failed
@v0l
v0l deleted the feat/revolut-auto-renewal branch July 14, 2026 18:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Revolut automatic renewal (saved payment method + off-session charge)

1 participant