Skip to main content

Abstract credits model

Credits are now stored as abstract integers rather than currency-denominated amounts. This decouples billing logic from specific currencies and simplifies multi-currency support. What changed:
  • Customer balances are a single { balance, currency } object instead of a per-currency array
  • A new creditsPerMinorUnit field defines how credits map to the provider’s currency (e.g. 100 credits = 1 USD cent)
  • displayExchangeRate lets the frontend show USD-equivalent values regardless of the provider’s settlement currency
  • Provider currency is locked after the first transaction to prevent inconsistencies
  • Credit topup webhook processing is now idempotent
Plans that previously used pricePerUnit now use creditsPerUnit. See Plans overview for the updated schema.

Sandbox-first onboarding

New providers now start directly in a sandbox environment instead of being routed through Stripe setup on first sign-up. This removes friction from the onboarding flow and lets providers explore the platform before connecting a payment processor.
  • Sandbox is the default environment for new accounts
  • Stripe provisioning is non-blocking — providers can set up payments later
  • Sandbox comes with sample data for faster testing
  • Dev tools include a new Clear all data option alongside the existing reset

Go-Live flow

A new Go Live modal guides providers through the transition from sandbox to production.
  • Stripe OAuth popup: connects a Stripe account without leaving the SolvaPay Console
  • Copy products toggle: optionally migrates sandbox products and plans to the live environment
  • Validate-only OAuth linking: verifies the Stripe connection before committing
  • Environment switcher intercept: prompts providers who try to switch environments manually
  • Checklist gating: blocks the “Next” button while validation is in progress
  • Improved security on the OAuth connection flow

Unified plans array

Products now store all plans in a single plans[] array instead of separate freePlan and paidPlans fields. What changed:
  • freePlan and paidPlans merged into plans[]
  • requiresPayment is now derived on the backend from plan price, creditsPerUnit, and type — clients no longer send it
  • A pricingMode field is used on the frontend for UI display logic
  • Default plan, name, and description fields added to product plans
If you previously sent requiresPayment in plan creation requests, remove it. The backend now determines this automatically.

Usage-based plans

Full support for usage-based plans across the platform:
  • Usage plans in product onboarding with sub-cent configuration
  • Plan selection in checkout and customer account pages
  • Usage paywall enforcement in the SDK and MCP server
  • trackUsage helper and Usage Simulator added to the SDK checkout demo
  • USD equivalent display in usage-based plan previews

Two-factor authentication

Two-factor authentication is now available for all provider accounts and required to go live.
  • Set up and manage 2FA from the Account page in the SolvaPay Console
  • 2FA is a required step in the Go Live checklist — it can be configured inline without leaving the wizard
  • Backup codes are generated during setup for account recovery
GDPR-compliant cookie consent is now shared across solvapay.com and app.solvapay.com.
  • Accept or decline cookies once — your preference carries across all SolvaPay subdomains
  • Manage preferences (Necessary / Analytics) at any time from the cookie banner
  • All analytics scripts are gated behind consent

SolvaPay Console

  • New ProductQuickStart card on the home page with ready-to-paste integration snippets for CLI, Agent Skill, and environment variables
  • Product selector dropdown for providers with multiple products
  • Manage account link shown after plan activation in checkout
  • Faster manage account page loading with parallel data fetching

SDK updates

  • Types regenerated from the backend schema
  • Multi-currency balances replaced with abstract credits
  • creditsPerMinorUnit propagated from server through all SDK layers
  • Usage paywall enforcement in the SDK and MCP server
  • trackUsage helper and Usage Simulator added to the checkout demo
  • Checkout demo: exchange rate applied to credit estimates, dynamic currency symbol padding