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 and read their availabilitybookings:read- read a booking and list bookings in a windowbookings:write- create and cancel bookings, and manage players on themcontacts:read- search customers and open one by idcontacts:write- create a customerinstructors:read- search coaches and open one by idplans:read- find the membership plans a gym sellsplans:write- create, update, retire, and delete plansclasses:read- list and read classesclasses:write- create, update, and delete classesmemberships:read- read membershipsmemberships:write- create memberships, and pause, resume, or cancel themcheckins:read- list and read attendance recordscheckins:write- check in an existing bookingproducts: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.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. A
429response includes aRetry-Afterheader. - Errors return a JSON body of the shape
{ "error": "...", "message": "...", "code": "..." }.