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 MRR movement over time

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

Returns how MRR (monthly recurring revenue from plan base fees) changed, per day, or per month for 12m, with totals.

  • new: subscriptions activated in the bucket.
  • churned: subscriptions canceled in the bucket.
  • expansion and contraction: item adds, removals, and plan or quantity changes on subscriptions that were active for the whole window.

Only plans in the tenant’s default currency are counted; the currency is the currency of GET /v1/analytics/overview. Buckets with no movement are left out. 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.

MRR movement series and totals.

Media typeapplication/json
object
period
required
string
default: 30d
Allowed values: 7d 30d 90d 12m
data
required
Array<object>
object
date
required

Bucket start, YYYY-MM-DD (or YYYY-MM for 12m), in UTC.

string
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
totals
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"
}