Get revenue summary

GET/api/v1/revenue/summary

Headline subscription metrics from the Stripe sync: current MRR and ARR, active subscriptions, paying customers, and the last 12 monthly MRR snapshots. Amounts are in minor units (pence, cents). Returns connected: false when Stripe is not connected.

Example request

curl "https://crowdstack.org/api/v1/revenue/summary" \
  -H "Authorization: Bearer $CROWDSTACK_API_KEY"

Example response

{
  "connected": true,
  "mode": "live",
  "lastSyncAt": "2026-09-15T04:00:00.000Z",
  "mrrCents": 1240000,
  "arrCents": 14880000,
  "activeSubscriptions": 61,
  "customerCount": 58,
  "history": [
    {
      "date": "2026-08-01",
      "mrrCents": 1180000,
      "activeSubscriptions": 58,
      "customerCount": 55
    }
  ]
}

List revenue customers

GET/api/v1/revenue/customers

Stripe customers synced into the workspace, highest MRR first, with the CRM contact each is matched to. Filter by name or email, or by linked contact.

Query parameters

ParameterTypeDescription
qstringMatches the customer name or email.
contactIdstring
payingtrue | falsetrue for customers with MRR above zero.
limitnumberPage size, 1 to 100. Default 50.
cursorstringThe nextCursor from the previous page.

Example request

curl "https://crowdstack.org/api/v1/revenue/customers?paying=true" \
  -H "Authorization: Bearer $CROWDSTACK_API_KEY"

Example response

{
  "customers": [
    {
      "id": "cmf3k2x9a0170abcd",
      "stripeCustomerId": "cus_ABC123",
      "name": "Acme",
      "email": "billing@acme.com",
      "currency": "gbp",
      "mrrCents": 49900,
      "contact": {
        "id": "cmf3k2x9a0001abcd",
        "firstName": "Jane",
        "lastName": "Doe",
        "email": "jane@acme.com"
      },
      "createdAt": "2026-06-01T09:00:00.000Z",
      "updatedAt": "2026-09-15T04:00:00.000Z"
    }
  ],
  "nextCursor": null
}

Get a revenue customer

GET/api/v1/revenue/customers/:id

One Stripe customer with their subscriptions and the last 24 invoices.

Responses

StatusMeaning
404No revenue customer with that id.

Example request

curl "https://crowdstack.org/api/v1/revenue/customers/cmf3k2x9a0001abcd" \
  -H "Authorization: Bearer $CROWDSTACK_API_KEY"

Example response

{
  "customer": {
    "id": "cmf3k2x9a0170abcd",
    "stripeCustomerId": "cus_ABC123",
    "name": "Acme",
    "email": "billing@acme.com",
    "currency": "gbp",
    "mrrCents": 49900,
    "contact": {
      "id": "cmf3k2x9a0001abcd",
      "firstName": "Jane",
      "lastName": "Doe",
      "email": "jane@acme.com"
    },
    "createdAt": "2026-06-01T09:00:00.000Z",
    "updatedAt": "2026-09-15T04:00:00.000Z",
    "subscriptions": [
      {
        "id": "cmf3k2x9a0180abcd",
        "stripeSubscriptionId": "sub_ABC",
        "status": "active",
        "productName": "Growth",
        "priceNickname": "Monthly",
        "interval": "month",
        "quantity": 1,
        "mrrCents": 49900,
        "currency": "gbp",
        "currentPeriodEnd": "2026-10-01T00:00:00.000Z",
        "cancelAtPeriodEnd": false,
        "startDate": "2026-06-01T00:00:00.000Z",
        "canceledAt": null
      }
    ],
    "invoices": [
      {
        "id": "cmf3k2x9a0190abcd",
        "number": "INV-0042",
        "status": "paid",
        "totalCents": 49900,
        "amountPaidCents": 49900,
        "amountDueCents": 0,
        "currency": "gbp",
        "issuedAt": "2026-09-01T00:00:00.000Z",
        "paidAt": "2026-09-01T00:05:00.000Z"
      }
    ]
  }
}