Skip to content Skip to main navigation Skip to footer
Loading GymOS audio player...

Trigger webhook payload structure

This document describes the JSON payload sent by GymOS when a webhook event fires. Each webhook delivers a single JSON object in the body of an HTTP POST containing:

  • The event metadata
  • The subject (member, lead, or attendee), where applicable
  • The primary business object(s) associated with the event

Only the objects relevant to the event type will be populated.


Top-level webhook object

{
  "eventType": "Session Booked",
  "eventTimestampUtc": "2025-11-25T13:42:01Z",
  "webHookTimestampUtc": "2025-11-25T13:42:01Z",
  "clientId": "c340d350-b6a1-434c-bfb6-7703e9cb3215",
  "clientBusinessName": "Example Fitness Ltd",
  "clientTradingName": "Example Fitness",
  "subjectType": "MEMBER",
  "subject": { ... },
  "payload": { ... }
}

Top-level fields

FieldTypeDescription
eventTypestringLogical event type (e.g. Session Booked)
eventTimestampUtcdatetimeWhen the original triggering event occurred.
webHookTimestampUtcdatetimeWhen the webhook was generated.
clientIdGUIDGymOS client (facility) ID.
clientBusinessNamestringRegistered business name.
clientTradingNamestringTrading name.
subjectTypestringMEMBER, LEAD, or ATTENDEE. May be empty.
subjectobjectThe subject object matching subjectType, where applicable
payloadobjectThe business object(s) relevant to the event.

subject object

The subject represents the individual associated with the event. Some events may not have an associated subject record(s).

"subject": {
  "member": { ... },
  "lead": null,
  "attendee": null
}

member

{
  "assignedMentor": "Jim Shark",
  "createdUtc": "2025-02-19T16:02:02.7763675Z",
  "currentMemberships": [
	"Gold Membership",
	"Nutrition Bolt-on"
  ],
  "dateOfBirth": "1983-05-15T00:00:00",
  "defaultVenue": "Downtown Fitness Centre",
  "email": "[email protected]",
  "emergencyAddress": "123 The Street, Townsville, Countyshire",
  "emergencyContact": "Jane Credible",
  "emergencyPhone": "\u002B441234567890",
  "emergencyRelationship": "Spouse",
  "firstName": "Justin",
  "fullName": "Justin Credible",
  "gender": "Male",
  "homeAddress1": "123 The Street",
  "homeAddress2": "",
  "homeAddress3": "",
  "homeCity": "Townsville",
  "homeCountry": "United Kingdom",
  "homeCounty": "Countyshire",
  "homePostcode": "TS1 2AB",
  "id": "91d6528e-cc6b-4027-9c33-a172ce018c81",
  "joinedDate": "2025-01-10T00:00:00Z",
  "journeyPoint": "Established Member",
  "lastName": "Credible",
  "mobile": "\u002B447123456789",
  "primaryStatus": "Satisfactory",
  "title": "Mr.",
  "userType": "Member"
}
FieldTypeDescription
idGUIDMember ID.
createdUtcdatetimeWhen the member record was created.
titlestringName title (E.g., Mr., Mrs., Ms. etc.)
firstNamestringFirst name.
lastNamestringLast name.
fullNamestringFull name.
emailstringEmail address.
mobilestringMobile phone.
dateOfBirthdate?Date of birth.
joinedDatedate?Member join date. This may precede the created date.
genderstringGender.
primaryStatusstringStatus assigned to the member.
journeyPointstringMember lifecycle status.
currentMembershipsstring[]List of active membership names.
assignedMentorstringAssigned coach/mentor.
blockedUntilUtcdatetime?Block expiry time (UTC).
defaultVenuestringThe member’s primary venue.
Address fieldsstringhomeAddress1, homeAddress2, homeCity, etc.
Emergency contact fieldsstringemergencyContact, emergencyPhone, etc.
userTypestringUser type (E.g., Member, Employee, Manager, etc.)

lead

