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, area types, and area blocks, and read their availability
  • bookings:read - read a booking, list bookings in a window, list players on a booking, and read a class roster
  • bookings:write - create, update, and cancel bookings, manage players on them, and book a customer into a class
  • areas:write - create and update areas and area types, and block or unblock an area
  • contacts:read - search customers, open one by id, and list pipeline stages and contact sources
  • contacts:write - create and update a customer
  • contacts:delete - archive a customer, which also cancels their memberships and future bookings
  • instructors:read - search coaches, instructor types, and pay rate policies, and open one by id
  • instructors:write - create and update coaches, instructor types, and pay rate policies
  • plans:read - find the membership plans a gym sells and their plan categories
  • plans:write - create, update, retire, and delete plans, and create and update plan categories
  • classes:read - list and read classes, class types, and progression tracks
  • classes:write - create, update, and delete classes, and create and update class types
  • 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, or check a member in without one
  • 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
See Token scopes for every scope the Platform API supports. 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.
  • resources is 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 - effectiveScopes does. The example above is shortened.
  • 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. Booking writes are also capped at 60 per minute. A 429 response includes a Retry-After header.
  • Errors return a JSON body of the shape { "error": "...", "message": "...", "code": "..." }. A missing scope returns 403 with { "error": "Insufficient access scope", "requiredScope": "..." }.
See Rate limiting and Errors for the full reference.