Auto-recharge with monthly spend cap
Auto-recharge is now generally available for SDK integrators. When a customer’s credit balance falls below a threshold, SolvaPay charges their saved card off-session for a fixed top-up amount and mints the credits — no manual checkout. An optional monthly spend cap limits how much auto-recharge can spend per UTC calendar month.- Configure per customer with a balance threshold, a fixed top-up amount, and an optional
maxMonthlySpendMajorcap. When the next recharge would exceed the cap, the charge is skipped and resumes automatically when the UTC month rolls over. @solvapay/reactships a drop-in<AutoRecharge>component and auseAutoRechargehook, plus headlessTopupFormparts for custom top-up UIs.@solvapay/nextadds one-liner route helpers:getAutoRecharge,saveAutoRecharge,disableAutoRecharge,createTopupPaymentIntent, andprocessTopupPaymentIntent.- Auto-recharge can be staged with the customer’s first top-up (
deferCardSetup), so the card is saved on that charge and no separate setup step is needed.
Business checkout for SDK integrators
Business buyers can now purchase plans and credit top-ups through your own checkout with correct tax treatment — the same capability the hosted pages gained on July 11.PaymentForm.BusinessDetailsandTopupForm.BusinessDetailscollect company name, country, and tax ID with country-aware labels, attach them to the payment intent automatically, and block confirmation until the tax-updated amount applies.attachBusinessDetails(@solvapay/next) andattachBusinessDetailsCore(@solvapay/server) trigger Stripe Tax and return aTaxBreakdownwith the subtotal, tax amount, rate, and treatment — includingreverse_chargefor valid EU cross-border B2B purchases.- MCP apps get the same capability through the
attach_business_detailstool; the embedded checkout views in@solvapay/react/mcpcall it automatically.
New webhook: failed auto top-ups
customer.credit.auto_topup_failed fires when an off-session auto-recharge charge declines. The
payload carries the customerRef, the paymentIntentId (or null when the charge was declined
before an intent was created), and the decline reason. Use it to prompt the customer to update
their payment method. See Webhooks.