Invoices & Billing
An invoice is created automatically the moment an order is marked as delivered. Strata calculates the totals from the order line items, applies any applicable tax, and sets the invoice status to "sent" — no manual step required. For subscription services, invoices are generated on each recurring billing date without operator involvement.
Invoice Fields#
| Name | Type | Required | Description |
|---|---|---|---|
publicId | string | Yes | URL-safe invoice reference shown to clients, e.g. "INV-2024-0042". Used in the client portal and PDF header. |
orderId | string (UUID) | Yes | References the Order that generated this invoice. One order produces exactly one invoice. |
lineItems | JSONB | Yes | Array of line item objects — each with a description, quantity, unit price, and line total. Stored as JSONB for flexible schema evolution. |
subtotal | number | Yes | Sum of all line item totals before tax, in minor currency units (e.g. cents). |
taxAmount | number | Yes | Tax charged on this invoice, in minor currency units. Zero when no tax rate applies. |
total | number | Yes | Final amount due: subtotal + taxAmount. This is the amount the client pays via Stripe Checkout. |
currency | string (ISO 4217) | Yes | Three-letter currency code inherited from the service, e.g. "usd" or "gbp". |
status | "draft" | "sent" | "paid" | "overdue" | "voided" | Yes | Current payment state of the invoice. See Invoice Statuses below for the full lifecycle. |
dueDate | string (ISO 8601) | Yes | UTC date by which payment is expected. Invoices whose dueDate has passed and status is "sent" are automatically moved to "overdue". |
paidAt | string (ISO 8601) | No | UTC timestamp set by the Stripe webhook when payment is confirmed. Null until the invoice is paid. |
Invoice Statuses#
| Name | Type | Required | Description |
|---|---|---|---|
draft | status | No | Invoice has been created but not yet sent to the client. Visible only to operators. Editable at this stage. |
sent | status | No | Invoice has been sent to the client with a Stripe Checkout payment link. Awaiting payment. |
paid | status | No | Payment confirmed by Stripe. The paidAt timestamp is set automatically. No further action required. |
overdue | status | No | Due date has passed and the invoice remains unpaid. Strata transitions "sent" invoices to "overdue" automatically at midnight UTC on the due date. |
voided | status | No | Invoice has been cancelled and is no longer collectable. No payment can be taken against a voided invoice. |
Creating an Invoice Manually#
In addition to automatic generation, you can raise an invoice manually at any time — for example, to bill for ad-hoc work or to issue a corrective invoice.
Open Billing > Invoices > New Invoice
Navigate to the Billing section from the left sidebar, select the Invoices tab, then click the "New Invoice" button in the top-right corner.
Add line items and amounts
Enter a description, quantity, and unit price for each line item. Strata calculates the subtotal and applies the configured tax rate automatically. Add as many rows as needed.
Set a due date
Choose the date by which payment is expected. The invoice will transition to "overdue" automatically if it remains unpaid past this date.
Send to client
Click "Send Invoice". The client receives an email containing a Stripe Checkout link. They can pay by card directly from the link — no client portal login required.
Subscription Invoices & PDF Export#
Subscription invoices are generated automatically on each monthly billing date — no operator action is needed. A PDF copy of any invoice is available from the invoice detail view via the "Download PDF" button, and is also attached to the payment confirmation email sent to the client.