Skip to main content
The channel integration uses the same API key mechanism as the rest of the Platform API - no separate enablement step is needed.

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").
Grant only the scopes the integration needs:
  • areas:read - list areas and read their availability
  • bookings:read - read a booking and list bookings in a window
  • bookings:write - create and cancel bookings, and manage players on them
  • contacts:read - search customers and open one by id
  • contacts:write - create a customer
  • instructors:read - search coaches and open one by id
  • plans:read - find the membership plans a gym sells
  • plans:write - create, update, retire, and delete plans
  • classes:read - list and read classes
  • classes:write - create, update, and delete classes
  • memberships:read - read memberships
  • memberships:write - create memberships, and pause, resume, or cancel them
  • checkins:read - list and read attendance records
  • checkins:write - check in an existing booking
  • products:read - search the product catalogue and its categories, and read how many are left to sell
  • products:write - create and update products and product categories
A booking-only integration needs the first three. Add the contacts and instructors scopes when you want to resolve a customer or a coach by name before booking - see Contacts and Instructors.
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.
Pass the key as a Bearer token on every request:
The key is tied to one organization, so all areas and bookings are scoped to that organization automatically.

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, not scopes. A full-access key holds the single wildcard scope * and reports scopes: ["*"] with fullAccess: true. Looking for "bookings:write" in scopes would reject the one key that can do everything; effectiveScopes expands the wildcard for you.
  • organization.currency is the ISO 4217 code the gym trades in, and the only place this API states it. Every monetary amount elsewhere - a booking’s payment.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.id is the same id that arrives as organizationId on 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 429 response includes a Retry-After header.
  • Errors return a JSON body of the shape { "error": "...", "message": "...", "code": "..." }.
See Rate limiting and Errors for the full reference.