add_membership
ChatGPTGives someone who is already a member of the gym a new membership on one of its plans, found by their email, as the New membership button on their profile does. It only adds: the member's other memberships and their auto-renewal stay as they are, so replacing or cancelling one is done in CrossHero. Runs as a preview by default: it says what would be added, or why not, without writing anything. Show it, get the user's go-ahead, then call again with dry_run=false and the same arguments. Plans and payment methods are named as list_plans and get_gym_setup show them; only offline payment methods (cash, bank transfer, direct debit...) can be set here. An email that is not a member of this gym is refused: to add new people, use import_members.
cancel_class
ChatGPTCancels one scheduled class, found by class_id or by date, start time and program. Every member booked on it is notified by CrossHero (email, push or WhatsApp, as each has chosen) and their bookings are dropped; on a gym with a booking partner such as Gympass connected, the session is withdrawn there too. Not reversible from here. Before calling: get the class (get_class), tell the user which class it is and how many bookings it holds, and have them confirm. Only a class that has not started yet. The timetable it comes from is untouched, so the class runs again the next week; to change the timetable itself use the settings tools.
create_announcement
ChatGPTPublishes an announcement every member of the gym reads in the CrossHero app between start_date and end_date: a closure, a schedule change, an event. With notify_members its subject also goes out as a push notification to the members who have the app, once. Before calling, show the user the subject, the text, the dates and whether members get a push, and have them confirm.
create_plan
ChatGPTCreates a plan members are put on: a price per billing period and one or more credits, each allowing N bookings per period on a set of programs. Programs must exist first (get_gym_setup lists them). Memberships are added to members in CrossHero afterwards. On a gym with an accounting integration such as Contífico connected, the plan is synced there as a product.
create_program
ChatGPTCreates a program: an activity the gym offers (CrossFit, Yoga, Open Box...). Classes, plans and workouts all belong to a program, so a new gym starts here. Booking windows and limits are optional and default to CrossHero's; they apply to every class of the program unless a timetable entry overrides them in CrossHero. On a gym with a booking partner such as Gympass connected, the program is synced to the partner.
create_recurring_class
ChatGPTAdds a recurring class to the timetable: one program at one time slot on the weekdays given, from which CrossHero generates the bookable classes day by day. One call per time slot (a 07:00 and an 18:00 class are two entries); several weekdays go in one call. Refused when the program already has an entry at that start time on one of those days.
create_workout
ChatGPTCreates the workout for one date in one program, with its ordered parts. Fails if a workout already exists on that date unless replace is true. Content is Markdown in the coach's language; movement names for weightlifting/gymnastics/benchmark parts must match search_movements. To program a week, call it once per day.
delete_workout
ChatGPTDeletes a workout, found by workout_id or by date and program. Refuses when athletes have already logged scores on it. Ask the coach to confirm before calling this.
finish_onboarding
ChatGPTCloses the setup interview: records how it went for the gym owner (rating 1-5), what they still need to get going and what they chose to leave for later, in their own words, and a date to pick the setup up again. It does not finish the welcome wizard: steps still pending stay on its checklist in CrossHero. Call it once, at the end, after asking; record only what the owner actually said and leave out what they declined to answer. Calling it again updates the report.
get_active_athletes_by_month
ChatGPTThe Active customers report: active members at the end of each month for the years asked (default: this year and the previous one), with the lowest, highest and average month. Members who come through a booking partner such as Gympass are excluded, as on the page. Read from the last daily snapshot of each month; a month without a snapshot, or whose snapshot counted no members, is left out as a gap, as on the page.
get_attendance_summary
ChatGPTThe Customer attendances report: reservations, attendances, no-shows and the attendance rate over a period (the current quarter by default; period=month|quarter|year, or explicit dates), with the number of members and the split by day of week. Filter by program, plan (the plan of the membership each class was booked with) and gender (the member's profile; "unspecified" for profiles without one). Staff and coaches are left out unless only_clients=false. Totals only: the ranking of members is on the report page linked in the answer, with the same filters. At most 731 days.
get_billing_summary
ChatGPTTotals for one month, as the invoices page counts them: an invoice belongs to the month it was paid in, or, while unpaid, to the month it is dated. The total is broken down by payment method and by status (paid, unpaid...). Also what the dashboard reports as collected (paid invoices, point-of-sale and store orders) against the previous month: to date for the current month, the whole month for a finished one. Optional filters by status, payment method and payment date narrow the invoice totals only. Defaults to the current month. Never lists the members behind the invoices.
get_class
ChatGPTReturns one scheduled class with its coach, program, room, reservations against capacity, waiting list, no-shows and whether booking is open. Counts only, never the athletes' names. Find it by class_id, or by date plus start time (and program_id when several programs run at that time). Missing scheduled classes are created from the recurring timetable within the booking horizon, and are published to the gym's connected booking partners (e.g. Gympass) when it has any.
get_class_occupancy
ChatGPTThe Class attendance report: reservations against offered slots as an occupancy percentage over a period (the current quarter by default; period=month|quarter|year, or explicit dates), compared with the same stretch of the previous period. Across all programs it gives classes, slots, reservations and occupancy per program and the highest and lowest; with program_id it breaks one program down by weekday and time slot and by month. Counts only. At most 731 days.
get_coach_activity
ChatGPTThe Coaches report: per coach, classes taught and cancelled, cancellation rate, attendances and occupancy over a date range. With coach_id ("me" allowed) it lists that coach's classes one by one instead, with reservations, attendances and occupancy each. Ratings appear when the gym runs post-class surveys. Defaults to the current month; at most 92 days, and 200 classes when listing one coach's.
get_dashboard_stats
ChatGPTThe numbers on the admin dashboard, as of today: active and inactive members, active memberships and their change against 30 days ago, billing so far this month against the previous month and today, today's reservations against capacity per program, how many memberships expire this week and the next class. Member counts come from a daily snapshot and can be a day behind.
get_demographics
ChatGPTThe Customer profile report: active members by gender (female, male, other, unspecified) and by age band (under 18, 18-24, 25-34, 35-44, 45-54, 55+, unspecified), each with average attendances per member per month over the period, the share at risk today (7-31 days without booking or checking in) and, of those whose membership ended in the period (drop-in plans aside), the share with no current membership today, counted as get_non_renewals_summary counts it. The current quarter by default (period=month|quarter|year, or explicit dates). Filter by program and by plans (a gym with several sites often names the site in the plan). Aggregates only: a group of fewer than 5 people shows its size but not its figures, and the answer never says who is in a group; no figures are shared when the selection, or what separates it from the same query with fewer filters, is that small. Also reports how many members have no gender or birthdate on their profile. At most 731 days.
get_gym_setup
ChatGPTReturns the gym's setup status: the welcome steps (programs, timetable, plans, memberships, workouts, app) and whether each is done, the counts behind them, every program with its id, colour and booking settings, whether workouts are enabled, the rooms or sites for gyms that use them, where the gym is (country, city, time zone, currency and the language its members see), the online payment gateways it has connected and the ones its country allows, and what the owner said when a previous setup interview ended (rating, what they still needed, when to pick it up again). Call it first when asked to set the gym up or to change its configuration, and again after a step to confirm it is done.
get_my_score_history
ChatGPTEvery score the connected user logged for one movement or benchmark, newest first, always including their PR: the score, RX/RX+/Scaled and the date. For a lift it adds the estimated one-rep max and its 95%-55% loads (as the scores page shows them), which is what to base a load recommendation on; for a benchmark, its definition. Name the movement, or pass a score_id from list_my_personal_records. 10 scores by default, at most 50.
get_no_shows_summary
ChatGPTThe No-shows report: reservations marked as no-show over a period (the current quarter by default; period=month|quarter|year, or explicit dates), as a total, per program and per month. Counts only; the report page linked in the answer lists each one. Filter by program. At most 731 days.
get_non_renewals_summary
ChatGPTThe Didn't renew report: memberships whose end date falls in a period (the current month by default; period=month|quarter|year, or explicit dates) and that expired or were cancelled, per plan, with how many of those people have not renewed (no active, pending or paused membership today). Counts of people only; the names are on the report page linked in the answer. Drop-in plans are counted apart from regular plans. Filter by plan. At most 731 days.
get_retention_summary
ChatGPTThe Customers at risk report, as of today: how many active members have gone 7 to 31 days without booking or checking in, split into low (7-10 days), moderate (11-15) and high (16-31) risk, against the number of active members. Counts only; the names are on the report page linked in the answer. Excludes staff, paused memberships and Gympass-only members, as the page does.
get_sales_by_plan
ChatGPTPaid membership invoices between two dates, as the Plans report shows them: amount and invoice count per plan, the total per month, and the best, worst and average month among the completed ones. Defaults to the last three months, including the current one. Excludes Gympass. At most 731 days.
get_workout
ChatGPTReturns the workout programmed for one date, with every part (warm-up, strength, metcon...) as Markdown. Defaults to today in the gym's time zone. A gym can run several programs, each with its own session that day: pass program_id for one of them, or omit it to get every program's session for that date.
import_members
ChatGPTAdds members to the gym, each with the membership it names, from the details the user gives you (a spreadsheet, a list). Up to 200 rows per call. Runs as a preview by default: it says what each row would become (new member, already a member here, invited because the email belongs to someone at another gym, or rejected and why) without writing anything. Show the preview, get the user's go-ahead, then call again with dry_run=false and the same rows. Plans and payment methods are named as list_plans and get_gym_setup show them. Welcome emails are not sent unless asked for. The answer never repeats the rows' details.
list_announcements
ChatGPTLists the gym's announcements (news members read in the app, optionally pushed to their phones), newest first, with their dates, whether each one is running, scheduled or over, whether its push was sent, and its text as Markdown, plus the ids update_announcement takes.
list_classes
ChatGPTLists the scheduled classes (sessions athletes book) between two dates, in time order, with coach, program, room, reservations against capacity and waiting list size. Counts only, never the athletes' names. Defaults to today. Filter by program, and by coach with coach_id ("me" for the connected user's own classes). Users without permission to see other coaches' classes get their own. At most 31 days and 200 classes per call. Missing scheduled classes are created from the recurring timetable within the booking horizon, and are published to the gym's connected booking partners (e.g. Gympass) when it has any.
list_component_types
ChatGPTLists the part types a workout can be built from (warm-up, skill, weightlifting, gymnastics, benchmark metcon, custom metcon, not scorable, plus the gym's own custom types) with the label the coach sees, and the score types (time, reps, rounds_reps, weight...) accepted by scorable parts. Use the key values as type and score_type when creating workouts.
list_invoices
ChatGPTLists the invoices the page counts for one month — paid in it, or unpaid and dated in it — newest first, with number, date, payment date, status, payment method, plan and amount. Never the member's name or contact details: for who owes what, send the user to the invoices page linked in the answer. Same filters as the invoices page: status, payment method and payment date. Defaults to the current month; at most 100 rows.
list_my_personal_records
ChatGPTThe connected user's own personal records (My scores): their best score per movement or benchmark in weightlifting, gymnastics and benchmark workouts, with the date, RX/RX+/Scaled and, for lifts, the estimated one-rep max. Never anyone else's scores. Filter by category or by movement name. Use get_my_score_history for every score of one movement. At most 200.
list_my_results
ChatGPTThe connected user's own scores between two dates, newest first: every workout part they scored, in class or on their own, with the score, RX/RX+/Scaled and whether it was a PR. Never anyone else's. Defaults to the last 30 days; at most 366 days and 100 scores per call.
list_plans
ChatGPTLists the gym's plans (the packages members buy: monthly unlimited, 8 sessions a month, yearly...) with price, billing period, the programs and bookings each credit allows, whether members can buy them in the app, and how many memberships are on each, plus the gym's taxes with the ids create_plan and update_plan take.
list_program_settings
ChatGPTLists every program with its id and colour, the ids the other settings tools take. For a user who manages programs, also each program's booking settings (when booking opens and closes, the cancellation window, daily and future booking limits) and how many timetable entries, workouts and subscribed customers it has.
list_programs
ChatGPTLists the gym's programs (e.g. CrossFit, Open Box, Kids). Every workout belongs to one program on one date. Call this once when a program id is needed; the program marked as default is the one to use when the user names none.
list_recurring_classes
ChatGPTLists the recurring timetable (the weekly entries classes are generated from): program, weekdays, hours, places, coach and room, with each entry's id. This is the configuration, not the booked classes of a given day: for those use list_classes. The staff who can coach an entry and, for gyms with rooms or sites, the locations come back too, with the ids the timetable tools take.
list_workouts
ChatGPTLists the workouts programmed between two dates, oldest first. Use it to review recent programming before suggesting what comes next, or to see which days of a week are still empty. Covers every program in the gym unless program_id names one. Defaults to the last 28 days plus the next 7; at most 120 days and 60 workouts per call.
search_movements
ChatGPTSearches the gym's movement library: weightlifting lifts, gymnastics skills and benchmark workouts (Fran, Murph...). Movements are stored by their canonical (usually English) name; the search is accent- and case-insensitive. Use the exact returned name as movement when creating weightlifting, gymnastics or benchmark parts so scores and PRs track correctly.
update_announcement
ChatGPTChanges an announcement's subject, text, dates or push. Only the fields you pass change; a new description replaces the whole text, so start from the one list_announcements returns. Members see the change in the app straight away. To take one down before its end, set end_date to yesterday, and start_date to yesterday too when it starts today or later (the end cannot come before the start). A push already sent is not sent again; one turned on for a running announcement goes out within the hour (from 9:00 gym time).
update_gym_settings
ChatGPTSwitches the workouts module on or off for the gym. Off suits gyms that do not program daily workouts (yoga, pilates, martial arts...): it hides workouts and scores from members and staff and removes the workout tools from this connection. Nothing is deleted; switching it back on restores everything.
update_plan
ChatGPTChanges a plan's name, price, billing period, credits or purchase settings. Only the fields you pass change; credits replaces the whole list, so pass every credit you want to keep. The billing period cannot change while memberships are active on the plan. A new price applies to memberships that renew from now on, so say so when changing one; on a gym charging through Mercado Pago, the subscriptions on the plan are updated there.
update_program
ChatGPTChanges a program's name, colour, booking windows or limits. Only the fields you pass change. A longer cancellation window applies to classes from now on; the schedule keeps the program's classes and workouts. On a gym with a booking partner such as Gympass connected, the change is synced to the partner.
update_recurring_class
ChatGPTChanges a timetable entry: hours, weekdays, places, coach, room or period. Only the fields you pass change. CrossHero applies the hours, places, coach and room to the classes already generated from the entry; the members booked on them are emailed when the start time or the room changes (pass update_reason to tell them why), not for an end time, coach or places change. Whether a booking consumes a credit applies to classes generated from then on. A weekday removed or a date range narrowed cancels those classes, and changing the program cancels every future class of the entry; members booked on a cancelled class are told, and cancelled sessions are withdrawn from a connected booking partner such as Gympass. Ask the user to confirm before calling this on an entry with bookings.
update_workout
ChatGPTChanges an existing workout, found by workout_id or by date and program. Only the fields you pass change; components replaces the whole list of parts, so pass every part you want to keep. Workouts whose parts already have athlete scores cannot have their parts replaced.