Skip to content
Hardcount
Run it locally
Pre-1.0 · one maintainer · Stripe and cards only · no SDKs (client libraries) yet · no production users yet. Docs describe v0.9.1 (29 Oct 2026) · What’s new →

Get headline billing metrics

GET
/v1/analytics/overview
curl --request GET \
--url 'http://localhost:8080/v1/analytics/overview?period=7d' \
--header 'Authorization: Bearer <token>'

Returns the dashboard’s headline metrics for a rolling window that ends now, with values for the window before it where a comparison makes sense.

Money is in cents of the tenant’s default currency (USD when none is set), named in currency. Invoices and plans in other currencies are left out. MRR (monthly recurring revenue) counts plan base fees only: base amount times quantity, with yearly plans divided by 12. Usage charges are not included. Data from test clocks is left out.

period
string
default: 30d
Allowed values: 7d 30d 90d 12m

The window. Any other value is treated as 30d. 12m is 365 days.

Headline metrics.

Media typeapplication/json

“The window” is the requested period, ending now. “The previous window” is the one of equal length before it. Money is in cents of currency.

object
period
required
string
default: 30d
Allowed values: 7d 30d 90d 12m
currency
required

The tenant’s default currency. Every money field uses it, except credit_balance_by_currency and outstanding_by_currency, which carry their own.

string
mrr
required

MRR of active subscriptions now.

integer format: int64
mrr_prev
required

MRR at the start of the window, rebuilt from item change history.

integer format: int64
arr
required

mrr times 12.

integer format: int64
arr_prev
required

mrr_prev times 12.

integer format: int64
revenue
required

What paid the invoices paid in the window (payment plus customer credit applied). A credit note that lowered an invoice before it was paid is not counted.

integer format: int64
revenue_prev
required

revenue for the previous window.

integer format: int64
outstanding_ar
required

Amount due on finalized invoices whose payment has not succeeded, in currency only.

integer format: int64
outstanding_by_currency
required

Amount due on the invoices open_invoices counts, one entry per currency. currency comes first, then the largest amount. Empty when nothing is owed.

Array<object>
object
currency
required
string
amount_cents
required
integer format: int64
avg_invoice_value
required

Average total of invoices paid in the window.

integer format: int64
credit_balance_by_currency
required

Customers’ credit balances added up per currency, currency first, then largest. A currency whose balance is zero is left out. Customers on a test clock are not counted.

Array<object>
object
currency
required
string
amount_cents
required
integer format: int64
active_customers
required

Customer records with status active. Includes customers with no subscription or only canceled ones; live_customers counts the customers you bill.

integer
new_customers
required

Customers created in the window.

integer
live_customers
required

Customers with at least one active or trialing subscription now.

integer
live_customers_prev
required

live_customers at the start of the window, rebuilt from subscription start and cancel times.

integer
active_subscriptions
required

Subscriptions with status active.

integer
trialing_subscriptions
required

Subscriptions with status trialing.

integer
paid_invoices
required

Invoices paid in the window.

integer
failed_payments
required

Open invoices created in the window whose payment failed. A voided or written-off invoice is not counted. All currencies.

integer
failed_payments_prev
required

failed_payments for the previous window.

integer
open_invoices
required

Finalized invoices whose payment has not succeeded. All currencies.

integer
dunning_active
required

Dunning runs (automatic payment retries) still in progress.

integer
refunds_needing_attention
required

Issued credit notes whose refund failed, has an unknown result, has been pending for more than 72 hours, or has not started an hour after issue.

integer
usage_events
required

Usage events with a timestamp in the window.

integer format: int64
logo_churn_rate
required

Subscriptions canceled in the window, divided by subscriptions active at its start. 0 when none were active.

number format: double
revenue_churn_rate
required

Churned MRR divided by mrr_prev. 0 when mrr_prev is 0.

number format: double
nrr
required

Net revenue retention: (mrr_prev + expansion - contraction - churned) divided by mrr_prev. Can be above 1. 0 when mrr_prev is 0.

number format: double
dunning_recovery_rate
required

Dunning runs opened in the window that a payment closed (resolution is payment_recovered and the invoice has amount_paid_cents above 0), divided by all runs opened in the window. A run closed by a void, a write-off, or a credit note or customer credit that left nothing due is not recovered. 0 when none were opened.

number format: double
mrr_movement
required

MRR change in cents. churned and contraction are positive amounts. net = new + expansion - contraction - churned.

object
new
required
integer format: int64
expansion
required
integer format: int64
contraction
required
integer format: int64
churned
required
integer format: int64
net
required
integer format: int64

Example

{
"period": "7d"
}