Crypto subscription payments: renewals, reconciliation, and access
A practical workflow for adding crypto payments to recurring billing without confusing a paid invoice with an active subscription.

Keep billing, collection, and access separate
A subscription has more than a payment step. Your billing system determines the plan, renewal date, tax treatment, and amount due. Your payment flow collects the amount. Your application decides when the customer can use the service. Write down which system owns each decision before connecting them.
This distinction matters when evaluating Chargebee, Recurly, Recharge, Bold Subscriptions, or a membership stack such as Memberstack or Outseta. Check the current API, plan requirements, and external-payment rules of the platform you use. The workflow below describes a custom integration pattern; it does not announce a native connector for those products.
Create a payment request for a specific invoice
Create the invoice in the system that owns billing, then use the documented XRPay payment API to create the associated payment request. Store the invoice reference, customer reference, intended amount and currency, and XRPay payment reference in your own integration records. Use server-side credentials for privileged API operations.
Before retrying an interrupted request, check whether a payment request already exists for that invoice. Expiry should lead to a deliberate replacement or recovery step, rather than multiple payable requests that can accidentally collect the same renewal twice.
Reconcile a confirmed payment before changing access
XRPay’s outbound event catalog includes payment.confirmed and invoice.paid. Choose the event appropriate to your payment flow and verify the signed webhook using the current API instructions. Match the event to your stored invoice, amount, currency, and merchant account before acting.
A verified payment notification is an input to your billing workflow. It should not become a generic instruction to activate every subscription associated with an email address. Resolve the specific invoice and subscription, then perform the external-payment or invoice update supported by your billing platform.
Make renewal behavior explicit
A one-time crypto checkout does not, by itself, authorize automatic collection of future renewals. Decide whether each cycle creates a new payment request or uses a separately supported and authorized recurring mechanism. Explain the arrangement before the customer subscribes.
Define what happens if an invoice remains unpaid: reminder timing, any grace period, access suspension, and the process for restoring access. Keep the renewal amount and due date in the billing system so your payment integration does not become a competing subscription engine.
Recover safely from retries, refunds, and late payments
Webhook retries and repeated platform updates must be safe. Record an event or payment identifier and ensure each invoice is credited once. If the payment is confirmed but the billing update fails, retry that update; do not ask the customer to pay again.
Test canceled subscriptions, plan changes, partial or mismatched payments, late confirmation, and refunds. Agree on whether a refund changes access or leaves it active until the end of a period. Keep the original payment, refund, and access decision connected so support can explain the outcome.
Pilot before moving existing subscribers
Start with a limited plan or customer group. Verify the invoice amount, payment status, billing record, receipt, renewal reminder, and access state across a complete cycle. Exercise failed callbacks and interrupted requests as well as the successful path.
If you are considering replacing a merchant-of-record arrangement, assess who will perform its tax, invoicing, refund, and customer-service functions. Payment collection and wallet receipt are not a complete replacement for those business responsibilities. Keep older subscriptions supported during the pilot.