Skip to main content

When Invoices Are Generated

Invoices are automatically generated when:
  • A subscription is created (first invoice)
  • A billing cycle ends (recurring invoices)
  • Usage is metered (usage invoices)
  • A one-off charge is added

Invoice Lifecycle

The Invoice Object

Invoices come back from GET /v1/invoices (and inside subscription and checkout responses). The shape, on real fields:
All amounts are minor units. amount_due = total − amount_paid − credit_applied — account credit from adjustment credit notes applies at billing time while total stays gross. Each line item is taxed at its own HSN/SAC rate.

List Invoices

Returns every invoice for the tenant, newest first. There are no query filters on this endpoint today — filter client-side, or start from a subscription’s invoices in the dashboard.

GST Invoicing (India)

For Indian businesses, Recurso generates GST-compliant invoices:
GST is calculated automatically based on seller/buyer state codes. Same state = CGST+SGST, different state = IGST. See the GST Invoicing guide for configuration.

Download PDF

Generate and download invoice PDFs:
The rendering is jurisdiction-aware (India-GST tax invoice vs. plain invoice) and requires authentication — see the endpoint reference.

Invoice Preview (HTML)

GET /v1/invoices/{id}/preview returns the same tenant-scoped, authenticated rendering as the PDF endpoint, as HTML — useful for showing an invoice inline in your own UI:
This renders an existing invoice. To estimate a plan change before committing it, use the proration preview on the subscription — see Upgrade / Downgrade.

Payment Wall

Dunning campaigns can raise a payment wall on an overdue invoice — the customer portal then blocks usage-related pages until it is settled. Check whether the wall is active:
See Dunning Campaigns for configuring wall steps.

Paying an Invoice

Customers pay on Recurso’s hosted checkout — there is no server-side “pay” API (card data never touches your backend):
The checkout creates the gateway order, drives Stripe’s Payment Element or Razorpay Checkout.js, verifies settlement server-side, and posts the payment through the ledger. Offline settlements (bank transfer, cheque) are recorded with POST /v1/payments/offline. See Payments for the full flow.

Due Date Calculation

Invoice due dates are determined by the subscription’s payment terms: If no payment terms are set on the subscription, the default is net0 (due immediately). See the Subscriptions guide for configuring payment terms.

E-Invoice Status

For invoices subject to India’s e-invoicing rules, check the IRN state at GET /v1/invoices/{id}/einvoice:
Failed generations retry automatically with backoff; you can also force one with POST /v1/invoices/{id}/einvoice/retry or cancel the IRN within the 24-hour window via POST /v1/invoices/{id}/einvoice/cancel. See the E-Invoicing guide for IRP configuration.

Multi-Currency Invoices

Invoices are generated in the subscription’s currency — a USD plan bills a USD invoice, end to end. Invoices don’t store an exchange rate; FX normalization happens at the reporting layer, where MRR and revenue are converted to your reporting currency with daily rates. See the Multi-Currency guide.
Tax on an invoice depends on the seller’s jurisdiction: India uses GST (see GST Invoicing); US sellers get live jurisdiction-level sales tax via TaxJar — or an honest 0% marked sales_tax_stub when TaxJar is not configured (see US Sales Tax).

Advance Invoicing

Bill a subscription ahead of schedule — useful for customers who want to prepay:
Returns the created invoice covering the next 3 billing periods. One-off charges outside the cycle use POST /v1/subscriptions/{id}/charges.

Adjustments & Refunds

There is no void endpoint — issued invoices are adjusted the accounting way, with credit notes (full or partial, refund or account credit):
See the Credit Notes guide for full credit note management.

Webhooks