{
  "createdUtc": "2025-07-28T15:02:02.7763675Z",
  "dateOfBirth": "1986-08-22T00:00:00",
  "email": "[email protected]",
  "firstName": "Amanda",
  "fullName": "Amanda Huggenkiss",
  "gender": "Female",
  "id": "c28a6e90-95a1-44e9-8d8a-26d5e2cc01e2",
  "lastName": "Huggenkiss",
  "mobile": "\u002B447987654321",
  "preferredVenue": "Uptown Fitness Centre",
  "source": "Facebook Ad"
}
FieldTypeDescription
idGUIDLead ID.
firstNamestringFirst name.
fullNamestringFull name.
lastNamestringLast name.
emailstringEmail address.
mobilestringMobile phone.
createdUtcdatetimeWhen the lead was created.
genderstringGender, if provided.
dateOfBirthdate?DOB, if collected.
sourcestringLead source.
preferredVenuestringVenue preference.

attendee

{
  "createdUtc": "2025-11-13T16:02:02.7773686Z",
  "email": "[email protected]",
  "firstName": "Alice",
  "fullName": "Alice Tikband",
  "id": "d4f5e6a7-b8c9-40d1-ef01-23456789abcd",
  "lastName": "Tikband",
  "mobile": "\u002B447000112233"
}
FieldTypeDescription
idGUIDGuest ID.
createdUtcdatetime When the guest was created.
firstNamestringFirst name.
fullNamestringFull name.
lastNamestringLast name.
emailstringEmail address.
mobilestring?Mobile number.
statusstringGuest status.

payload object

Only relevant objects are populated for each event.

"payload": {
  	"session": { ... },
	"booking": { ... },
	"achievement": { ... },
	"leadAppointment": { ... },
	"assignment": { ... },
	"bodyHop": { ... },
	"campaign": { ... },
	"credit": { ... },
	"document": { ... },
	"dropSlotEventSlot": { ... },
	"dropSlotEventType": { ... },
	"dropSlotInvitation": { ... },
	"form": { ... },
	"injury": { ... },
	"inventory": { ... },
	"membership": { ... },
	"message": { ... },
	"order": { ... },
	"paymentLink": { ... },
	"scheduledAbsence": { ... },
	"weighIn": { ... },
	"xrcizeSession": { ... },
	"supplementalData": { ... }
}

session

{
  "endTimeLocal": "2025-11-26T17:00:00+00:00",
  "id": "6fd0aa79-e899-4d93-b465-12fa38d96372",
  "leadCoach": "Sarah Trainer",
  "sessionType": "SGPT (1:6)",
  "startTimeLocal": "2025-11-26T16:15:00+00:00",
  "venue": "Downtown Fitness Centre",
  "venueArea": "Studio 2"
}
FieldTypeDescription
idGUID?Session ID.
startTimeLocaldatetime?Local session start time.
endTimeLocaldatetime?Local session end time.
sessionTypestringSession type (E.g., Small Group 1:6)
venuestringVenue.
venueAreastringArea/room.
leadCoachstringCoach name.

booking

{
  "autoBooked": false,
  "bookedBy": "Justin Credible",
  "bookedTimeUtc": "2025-11-26T16:02:00.7793681Z",
  "cancelledTimeUtc": "",
  "id": "97c6e7c9-0920-438f-828e-25a252d06740",
  "paymentMethod": "Credits",
  "status": "Booked"
}
FieldTypeDescription
idGUID?Booking ID.
autoBookedbooleanIf the booking was auto-booked.
bookedBystringWho created the booking.
bookedTimeUtcdatetime?UTC booking time.
cancelledTimeUtcdatetime?UTC cancellation time.
paymentMethodstringPayment method label.
statusstringBooking status.

achievement

{
  "achievedAtUtc": "2025-11-26T14:29:02.7773686Z",
  "achievement": "150kg",
  "achievementType": "Deadlift",
  "id": "8496f565-88d5-40af-b689-5980452e18c9",
  "notes": "Verified by Maya Magination"
}
FieldTypeDescription
idGUID?Achievement ID.
achievementstringThe value of the achievement (E.g., 10kg)
achievementTypestringThe achievement type (E.g., Deadlift)
achievedAtUtcdatetimeWhen achieved.
notesstringNotes.

