A valid request URL is required to generate request examples{
"metrics": [
{
"day": "<string>",
"currency": "<string>",
"mrr_minor": 123,
"arr_minor": 123,
"new_mrr_minor": 123,
"expansion_mrr_minor": 123,
"contraction_mrr_minor": 123,
"churned_mrr_minor": 123,
"logo_churn": 123,
"active_subscriptions": 123,
"ltv_minor": 123,
"nrr_pct": 123,
"fx_rate": 123,
"fx_rate_source": "<string>"
}
],
"range": {
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"retention_days": 123,
"clamped": true
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}List daily revenue metrics
Requires analytics:read. One row per UTC day and currency, recomputed nightly from the subscription mirror and the invoices: MRR and ARR, the four movement buckets (new, expansion, contraction, churned), logo churn, active subscriptions, LTV and NRR.
The normalization is fixed: annual prices divide by 12, trialing subscriptions are out of MRR until the trial ends, and discounts enter through the invoice — MRR is what was agreed, revenue-by-channel is what was paid. Rows are per currency and never summed across; two currencies are two numbers somebody chose, not conversions of one another.
ltv_minor is null when the trailing 30-day window saw no churn (an undefined LTV, not an infinite one) and nrr_pct is null when nobody was paying twelve months before. Days are UTC; translating to your timezone is a display concern. A day with no revenue and no movement is absent — read absence as zero.
A valid request URL is required to generate request examples{
"metrics": [
{
"day": "<string>",
"currency": "<string>",
"mrr_minor": 123,
"arr_minor": 123,
"new_mrr_minor": 123,
"expansion_mrr_minor": 123,
"contraction_mrr_minor": 123,
"churned_mrr_minor": 123,
"logo_churn": 123,
"active_subscriptions": 123,
"ltv_minor": 123,
"nrr_pct": 123,
"fx_rate": 123,
"fx_rate_source": "<string>"
}
],
"range": {
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"retention_days": 123,
"clamped": true
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}Authorizations
A staff session token, uk_st_…. Minted by sign-up, sign-in or the two-factor exchange. Only a 401 means it is spent; not_a_member (403) is about the organization named in X-Organization-Id and leaves the token good for the others.
Headers
The organization the caller is acting on — the org_… code that appears in the panel URL. It identifies; the membership JOIN is what authorizes, so a forged code reads nothing: the answer is not_a_member (403), which does not mean the session is over. Absent, the session's default organization answers, or — if that membership was revoked while the session was open — any other one the caller still holds.
Query Parameters
Which environment to act in. A view parameter, valid only on the staff surface — a machine credential never chooses its environment, it is resolved from the key.
live, test Range start (inclusive). Default: 90 days ago.
Range end (exclusive). Default: now.
Response
One row per day and currency, oldest first.
Show child attributes
Show child attributes
The window the read actually answered over, and what the plan did to it.
Every analytics read carries one. analytics_retention is a plan LIMIT and never a gate: asking for a year on a plan that keeps a month answers 200 over the month, with clamped true and from moved forward to the horizon — there is no 402 anywhere in this module.
Unlike the staff audit window, which only filters a read, this horizon is also enforced in storage: a nightly sweep deletes analytics past each organization's retention. So data beyond from is not merely hidden, and an upgrade recovers the horizon rather than the history.
Show child attributes
Show child attributes