Create an API key
API keys are created in the admin dashboard under Settings > Organization > APIs & webhooks. See Creating an API token for the full flow.API access is a paid feature. Organizations on the free plan or in trial can’t
create API keys, and existing keys stop working if an organization downgrades
(requests return
403 with code: "PLAN_FEATURE_LOCKED").areas:read- list areas, area types, and area blocks, and read their availabilitybookings:read- read a booking, list bookings in a window, list players on a booking, and read a class rosterbookings:write- create, update, and cancel bookings, manage players on them, and book a customer into a classareas:write- create and update areas and area types, and block or unblock an areacontacts:read- search customers, open one by id, and list pipeline stages and contact sourcescontacts:write- create and update a customercontacts:delete- archive a customer, which also cancels their memberships and future bookingsinstructors:read- search coaches, instructor types, and pay rate policies, and open one by idinstructors:write- create and update coaches, instructor types, and pay rate policiesplans:read- find the membership plans a gym sells and their plan categoriesplans:write- create, update, retire, and delete plans, and create and update plan categoriesclasses:read- list and read classes, class types, and progression tracksclasses:write- create, update, and delete classes, and create and update class typesmemberships:read- read membershipsmemberships:write- create memberships, and pause, resume, or cancel themcheckins:read- list and read attendance recordscheckins:write- check in an existing booking, or check a member in without oneproducts:read- search the product catalogue and its categories, and read how many are left to sellproducts:write- create and update products and product categories
bookings:write is required to create or cancel bookings. A read-only key
cannot write bookings, and the legacy broad read grant does not satisfy write
scopes.Verify a key
GET /v1/platform/me needs a valid key but no scope of its own, which makes it
the right call to run when a gym connects your integration: it confirms the key
works, names the organization, and tells you what the key may do.
- Check a capability against
effectiveScopes, notscopes. A full-access key holds the single wildcard scope*and reportsscopes: ["*"]withfullAccess: true. Looking for"bookings:write"inscopeswould reject the one key that can do everything;effectiveScopesexpands the wildcard for you. organization.currencyis the ISO 4217 code the gym trades in, and the only place this API states it. Every monetary amount elsewhere - a booking’spayment.amount, plan and product prices, transaction totals - is a bare number in this currency. Read it once and store it against the connection rather than assuming it matches your own.resourcesis the catalog of every resource the Platform API exposes and the actions each supports. It is the same for every key, so it does not tell you what this key holds -effectiveScopesdoes. The example above is shortened.organization.idis the same id that arrives asorganizationIdon an availability webhook, so a per-organization connection can be keyed on it.
Rate limits and errors
The channel endpoints share the Platform API’s limits and error model:- 100 requests per minute per organization. Booking writes are also capped at 60 per minute. A
429response includes aRetry-Afterheader. - Errors return a JSON body of the shape
{ "error": "...", "message": "...", "code": "..." }. A missing scope returns403with{ "error": "Insufficient access scope", "requiredScope": "..." }.