leadAppointment

{
  "id": "27ae4056-ef11-4c0c-9952-6ca23dc92f33",
  "bookedUtc": "2025-11-23T14:13:09Z",
  "cancelledUtc": "",
  "campaign": "Black Friday Campaign",
  "status": "Attended"
}
FieldTypeDescription
idGUID?Appointment ID.
bookedUtcdatetimeBooking timestamp.
cancelledUtcdatetime?Cancellation timestamp.
campaignstringCampaign name.
statusstringStatus.

assignment

{
  "id": "4325d913-290f-4e3b-85e2-00d83dc1c0f5",
  "title": "Check-in",
  "details": "Scheduled call as promised to follow-up on discussion from 3 days ago.",
  "notes": "Seemed very interested in our personal training packages.",
  "startTimeUtc": "2025-11-27T10:00:00Z",
  "assignmentType": "Generic Reminder",
  "status": "Pending"
}
FieldTypeDescription
idGUID?Assignment ID.
titlestringAssignment title.
detailsstringAssignment details.
notesstringNotes.
assignmentTypestringCategory/type.
startTimeUtcdatetime?Start time.
statusstringStatus.

bodyHop

{
  "id": "14686129-c530-4a73-b566-8d5c189f2795",
  "datePointUtc": "2025-11-25T19:59:02.7773686Z",
  "notes": "Decent progression on my legs. Arms still need more work."
}
FieldTypeDescription
idGUID?BodyHop ID.
datePointUtcdatetimeTimestamp.
notesstringNotes.

campaign

{
  "id": "d20c2cb8-50fb-4513-a51c-decb39ec50f2",
  "campaignName": "Spring into Fitness",
  "status": "Active",
  "campaignType": "Lead Capture"
}
FieldTypeDescription
idGUID?Campaign ID.
campaignNamestringName.
statusstringStatus.
campaignTypestringType/category.

credit

{
  "cost": 149.99,
  "creditPack": "8 Session Pack (28 days)",
  "creditsIssued": 8,
  "creditsRemaining": 8,
  "id": "79871a93-7f43-4a71-b0d8-b83ea5b3d69f",
  "issuedUtc": "2025-11-26T16:02:02.7783681Z",
  "validFromType": "Immediate",
  "validFromUtc": "2025-11-27T00:00:00+00:00",
  "validToType": "Fixed period",
  "validToUtc": "2025-12-25T00:00:00+00:00"
}
FieldTypeDescription
costdecimal?Cost of credit pack.
creditPackstringPack name.
creditsIssuedintTotal credits issued.
creditsRemainingintCredits remaining.
idGUID?Credit record ID.
issuedUtcdatetimeIssued timestamp.
validFromTypestringHow validity begins.
validFromUtcdatetime?Valid-from timestamp.
validToTypestringHow validity expires.
validToUtcdatetime?Expiry timestamp.

document

{
  "createdUtc": "2025-11-26T16:02:02.7793681Z",
  "description": "12 month SGPT membership contract for Justin Credible",
  "filename": "contract_justin_credible.pdf",
  "id": "24b93d25-559c-4edf-bf45-49ae58f52490",
  "name": "Membership Contract",
  "notes": "Signed electronically via GymOS app"
}
FieldTypeDescription
createdUtcdatetimeCreation timestamp.
descriptionstringDescription.
filenamestringFilename.
idGUID?Document ID.
namestringDocument name/title.
notesstringNotes.

dropSlotEventSlot

{
  "id": "c7be53ec-b1f1-4f91-9e2f-dfc6aba1d866",
  "status": "Booked",
  "startTimeUtc": "2025-11-28T18:30:00Z",
  "endTimeUtc": "2025-11-28T19:30:00Z",
  "hosts": "Rick Ottersheese",
  "attendees": "Alice Tikband"
}
FieldTypeDescription
idGUID?Event ID.
statusstringStatus.
startTimeUtcdatetime?Event start (UTC).
endTimeUtcdatetime?Event end (UTC).
hostsstringDelimited list of host(s).
attendeesstringDelimited list of attendee(s).

