← All action domains

Gym

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.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe program to archive.

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.archive_program \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

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

FieldTypeRequiredDescription
program_idstring (uuid)optionalLimit the going-quiet list to members of this program (totals stay gym-wide).

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.attendance_report \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

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

FieldTypeRequiredDescription
contact_idstring (uuid)requiredThe member (CRM contact) checking in.
class_idstring (uuid)optionalThe scheduled class they're attending. Omit for a free check-in (open mat, drop-in).
session_datestringoptionalThe attendance date, YYYY-MM-DD. Defaults to today (UTC) — pass the gym's local date explicitly around midnight.

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.check_in_member \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "contact_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

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

FieldTypeRequiredDescription
daysintegeroptionalTrailing window in days to count check-ins over (1–365). Default 30. Default: 30

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.class_popularity \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "days": 30
  }'
Test with your API key

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

FieldTypeRequiredDescription
program_idstring (uuid)requiredThe program whose ladder this rank joins.
namestringrequiredThe rank's name, e.g. 'Blue' or 'Intermediate'.
colorstringrequiredHex belt color shown as the swatch wherever the rank appears, e.g. '#1d4ed8'.
sort_orderintegeroptionalPosition on the ladder (0 = the first belt, worn on day one). Defaults to the end of the ladder.
min_classesintegeroptionalClasses a member should attend at the previous rank before showing as eligible for this one. Default: 0
min_monthsnumberoptionalMinimum months at the previous rank before showing as eligible (fractions allowed). Default: 0

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.create_belt_rank \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "name": "Example",
    "color": "example"
  }'
Test with your API key

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

FieldTypeRequiredDescription
namestringrequiredThe class name as it appears on the schedule, e.g. 'Fundamentals'.
day_of_weekintegeroptionalOne day of the week the class repeats on: 0 = Sunday, 1 = Monday … 6 = Saturday. Provide this OR days_of_week.
days_of_weekinteger[]optionalDays 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_timestringrequiredStart time in 24-hour HH:MM, e.g. '18:30' for 6:30 PM.
duration_minsintegeroptionalLength of the class in minutes. Default: 60
capacityintegeroptionalMax attendees, if the room caps out. Omit for unlimited.
instructor_namestringoptionalWho teaches it, e.g. 'Coach Ana'.
locationstringoptionalWhere it happens, e.g. 'Mat 2'.
program_idstring (uuid)optionalThe program this class belongs to (colors it on the schedule).

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.create_class \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Example",
    "start_time": "example"
  }'
Test with your API key

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

FieldTypeRequiredDescription
namestringrequiredThe program's name, e.g. 'Brazilian Jiu-Jitsu'.
descriptionstringoptionalOne or two plain sentences about the program.
colorstringoptionalHex color for the program's schedule blocks and chips, e.g. '#1d4ed8'. Defaults to blue.
belt_preset"bjj-adults" | "bjj-kids" | "karate-tkd" | "generic-levels"optionalSeed the belt ladder from a preset: 'bjj-adults' (BJJ (Adults) — 5 belts), 'bjj-kids' (BJJ (Kids) — 5 belts), 'karate-tkd' (Karate / TKD — 9 belts), 'generic-levels' (Generic levels — 4 belts). Omit to start with no ranks.

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.create_program \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Example"
  }'
Test with your API key

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.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe rank to delete.

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.delete_belt_rank \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

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.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe class to delete.

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.delete_class \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

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

FieldTypeRequiredDescription
contact_idstring (uuid)requiredThe CRM contact becoming a member.
program_idstring (uuid)requiredThe program to enroll them in.
starting_rank_idstring (uuid)optionalBelt 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"optionalInitial enrollment status. Defaults to 'active'. Default: "active"

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.enroll_member \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "contact_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool gym_enroll_member 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.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
program_idstring (uuid)optionalOnly ranks in this program's ladder.

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.list_belt_ranks \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 25,
    "offset": 0
  }'
Test with your API key

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

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
contact_idstring (uuid)optionalOnly this member's check-ins.
class_idstring (uuid)optionalOnly check-ins to this class.
date_fromstringoptionalOnly check-ins on or after this date (YYYY-MM-DD).
date_tostringoptionalOnly check-ins on or before this date (YYYY-MM-DD).
searchstringoptionalFree-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).

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.list_checkins \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 25,
    "offset": 0
  }'
Test with your API key

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

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
program_idstring (uuid)optionalOnly classes belonging to this program.
day_of_weekintegeroptionalDay of the week the class repeats on: 0 = Sunday, 1 = Monday … 6 = Saturday.
include_inactivebooleanoptionalAlso return classes removed from the live schedule. Default: false

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.list_classes \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 25,
    "offset": 0
  }'
Test with your API key

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

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
program_idstring (uuid)optionalOnly members enrolled in this program.
status"active" | "paused" | "ended"optionalOnly enrollments in this status: 'active' (training), 'paused' (on hold), or 'ended'.
rank_idstring (uuid)optionalOnly members currently holding this belt rank.
contact_idstring (uuid)optionalOnly this member's enrollments.
querystringoptionalFree-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.

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.list_members \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 25,
    "offset": 0
  }'
