Stripe payments foundation
2026-04-28 · v0.5.0.0 · platform
2026-04-28 · v0.5.0.0 · platform
v0.5.0.0 migrates Saperly’s payment processor to Stripe. The customer-facing API path /api/v1/billing/add-funds keeps the same request and response shape. The visible difference is the Checkout screen, which is now Stripe-hosted with Stripe’s branding.
stripe_events table, a payment_intents ledger, and a stripe_customer_id column on billing accounts./api/webhooks/stripe for payment_intent.succeeded, payment_intent.payment_failed, refund.created, charge.dispute.created, and subscription events. The handler is transactionally idempotent, so replaying a webhook does not double-credit./api/health reports version: 0.5.0.0 post-deploy./api/v1/billing/add-funds accepts the same request shape and returns the same response shape it always has. Code that consumes the SDK does not need to change.
The legacy webhook path /api/webhooks/lemonsqueezy now returns 410 Gone with a year-long cache header, pointing integrators at /api/webhooks/stripe. If you had nothing subscribed to the legacy path, you can ignore it.
Top-up pack pricing is unchanged from the prior processor:
These are documented for archival reference. v0.5.3 retired the credits unit on customer-facing surfaces. See Cents-honest pricing reprice for the post-reprice model.
Nothing on your side. If you saved Stripe billing portal links from the prior processor’s flow, they no longer apply. Stripe-hosted Checkout is the entry point now.