dropSlotEventType

{
  "id": "93c27cb4-a458-4d5c-8e03-9661336beb18",
  "eventName": "Check-In",
  "eventDescription": "Regular check-in to ensure that we are on track towards our goals, and to make adjustments as necessary."
}
FieldTypeDescription
idGUID?Event type ID.
eventNamestringName.
eventDescriptionstringDescription.

dropSlotInvitation

{
  "createdUtc": "2025-11-26T16:02:02.7803683Z",
  "id": "9db526a8-b87e-4d88-8d9d-ae96be1d1a5a",
  "invitationsIssued": 1,
  "status": "Active",
  "validFromUtc": "2025-11-26T16:02:02.7803683Z",
  "validToUtc": "2025-12-03T16:02:02.7803683Z"
}
FieldTypeDescription
createdUtcdatetimeCreated timestamp.
idGUID?Invitation ID.
invitationsIssuedintNumber issued.
statusstringStatus.
validFromUtcdatetime?Valid from.
validToUtcdatetime?Valid until.

form

{
  "id": "38acbd3d-c2fe-434f-88a5-a1d375be08aa",
  "form": "Standard PAR-Q",
  "requestedUtc": "2025-11-26T14:50:02.7803683Z",
  "startedUtc": "2025-11-26T15:41:02.7803683Z",
  "completedUtc": "2025-11-26T16:02:02.7803683Z",
  "alertsRaised": 1
}
FieldTypeDescription
idGUID?Form ID.
formstringForm name.
requestedUtcdatetime?When form completion was requested.
startedUtcdatetime?When the form was started.
completedUtcdatetime?When the form was submitted/finished.
alertsRaisedintNumber of alerts/flags raised.

injury

{
  "id": "a6c825d4-fbc4-47b0-8e52-75f513b27d95",
  "recordedBy": "Shelia Mazeyer",
  "isPregnant": false,
  "medications": "Ibuprofen",
  "allergies": "Peanuts",
  "notes": "",
  "injuryCount": 1
}
FieldTypeDescription
idGUID?Injury record ID.
recordedBystringStaff name.
isPregnantbooleanPregnancy flag.
medicationsstringMedications listed.
allergiesstringAllergies listed.
notesstringNotes.
injuryCountintNumber of injuries recorded.

inventory

{
  "id": "ed874620-38fd-4c36-9a67-c5acd761e9bf",
  "itemName": "Weight Training Gloves",
  "variantName": "Large - Black",
  "description": "Durable fitness gloves to protect your hands during weight training.",
  "stockLevel": 3
}
FieldTypeDescription
idGUID?Variant ID.
itemNamestringProduct name.
variantNamestringVariant name (size/colour).
descriptionstringDescription.
stockLevelintCurrent stock.

membership

{
  "autoRenew": true,
  "costPerPaymentPeriod": 249.99,
  "createdUtc": "2025-09-27T15:02:02.7813682Z",
  "cancelledUtc": "",
  "id": "2633cfbd-6c46-43d6-8af9-4bd34453a160",
  "joiningFee": 0,
  "membershipPlan": "Gold Membership",
  "membershipType": "Monthly Recurring",
  "startDateUtc": "2025-09-27T15:02:02.7813682Z",
  "status": "Active",
  "subscriptionLength": 1,
  "subscriptionPeriodType": "Month",
  "subscriptionPeriods": 12
}
FieldTypeDescription
idGUID?Membership ID.
createdUtcdatetimeWhen the membership was created.
startDateUtcdatetimeStart date/time (UTC).
endDateUtcdatetime?End date/time (UTC).
cancelledUtcdatetime?Cancellation time (UTC).
membershipPlanstringPlan name.
membershipTypestringMembership category/type.
subscriptionLengthintSubscription length.
subscriptionPeriodTypestringPeriod type (Days/Weeks/Months).
subscriptionPeriodsintNumber of periods.
autoRenewbooleanDoes membership auto-renew?
costPerPaymentPerioddecimal?Cost per billing period.
joiningFeedecimal?Joining fee applied.
statusstringMembership status.

message

