Reports

6 operations. Every schema and example on this page is generated from the platform contract.

Read a store attendance report (daily breakdown + summary).

Merchant reads the gym attendance report for their store over a rolling window (default 30 days): a per-day breakdown of classes, bookings, attended, no-shows, cancellations and capacity utilisation, plus a rollup summary. Requires the can_view_reports staff permission.

Parameters

store_idstring · uuidqueryrequired

Store whose attendance report to read (also authorises the merchant).

daysintegerqueryoptional

DEPRECATED alias for a rolling window; prefer preset or start_date/end_date. Days back (default 30).

presetenumqueryoptional

Preset range (defaults per endpoint). Use "custom" with start_date and end_date for an arbitrary range.

todaylast_7dlast_14dlast_30dlast_90dlast_6mlast_12mcustom
start_datestringqueryoptional

Custom range start, store-local YYYY-MM-DD (inclusive). Required when preset is "custom".

end_datestringqueryoptional

Custom range end, store-local YYYY-MM-DD (inclusive). Required when preset is "custom".

Response, 200

reportarray of objectrequired
7 child fields
daystringrequired
total_classesnumberrequired
total_bookingsnumberrequired
total_attendednumberrequired
total_no_showsnumberrequired
total_cancellationsnumberrequired
capacity_utilization_pctnumberrequired
summaryobjectrequired
5 child fields
total_classesnumberrequired
total_bookingsnumberrequired
total_attendednumberrequired
total_no_showsnumberrequired
avg_capacity_pctnumberrequired
curl -G "https://www.membber.com/api/v1/reports/attendance" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  --data-urlencode "store_id=6659c139-0000-4000-8000-d0c500000066"
Response, 200
{
  "report": [
    {
      "day": "<day>",
      "total_classes": 1,
      "total_bookings": 1,
      "total_attended": 1,
      "total_no_shows": 1,
      "total_cancellations": 1,
      "capacity_utilization_pct": 1
    }
  ],
  "summary": {
    "total_classes": 1,
    "total_bookings": 1,
    "total_attended": 1,
    "total_no_shows": 1,
    "avg_capacity_pct": 1
  }
}

Read a store capacity utilisation heatmap.

Merchant reads the gym capacity utilisation heatmap for their store over a rolling window (default 30 days): one weekday bucket per day with the class-count-weighted average capacity utilisation and total classes. Requires the can_view_reports staff permission.

Parameters

store_idstring · uuidqueryrequired

Store whose capacity heatmap to read (also authorises the merchant).

daysintegerqueryoptional

DEPRECATED alias for a rolling window; prefer preset or start_date/end_date. Days back (default 30).

presetenumqueryoptional

Preset range (defaults per endpoint). Use "custom" with start_date and end_date for an arbitrary range.

todaylast_7dlast_14dlast_30dlast_90dlast_6mlast_12mcustom
start_datestringqueryoptional

Custom range start, store-local YYYY-MM-DD (inclusive). Required when preset is "custom".

end_datestringqueryoptional

Custom range end, store-local YYYY-MM-DD (inclusive). Required when preset is "custom".

Response, 200

heatmaparray of objectrequired
4 child fields
day_of_weeknumberrequired

Day of week, 0 = Sunday through 6 = Saturday.

hournumberrequired

Hour of day, 0 to 23 (currently always 0, weekday-level granularity).

avg_utilization_pctnumberrequired

Class-count-weighted average capacity utilisation for the bucket.

total_classesnumberrequired

Total classes counted in the bucket.

curl -G "https://www.membber.com/api/v1/reports/capacity" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  --data-urlencode "store_id=6659c139-0000-4000-8000-d0c500000066"
Response, 200
{
  "heatmap": [
    {
      "day_of_week": 1,
      "hour": 1,
      "avg_utilization_pct": 1,
      "total_classes": 1
    }
  ]
}

Read a store's membership churn and at-risk rollup.

Merchant reads the churn card for their gym/membership store: the churn rate percentage, the number of memberships cancelled in the last 30 days, the active count, and the at-risk breakdown (paused, frozen, past_due) whose sum is total_at_risk. Read-only rollup gated by can_view_reports.

Parameters

store_idstring · uuidqueryrequired

Store whose churn report to read (also authorises the merchant).

Response, 200

reportobjectrequired
7 child fields
churn_rate_pctnumberrequired
cancelled_30dnumberrequired
active_countnumberrequired
paused_countnumberrequired
frozen_countnumberrequired
past_due_countnumberrequired
total_at_risknumberrequired

