Base URL
All API requests are made to:Machine-readable resources
Tools and AI agents can read the API and its companion services directly:Official API contract
This documentation is the official source of truth for the 1Club Platform API. If an integration relies on undocumented endpoints, fields, response shapes, or internal behavior outside this spec, we can’t guarantee backward compatibility. Build against what’s documented here to stay stable as the platform evolves. See Versioning and deprecation for how changes and deprecations ship.Authentication
All requests require a customer API key passed as a Bearer token:Creating an API token
API tokens are created from the admin dashboard at admin.1club.ai.- Sign in to the admin dashboard
- Open Settings > Organization > APIs & webhooks
- Click Create Token
- Fill in the token details:
- Name - a label to identify where this token is used (e.g. “Website Integration”)
- Description - optional note on what the token is used for
- Scopes - pick the resources the token can access, and whether each is Read or Write
- Expires - set an expiry date, or leave empty for a token that never expires
- Click Save
- Copy the token immediately - it is shown only once and cannot be retrieved later
Creating and revoking API tokens requires the settings.manage.organization
permission. Admins and users with full settings management can access this
page; managers and other roles cannot.
Token scopes
Each token is granted access to specific resources. Most resources offer Read and Write, and a few add a separate action for an operation that is more than a write:- Read - allows fetching data (GET requests)
- Write - allows creating and updating data (POST/PUT/PATCH requests, and the deletes a resource allows)
- Delete -
contacts:deleteandmedia:deleteonly, for archiving a contact and permanently deleting a media file - Publish -
website:publishonly, for making website edits public
*, which grants every scope, including ones added later. Scopes carry no hierarchy: products:write does not include products:read, so grant both when an integration reads before it writes.
Grant only the scopes the integration actually needs. The Platform API supports these scopes:
transactions:write records a settlement (revenue collected outside 1Club, reported as one sum for a gym) and refunds of it. Nothing is charged to anyone.
GET /v1/platform/me needs no scope and returns the scopes a key holds - see Verify a key.
A transaction in this API is the record the 1Club admin and member apps call a
Charge: what a payer owes for one thing, such as a booking, a membership
period, or a product.
/v1/platform/transactions returns the same records
staff see under Sales > Finance > Charges. See
Charges.Revoking a token
If a token is leaked or no longer needed, revoke it from Settings > Organization > APIs & webhooks. Revocation is immediate - any integration using that token will stop working on its next request.Quick start
Fetch the list of clubs:Rate limiting
- 100 requests per minute per organization, across every Platform API endpoint
- Some endpoints have a tighter limit on top, in a separate bucket:
- Booking writes (create, update, cancel, and adding or removing players): 60 per minute
- Booking a customer into a class: 60 per minute
- Reports: 20 per minute
- When exceeded, the API returns
429 Too Many Requestswith aRetry-Afterheader (seconds) - Rate limit headers are included in every response:
RateLimit-Limit- max requests per windowRateLimit-Remaining- requests remainingRateLimit-Reset- seconds until the window resetsRateLimit-Policy- the limit and window, for example100;w=60
Errors
Most errors return a JSON body of the shape
{ "error": "...", "message": "...", "code": "...", "details": { ... } }, where code is a stable, machine-readable reason and details carries structured values when the error has them. Authentication, scope, and rate-limit errors return a shorter body:
- A missing scope returns
{ "error": "Insufficient access scope", "requiredScope": "bookings:write" }. - An organization on the free plan or in trial returns
403withcode: "PLAN_FEATURE_LOCKED", and an organization that is no longer active returns403withcode: "ORGANIZATION_NOT_ACTIVE".
Security best practices
- Never commit tokens to source control. Store them in environment variables or a secrets manager.
- Use the minimum required scopes. Don’t grant write access if only read is needed.
- Set an expiry on tokens used for short-term scripts or testing.
- Rotate tokens regularly and revoke any that are no longer in use.
- Never share tokens in emails, chat messages, or public channels.
Using this API from an AI assistant
The same Platform API is exposed over the Model Context Protocol athttps://mcp.1club.ai/admin. The normal way to connect a remote MCP client is 1Club OAuth: you sign in on 1Club’s authorization page and nothing is pasted into the assistant. An API key created above is still accepted on the same endpoint when the client sends it as Authorization: Bearer 1club_sk_live_..., which is how developer-managed clients that cannot complete an interactive sign-in connect. The MCP tools are thin wrappers over these endpoints, with the same scopes, rate limits, and error shapes. See Connect an assistant.
See the MCP overview for the two servers 1Club runs, and Connect an assistant for setup.