Skip to main content
The Recurso dashboard after first sign-in

The Recurso dashboard after first sign-in

Using Recurso Cloud? You can skip the installation steps below. Cloud users receive API credentials after joining the waitlist — learn more.

Installation

Fastest path: clone the repository and run make demo. It builds and starts the full stack (API, dashboard, PostgreSQL, TigerBeetle, Mailhog), waits for the API to become healthy, and loads demo data. Then open the dashboard at http://localhost:5173 and log in with API key sk_test_12345.
Choose your preferred setup method:

Configuration

Set these environment variables:
.env

Create an API Key

  1. Start the dashboard — a React app in the frontend/ directory of the repository:
  2. Open the dashboard at http://localhost:5173 (the Vite dev server proxies API calls to the API at http://localhost:8080)
  3. Navigate to Settings → API Keys
  4. Click Create API Key
  5. Copy and store securely
Test the connection:

Optional: Load Demo Data

Want a populated dashboard before creating anything yourself? Seed the dev database with a sample tenant — plans, customers, subscriptions, invoices, events, and a webhook endpoint:
make seed wipes all existing data in the target database before loading the demo dataset. Only use it on a fresh local install.
Then log in to the dashboard with the demo API key sk_test_12345 and explore. When you’re done exploring, run make seed again for a clean slate or register your own tenant. In dev, any emails the system sends (invoices, dunning notices, and so on) are captured by Mailhog — view them at http://localhost:8025.
Want a public, safe-to-share sandbox instead of a local dev stack? docker compose -f docker-compose.demo.yml up -d runs Recurso in demo mode — mock gateways, blocked destructive settings, auto-login, and an hourly reset.

Create Your First Plan

1

Create a pricing plan

Amounts are always minor units4999 is ₹49.99.
2

Add a customer

3

Start a subscription

That’s a running billing stack: the subscription invoices itself every period, usage rates onto the same invoice, and every posting lands on the ledger.
See the first invoice it just issued:
To collect it, send the customer to the hosted checkout page at http://localhost:8080/checkout/<invoice-id> (see Payments) — or bill accrued usage immediately with POST /v1/subscriptions/{id}/bill-usage.
4

Record usage (metered pricing)

If the plan carries usage charges, report events as they happen — they aggregate into billable metrics and rate onto the next renewal invoice:
Batch up to 500 events per call at /v1/usage/events/batch with a transaction_id per event for idempotent retries — see usage-based billing.
5

Handle webhooks

6

Watch the books balance

This is the part most billing tools don’t have. Every event you just triggered — the invoice, the payment, the usage — posted balanced double-entry rows to a real ledger. Ask Recurso to prove it:
total_discrepancies: 0 is the whole point: every billing record ties to its ledger postings, down to the minor unit. That check runs daily in production, and the same invariant is enforced in CI on every commit to Recurso itself. Read how the postings work in the Ledger guide.

Self-Hosting

For production deployments, see the self-hosting guide on GitHub.

Next Steps

Core Concepts

Plans, customers, subscriptions, invoices — and how the ledger ties them together.

Usage-based billing

Billable metrics, charge models, wallets, commitments, and alerts.

The Ledger

Double-entry postings, account codes, and the reconciliation that reads zero.

Going to production

Hardening, backups, and the production checklist.