{
  "from": "Titus Addrum",
  "id": "9fa71ca8-246a-4e2e-bc99-f8c8c9032281",
  "isInbound": true,
  "messageType": "Email",
  "receivedUtc": "2025-11-26T16:02:02.7813682Z",
  "status": "Received",
  "subject": "Enquiry about personal training packages"
}
FieldTypeDescription
idGUID?Message ID.
fromstringSender (address, identifier, or mobile).
isInboundbooleanTrue if message was inbound.
messageTypestringCategory/type.
receivedUtcdatetimeWhen the message was received.
readUtcdatetime?When the message was read.
statusstringMessage status.
subjectstringMessage subject/title.

order

{
  "placedUtc": "2025-11-26T16:02:02.7813682Z",
  "id": "a0b2222a-80e1-47b8-a3c4-d36333ccde92",
  "reference": "ORD12345",
  "grossTotal": 99.99,
  "itemCount": 1
}
FieldTypeDescription
idGUID?Order ID.
placedUtcdatetimeWhen the order was placed.
referencestringOrder reference code.
grossTotaldecimal?Gross total amount.
itemCountintNumber of items in the order.

paymentLink

{
  "id": "299addec-2a54-4b5a-9741-1bf150e3fcca",
  "linkType": "Reusable",
  "targetType": "Member",
  "title": "Christmas meal deposit",
  "description": "Non-refundable deposit for the Christmas meal. Remainder to be paid at the event.",
  "amount": 20
}
FieldTypeDescription
idGUID?Payment link ID.
linkTypestringLink type.
targetTypestringEntity the link is for.
titlestringLink title.
descriptionstringLink description.
amountdecimal?Amount requested or paid.

scheduledAbsence

{
  "id": "7f9b60c4-6051-4379-b782-17478f55b2cd",
  "createdUtc": "2025-11-26T16:02:02.7813682Z",
  "absenceStartUtc": "2025-12-01T00:00:00Z",
  "absenceEndUtc": "2025-12-10T23:59:59Z",
  "reason": "Holiday",
  "notes": "Family trip to the beach."
}
FieldTypeDescription
idGUID?Absence ID.
createdUtcdatetimeWhen the absence was created.
absenceStartUtcdatetimeAbsence start time (UTC).
absenceEndUtcdatetimeAbsence end time (UTC).
reasonstringAbsence reason.
notesstringAdditional notes.

weighIn

{
  "id": "dad0f80e-1947-4c7c-aec7-f1c145ca54b9",
  "dateOfRecordUtc": "2025-11-26T16:02:02.7823685Z",
  "heightCm": 176,
  "weightKg": 75.2,
  "bodyFatPercentage": 19.2,
  "notes": "Feeling good, energy levels are up."
}
FieldTypeDescription
idGUID?Measurement record ID.
dateOfRecordUtcdatetimeDate/time of measurement.
heightCmdecimal?Height in cm.
weightKgdecimal?Weight in kg.
bodyFatPercentagedecimal?Body fat %.
notesstringNotes.

xrcizeSession

{
  "id": "8854b0bb-3293-4d32-9964-bd5b3da4a45c",
  "name": "Full Body Strength Workout",
  "description": "A comprehensive strength training session targeting all major muscle groups.",
  "sessionType": "Master",
  "contentFormat": "In-Person Trackable",
  "trainingMethod": "Strength Progression (round up)"
}
FieldTypeDescription
idGUID?XRcize session ID.
namestringSession name.
descriptionstringDescription of the session content.
sessionTypestringXRcize session type.
contentFormatstringThe type of XRcize session (E.g., Structured, Freeform, etc.)
trainingMethodstringTraining method used.

supplementalData

This block contains arbitrary key-value metadata that can be added to specific webhook events by including additional merge fields in the trigger step. This facilitates the inclusion of additional data available in the merge fields that may not be included in the default business data objects.

Both keys and values are always strings.

"supplementalData": {
  "callpurpose": "To catch up from our last discussion",
  "caller": "Hope Lescase"
}
FieldTypeDescription
supplementalDataobject (string → string)Additional merge field metadata attached to the event.
Related Articles