paused + frozen + past_due.

curl -G "https://www.membber.com/api/v1/reports/churn" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  --data-urlencode "store_id=6659c139-0000-4000-8000-d0c500000066"
Response, 200
{
  "report": {
    "churn_rate_pct": 1,
    "cancelled_30d": 1,
    "active_count": 1,
    "paused_count": 1,
    "frozen_count": 1,
    "past_due_count": 1,
    "total_at_risk": 1
  }
}

Read a store class-popularity ranking.

Merchant reads the gym class-popularity ranking for their store over a rolling 30-day window: per class the occurrences, bookings, attendance, no-shows and no-show rate, average capacity utilisation and revenue, ordered by bookings (most booked first). Requires the can_view_reports staff permission.

auth merchant:readop getClassPopularityReportrate limitederrors

Parameters

store_idstring · uuidqueryrequired

Store whose class-popularity rankings to read (also authorises the merchant).

Response, 200

classesarray of objectrequired
10 child fields
class_idstringrequired

Gym class identifier.

class_namestringrequired

Class name.

categorystring, nullablerequired

Class category, or null if uncategorised.

occurrences_30dnumberrequired

Number of class occurrences in the last 30 days.

bookings_30dnumberrequired

Total bookings in the last 30 days.

attended_30dnumberrequired

Bookings marked attended in the last 30 days.

no_shows_30dnumberrequired

Bookings marked no-show in the last 30 days.

no_show_rate_pctnumberrequired

No-show rate as a percentage.

avg_capacity_pctnumberrequired

Average capacity utilisation as a percentage.

revenue_30d_pencenumberrequired

Revenue attributed to the class in the last 30 days, in pence.

curl -G "https://www.membber.com/api/v1/reports/class-popularity" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  --data-urlencode "store_id=6659c139-0000-4000-8000-d0c500000066"
Response, 200
{
  "classes": [
    {
      "class_id": "2945b542-0000-4000-8000-d0c500000029",
      "class_name": "<class_name>",
      "category": "<category>",
      "occurrences_30d": 1,
      "bookings_30d": 1,
      "attended_30d": 1,
      "no_shows_30d": 1,
      "no_show_rate_pct": 1,
      "avg_capacity_pct": 1,
      "revenue_30d_pence": 1500
    }
  ]
}

Member-retention cohort analysis for a store.

Merchant views membership retention grouped by join month. For each cohort (month a member joined) it reports how many joined, how many are still active, and the resulting retention percentage. Covers the trailing window of months (default 6), sorted oldest cohort first.

Parameters

store_idstring · uuidqueryrequired

Store whose retention to report (also authorises the merchant).

monthsintegerqueryoptional

How many months back to include join cohorts (default 6).

Response, 200

cohortsarray of objectrequired
4 child fields
cohort_monthstringrequired
total_joinednumberrequired
still_activenumberrequired
retention_pctnumberrequired
curl -G "https://www.membber.com/api/v1/reports/retention" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  --data-urlencode "store_id=6659c139-0000-4000-8000-d0c500000066"
Response, 200
{
  "cohorts": [
    {
      "cohort_month": "<cohort_month>",
      "total_joined": 1,
      "still_active": 1,
      "retention_pct": 1
    }
  ]
}

Read a store's revenue and MRR report.

Merchant reads their monthly recurring revenue snapshot: MRR (pence and pounds), active members, average revenue per member, new signups and cancellations over the last 30 days, past-due count, and projected annual revenue. Derived from the daily-refreshed membership metrics view. Requires the can_view_reports staff permission.

Parameters

store_idstring · uuidqueryrequired

Store whose revenue report to read (also authorises the merchant).

Response, 200

reportobjectrequired
8 child fields
mrr_pencenumberrequired
mrr_poundsstringrequired
active_membersnumberrequired
avg_revenue_per_member_pencenumberrequired
new_signups_30dnumberrequired
cancelled_30dnumberrequired
past_due_countnumberrequired
projected_annual_pencenumberrequired
curl -G "https://www.membber.com/api/v1/reports/revenue" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  --data-urlencode "store_id=6659c139-0000-4000-8000-d0c500000066"
Response, 200
{
  "report": {
    "mrr_pence": 1500,
    "mrr_pounds": "<mrr_pounds>",
    "active_members": 1,
    "avg_revenue_per_member_pence": 1500,
    "new_signups_30d": 1,
    "cancelled_30d": 1,
    "past_due_count": 1,
    "projected_annual_pence": 1500
  }
}
WhatsApp
Book a Call
Start Free