28 operations. Call each with POST https://app.chirply.io/api/v1/actions/<name> and a bearer token; the response is { "data": { "action", "summary", "result" } }. A read badge means the operation changes nothing; write requires the credential’s write scope.
Archive program
gym.archive_programwriteconfirm
Archive a program — it disappears from the schedule and program pickers across the app, though its classes, enrollments, belt ladder and history all remain and it can be restored later with gym.update_program. Asks for confirmation because members and staff stop seeing it immediately. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool gym_archive_program at https://app.chirply.io/api/mcp, same bearer token, same input.
Attendance
gym.attendance_reportread
The attendance overview: total check-ins and distinct members this calendar week (Sunday start) and this calendar month (totals in UTC), plus the going-quiet list the attendance screen and dashboard show — actively enrolled members with no check-in in more than 14 days, each with their last-seen date, days quiet, usual training cadence (check-ins per week over the 8 weeks before they stopped), belt, and a tier: 'quiet' (15–30 days silent, most saveable, listed first) or 'gone' (30+ days, or never seen despite being enrolled 30+ days). Sorted most-saveable first — these are the people worth a retention call before they cancel. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Parameters
Field
Type
Required
Description
program_id
string (uuid)
optional
Limit the going-quiet list to members of this program (totals stay gym-wide).
Over MCP the same operation is the tool gym_attendance_report at https://app.chirply.io/api/mcp, same bearer token, same input.
Check in
gym.check_in_memberwrite
Record that a member attended — the same thing the lobby kiosk does when they tap their name. Recorded with source 'api' and the class name snapshotted onto the record. If the member is already checked in to that class today, this reports success with an already-checked-in note instead of failing, so double-taps are harmless. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Parameters
Field
Type
Required
Description
contact_id
string (uuid)
required
The member (CRM contact) checking in.
class_id
string (uuid)
optional
The scheduled class they're attending. Omit for a free check-in (open mat, drop-in).
session_date
string
optional
The attendance date, YYYY-MM-DD. Defaults to today (UTC) — pass the gym's local date explicitly around midnight.
Over MCP the same operation is the tool gym_check_in_member at https://app.chirply.io/api/mcp, same bearer token, same input.
Class popularity
gym.class_popularityread
Check-ins per class over a trailing window (default 30 days), busiest first — each class with its total check-ins, distinct members, and program. The attendance screen's Classes tab. Deleted classes still appear under their snapshotted name, and free check-ins roll up as 'Open mat / general check-in'. Use it to spot which slots fill the room and which are dying. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Parameters
Field
Type
Required
Description
days
integer
optional
Trailing window in days to count check-ins over (1–365). Default 30. Default: 30
Over MCP the same operation is the tool gym_class_popularity at https://app.chirply.io/api/mcp, same bearer token, same input.
Add belt rank
gym.create_belt_rankwrite
Add one rank to a program's belt ladder. Minimums are advisory eligibility hints shown to instructors — they never hard-block a promotion. Appends to the end of the ladder unless a sort_order is given. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Parameters
Field
Type
Required
Description
program_id
string (uuid)
required
The program whose ladder this rank joins.
name
string
required
The rank's name, e.g. 'Blue' or 'Intermediate'.
color
string
required
Hex belt color shown as the swatch wherever the rank appears, e.g. '#1d4ed8'.
sort_order
integer
optional
Position on the ladder (0 = the first belt, worn on day one). Defaults to the end of the ladder.
min_classes
integer
optional
Classes a member should attend at the previous rank before showing as eligible for this one. Default: 0
min_months
number
optional
Minimum months at the previous rank before showing as eligible (fractions allowed). Default: 0
Over MCP the same operation is the tool gym_create_belt_rank at https://app.chirply.io/api/mcp, same bearer token, same input.
Add class
gym.create_classwrite
Add a recurring weekly class to the schedule — it repeats every week at its start time and appears on the schedule and the check-in kiosk immediately. Pass days_of_week to put the same class on several days at once ('Mon/Wed/Fri 6:30 PM'), exactly like the schedule editor's day checkboxes: one class row is created per day. day_of_week remains for a single day. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Parameters
Field
Type
Required
Description
name
string
required
The class name as it appears on the schedule, e.g. 'Fundamentals'.
day_of_week
integer
optional
One day of the week the class repeats on: 0 = Sunday, 1 = Monday … 6 = Saturday. Provide this OR days_of_week.
days_of_week
integer[]
optional
Days the class repeats on (0 = Sunday … 6 = Saturday); one class row is created per day, like ticking several day checkboxes in the schedule editor. Duplicates are ignored. Provide this OR day_of_week.
start_time
string
required
Start time in 24-hour HH:MM, e.g. '18:30' for 6:30 PM.
duration_mins
integer
optional
Length of the class in minutes. Default: 60
capacity
integer
optional
Max attendees, if the room caps out. Omit for unlimited.
instructor_name
string
optional
Who teaches it, e.g. 'Coach Ana'.
location
string
optional
Where it happens, e.g. 'Mat 2'.
program_id
string (uuid)
optional
The program this class belongs to (colors it on the schedule).
Over MCP the same operation is the tool gym_create_class at https://app.chirply.io/api/mcp, same bearer token, same input.
Add program
gym.create_programwrite
Create a training program. Optionally seed its belt ladder from a preset (BJJ adults/kids, Karate/TKD, or generic levels) so ranks with real class/time requirements exist immediately; without a preset the ladder starts empty and ranks are added one by one. Creates only records inside this account — nothing outward-facing. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Parameters
Field
Type
Required
Description
name
string
required
The program's name, e.g. 'Brazilian Jiu-Jitsu'.
description
string
optional
One or two plain sentences about the program.
color
string
optional
Hex color for the program's schedule blocks and chips, e.g. '#1d4ed8'. Defaults to blue.
Over MCP the same operation is the tool gym_create_program at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete belt rank
gym.delete_belt_rankwriteconfirm
Permanently delete a rank from a program's ladder. This cannot be undone. Members currently holding it are left with no rank (fix them with gym.update_enrollment), and past promotions to it keep their history but lose the rank name. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool gym_delete_belt_rank at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete class
gym.delete_classwriteconfirm
Permanently remove a class from the weekly schedule. This cannot be undone; members can no longer check in to it. Past check-ins keep the class name as a snapshot, so attendance history survives. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool gym_delete_class at https://app.chirply.io/api/mcp, same bearer token, same input.
Enroll member
gym.enroll_memberwrite
Enroll a CRM contact in a program as a training member. Unless a starting rank is given, they start at the first belt of the program's ladder (worn on day one). A contact can hold one enrollment per program; enrolling again returns a conflict rather than a duplicate. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Parameters
Field
Type
Required
Description
contact_id
string (uuid)
required
The CRM contact becoming a member.
program_id
string (uuid)
required
The program to enroll them in.
starting_rank_id
string (uuid)
optional
Belt rank they start at (must belong to the program) — for members joining with prior experience. Defaults to the ladder's first belt.
status
"active" | "paused" | "ended"
optional
Initial enrollment status. Defaults to 'active'. Default: "active"
Over MCP the same operation is the tool gym_enroll_member at https://app.chirply.io/api/mcp, same bearer token, same input.
Kiosk link
gym.get_kiosk_linkread
Get the check-in kiosk URL for the lobby tablet. TREAT IT LIKE A KEY: anyone holding this link can open the kiosk with no login and check any member in (or see the member roster the kiosk shows). Links stay valid until rotated with gym.rotate_kiosk_link. Creates the gym's settings row on first use. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Over MCP the same operation is the tool gym_get_kiosk_link at https://app.chirply.io/api/mcp, same bearer token, same input.
Belt ladder
gym.list_belt_ranksread
List belt ranks in ladder order (lowest first), each with its color and the class/time-in-grade minimums required to earn it from the rank before. Filter to one program to see that program's ladder. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Over MCP the same operation is the tool gym_list_belt_ranks at https://app.chirply.io/api/mcp, same bearer token, same input.
Attendance log
gym.list_checkinsread
List check-ins, newest first — who attended, which class (name preserved even if the class was later deleted), the date, and whether it came from the kiosk, staff, or the API. Filter by member, class, a date range, or a free-text member search (name, business, or email — the attendance log's own search box). Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Parameters
Field
Type
Required
Description
limit
integer
optional
Max rows to return (1–100). Default: 25
offset
integer
optional
Rows to skip. Default: 0
contact_id
string (uuid)
optional
Only this member's check-ins.
class_id
string (uuid)
optional
Only check-ins to this class.
date_from
string
optional
Only check-ins on or after this date (YYYY-MM-DD).
date_to
string
optional
Only check-ins on or before this date (YYYY-MM-DD).
search
string
optional
Free-text member filter, matched the way the attendance log's search box matches: contains-match on first name, last name, business name, or email. Ignored when contact_id is given (an exact member pin wins over a fuzzy search).
Over MCP the same operation is the tool gym_list_checkins at https://app.chirply.io/api/mcp, same bearer token, same input.
Schedule
gym.list_classesread
The weekly recurring class schedule, ordered by day then start time — each class with its day of week (0 = Sunday … 6 = Saturday), start time, duration, instructor, location, capacity, and program. These are recurring weekly slots, not calendar events. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Parameters
Field
Type
Required
Description
limit
integer
optional
Max rows to return (1–100). Default: 25
offset
integer
optional
Rows to skip. Default: 0
program_id
string (uuid)
optional
Only classes belonging to this program.
day_of_week
integer
optional
Day of the week the class repeats on: 0 = Sunday, 1 = Monday … 6 = Saturday.
include_inactive
boolean
optional
Also return classes removed from the live schedule. Default: false
Over MCP the same operation is the tool gym_list_classes at https://app.chirply.io/api/mcp, same bearer token, same input.
Members & Belts
gym.list_membersread
List the gym's members — each enrollment with the member's name and contact details, the program, their current belt rank and stripes, and status. Filter by program, enrollment status, current rank, or a free-text name query (same matching as the kiosk's member search). Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Parameters
Field
Type
Required
Description
limit
integer
optional
Max rows to return (1–100). Default: 25
offset
integer
optional
Rows to skip. Default: 0
program_id
string (uuid)
optional
Only members enrolled in this program.
status
"active" | "paused" | "ended"
optional
Only enrollments in this status: 'active' (training), 'paused' (on hold), or 'ended'.
rank_id
string (uuid)
optional
Only members currently holding this belt rank.
contact_id
string (uuid)
optional
Only this member's enrollments.
query
string
optional
Free-text member search, matched like the kiosk's name search: 'sar jo' finds Sarah Jones (first + last in either order), a single word matches inside any name part, and the whole term matches inside a business name. Minimum 2 characters.
Over MCP the same operation is the tool gym_list_members at https://app.chirply.io/api/mcp, same bearer token, same input.
Programs
gym.list_programsread
List the gym's training programs (BJJ, Muay Thai, Kids Karate…) with their colors and active/archived state. Archived programs are included only when requested. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Parameters
Field
Type
Required
Description
limit
integer
optional
Max rows to return (1–100). Default: 25
offset
integer
optional
Rows to skip. Default: 0
include_archived
boolean
optional
Also return archived programs (hidden from schedules). Default: false
Over MCP the same operation is the tool gym_list_programs at https://app.chirply.io/api/mcp, same bearer token, same input.
Promotion history
gym.list_promotionsread
The append-only promotion history — who was awarded which belt or stripe, when, by whom, and any grading notes. Newest first. Filter by member or program. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Over MCP the same operation is the tool gym_list_promotions at https://app.chirply.io/api/mcp, same bearer token, same input.
Member attendance
gym.member_attendance_summaryread
One member's attendance shape — the drill-in panel on the attendance screen: check-ins per month over the last 12 months (quiet months included as zeros), their current consecutive-week training streak (a week counts with at least one visit; the current unfinished week doesn't break it), total visits in the last 90 days, and the date they were last seen. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Parameters
Field
Type
Required
Description
contact_id
string (uuid)
required
The member (CRM contact) whose attendance to read.
Over MCP the same operation is the tool gym_member_attendance_summary at https://app.chirply.io/api/mcp, same bearer token, same input.
Promote member
gym.promote_memberwriteconfirm
Award a member a new belt rank, or add a stripe to their current belt. Writes a PERMANENT promotion record to the member's history (visible on their belt card forever) and updates their enrollment. Promoting to a new belt resets stripes to 0. Asks for confirmation because promotion history is append-only — a mistaken award stays in the record. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
enrollment_id
string (uuid)
optional
The enrollment being promoted (from gym.list_members). Or identify it by contact_id + program_id.
contact_id
string (uuid)
optional
The member's contact id — use together with program_id when enrollment_id isn't known.
program_id
string (uuid)
optional
The program the promotion is in — use together with contact_id.
to_rank_id
string (uuid)
optional
The rank being awarded (must belong to the same program). Provide this OR add_stripe, not both.
add_stripe
boolean
optional
true adds one stripe to the member's current belt instead of changing rank. Provide this OR to_rank_id, not both.
notes
string
optional
Note recorded on the promotion, e.g. 'Promoted at winter grading'.
Over MCP the same operation is the tool gym_promote_member at https://app.chirply.io/api/mcp, same bearer token, same input.
Ready for promotion
gym.promotion_eligibilityread
List active members who meet the next rank's minimums — enough classes attended since their last promotion AND enough months at their current rank, per the next rank's min_classes/min_months. Advisory only (the instructor always decides); members whose ladder has no higher rank are skipped. Scans up to `limit` active enrollments per call. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Parameters
Field
Type
Required
Description
program_id
string (uuid)
optional
Only check members in this program.
limit
integer
optional
Active enrollments to evaluate in this call (1–500). Page with offset if the gym is larger. Default: 200
Over MCP the same operation is the tool gym_promotion_eligibility at https://app.chirply.io/api/mcp, same bearer token, same input.
Reorder belt ladder
gym.reorder_belt_rankswrite
Rewrite the order of a program's ENTIRE belt ladder in one action — the same whole-ladder reorder the Members & Belts screen's arrows perform. Pass every rank id in the program, lowest (day-one) belt first; each rank's sort_order is set to its position in the list. Members keep their current ranks — only the ladder's order changes, which changes what counts as each member's NEXT rank for promotion eligibility. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Parameters
Field
Type
Required
Description
program_id
string (uuid)
required
The program whose ladder to reorder.
rank_ids
array of (string (uuid))
required
Every belt-rank id in the program's ladder, in the new order — lowest belt first. Must name each of the program's ranks exactly once (fetch the current ladder with gym.list_belt_ranks).
Over MCP the same operation is the tool gym_reorder_belt_ranks at https://app.chirply.io/api/mcp, same bearer token, same input.
Disconnect all tablets
gym.rotate_kiosk_linkwriteconfirm
Rotate the kiosk link: revoke every kiosk link ever issued and mint a fresh one — the 'lost or stolen tablet' action (the kiosk screen's 'Disconnect all tablets' button). EVERY tablet currently running the kiosk disconnects immediately and stays down until someone opens the new link on it, so check-ins stop until the tablets are re-set-up. Asks for confirmation for exactly that reason. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool gym_rotate_kiosk_link at https://app.chirply.io/api/mcp, same bearer token, same input.
Load a sample week
gym.seed_sample_schedulewrite
One-click starter timetable for an EMPTY schedule — the schedule screen's 'Load a sample week' button. Creates three programs (Brazilian Jiu-Jitsu, Striking, Kids Martial Arts — existing programs with those names are reused, not duplicated) and a realistic Mon–Sat starter timetable (ten recurring classes, one row per day they run) the gym edits into their own. Refuses if the gym already has ANY classes, so it can never double up or overwrite a real schedule. Creates only records inside this account — nothing outward-facing. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Over MCP the same operation is the tool gym_seed_sample_schedule at https://app.chirply.io/api/mcp, same bearer token, same input.
Edit belt rank
gym.update_belt_rankwrite
Update a belt rank's name, color, ladder position, or eligibility minimums. Omitted fields are left alone. Members already holding the rank keep it — only the rank's own definition changes. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Over MCP the same operation is the tool gym_update_belt_rank at https://app.chirply.io/api/mcp, same bearer token, same input.
Edit class
gym.update_classwrite
Update a scheduled class — move it to a different day or time, change its duration, instructor, location, capacity, or program, or toggle it off the live schedule with is_active. Omitted fields are left alone. Past check-ins are unaffected. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The class to edit.
name
string
optional
New class name.
day_of_week
integer
optional
Day of the week the class repeats on: 0 = Sunday, 1 = Monday … 6 = Saturday.
start_time
string
optional
New start time in 24-hour HH:MM.
duration_mins
integer
optional
New length in minutes.
capacity
integer (or null)
optional
New max attendees; null removes the cap.
instructor_name
string (or null)
optional
New instructor; null clears it.
location
string (or null)
optional
New location; null clears it.
program_id
string (uuid) (or null)
optional
Reassign to a program; null detaches it.
is_active
boolean
optional
false hides the class from the live schedule without deleting it.
Over MCP the same operation is the tool gym_update_class at https://app.chirply.io/api/mcp, same bearer token, same input.
Edit enrollment
gym.update_enrollmentwrite
Correct an enrollment: pause, resume or end a membership, or fix the recorded rank/stripes when they're wrong. This is the corrections path — it does NOT write a promotion record; award an earned rank with gym.promote_member so the member's history stays true. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The enrollment to edit (from gym.list_members).
status
"active" | "paused" | "ended"
optional
New status: 'active' (training), 'paused' (membership on hold), or 'ended'.
current_rank_id
string (uuid) (or null)
optional
Corrected rank (must belong to the enrollment's program); null clears it.
Over MCP the same operation is the tool gym_update_enrollment at https://app.chirply.io/api/mcp, same bearer token, same input.
Edit program
gym.update_programwrite
Update a program's name, description, color, sort order, or active state. Omitted fields are left alone. Setting is_active to true restores a previously archived program. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The program to edit.
name
string
optional
New program name.
description
string (or null)
optional
New description; null clears it.
color
string
optional
New hex color for schedule blocks and chips.
sort_order
integer
optional
Position in program listings (0 = first).
is_active
boolean
optional
true restores an archived program; false archives it (prefer gym.archive_program for that).
Over MCP the same operation is the tool gym_update_program at https://app.chirply.io/api/mcp, same bearer token, same input.
Kiosk welcome message
gym.update_settingswrite
Set or clear the welcome message shown at the top of the lobby check-in kiosk (for example 'Welcome to Apex Martial Arts — tap below to check in'). Takes effect the next time a kiosk screen refreshes; changes nothing else about the kiosk or its link. Requires the Martial Arts Gym app (a one-time purchase from the App Marketplace) to be installed in this account; without it the call returns 403 app_required.
Parameters
Field
Type
Required
Description
kiosk_welcome
string (or null)
required
The message members see on the kiosk idle screen. Pass null (or an empty string) to clear it and show only the gym's name.