Test with your API key

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

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
include_archivedbooleanoptionalAlso return archived programs (hidden from schedules). Default: false
querystringoptionalText to match in the program name or description.

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.list_programs \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 25,
    "offset": 0
  }'
Test with your API key

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.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
contact_idstring (uuid)optionalOnly this member's promotions.
program_idstring (uuid)optionalOnly promotions in this program.

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.list_promotions \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 25,
    "offset": 0
  }'
Test with your API key

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

FieldTypeRequiredDescription
contact_idstring (uuid)requiredThe member (CRM contact) whose attendance to read.

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.member_attendance_summary \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "contact_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

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

FieldTypeRequiredDescription
enrollment_idstring (uuid)optionalThe enrollment being promoted (from gym.list_members). Or identify it by contact_id + program_id.
contact_idstring (uuid)optionalThe member's contact id — use together with program_id when enrollment_id isn't known.
program_idstring (uuid)optionalThe program the promotion is in — use together with contact_id.
to_rank_idstring (uuid)optionalThe rank being awarded (must belong to the same program). Provide this OR add_stripe, not both.
add_stripebooleanoptionaltrue adds one stripe to the member's current belt instead of changing rank. Provide this OR to_rank_id, not both.
notesstringoptionalNote recorded on the promotion, e.g. 'Promoted at winter grading'.

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.promote_member \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "enrollment_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "contact_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

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

FieldTypeRequiredDescription
program_idstring (uuid)optionalOnly check members in this program.
limitintegeroptionalActive enrollments to evaluate in this call (1–500). Page with offset if the gym is larger. Default: 200
offsetintegeroptionalEnrollments to skip, for paging. Default: 0

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.promotion_eligibility \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "limit": 200
  }'
Test with your API key

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

FieldTypeRequiredDescription
program_idstring (uuid)requiredThe program whose ladder to reorder.
rank_idsarray of (string (uuid))requiredEvery 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).

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.reorder_belt_ranks \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "rank_ids": [
      "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
    ]
  }'
Test with your API key

Over MCP the same operation is the tool gym_reorder_belt_ranks 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.

Parameters

No parameters — POST an empty body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.seed_sample_schedule \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
Test with your API key

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.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe rank to edit.
namestringoptionalNew rank name.
colorstringoptionalNew hex belt color.
sort_orderintegeroptionalNew ladder position (0 = first belt).
min_classesintegeroptionalNew class minimum to earn this rank.
min_monthsnumberoptionalNew months-at-previous-rank minimum.

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.update_belt_rank \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

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

FieldTypeRequiredDescription
idstring (uuid)requiredThe class to edit.
namestringoptionalNew class name.
day_of_weekintegeroptionalDay of the week the class repeats on: 0 = Sunday, 1 = Monday … 6 = Saturday.
start_timestringoptionalNew start time in 24-hour HH:MM.
duration_minsintegeroptionalNew length in minutes.
capacityinteger (or null)optionalNew max attendees; null removes the cap.
instructor_namestring (or null)optionalNew instructor; null clears it.
locationstring (or null)optionalNew location; null clears it.
program_idstring (uuid) (or null)optionalReassign to a program; null detaches it.
is_activebooleanoptionalfalse hides the class from the live schedule without deleting it.

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.update_class \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

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

FieldTypeRequiredDescription
idstring (uuid)requiredThe enrollment to edit (from gym.list_members).
status"active" | "paused" | "ended"optionalNew status: 'active' (training), 'paused' (membership on hold), or 'ended'.
current_rank_idstring (uuid) (or null)optionalCorrected rank (must belong to the enrollment's program); null clears it.
stripesintegeroptionalCorrected stripe count on the current belt.

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.update_enrollment \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

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

FieldTypeRequiredDescription
idstring (uuid)requiredThe program to edit.
namestringoptionalNew program name.
descriptionstring (or null)optionalNew description; null clears it.
colorstringoptionalNew hex color for schedule blocks and chips.
sort_orderintegeroptionalPosition in program listings (0 = first).
is_activebooleanoptionaltrue restores an archived program; false archives it (prefer gym.archive_program for that).

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.update_program \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

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

FieldTypeRequiredDescription
kiosk_welcomestring (or null)requiredThe message members see on the kiosk idle screen. Pass null (or an empty string) to clear it and show only the gym's name.

Example

curl -X POST https://app.chirply.io/api/v1/actions/gym.update_settings \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "kiosk_welcome": "example"
  }'
Test with your API key

Over MCP the same operation is the tool gym_update_settings at https://app.chirply.io/api/mcp, same bearer token, same input.

The machine-readable version of this page is GET https://app.chirply.io/api/v1/actions?domain=gym — same operations, with full JSON Schemas. Authentication, errors and rate limits are covered in the API documentation home.