OPEN
OPEN

OPEN developer documentation

OPEN has three integration surfaces, and picking the right one is most of the work: a key-free public REST API for reading studios, schedules, prices and teachers; an MCP connector that books classes on a signed-in student's behalf; and a key-authenticated Studio API that lets a studio read its own data — locations, schedule, classes, students and memberships. All three are JSON over HTTPS and all three are read-only except booking, which happens through the connector.
Last updated 2026-07-27

Which one do you want?

To read studios, schedules, class prices or teacher profiles — anything published on a studio's public page — use the Public Client API. It needs no key, no OAuth and no account, and it can answer questions about any studio on the platform.
To book or cancel a class for a person, use the OPEN Bookings MCP connector. Booking is deliberately not part of the public API: it is a personal, authenticated action, so it goes through a connector the student authorises once with their own OPEN account. There is no way to book with an API key.
To read a studio's own private data — its client list, memberships, or anyone's bookings — use the Studio API with that studio's key. The public API will never return this, by design.
The commonest mistake is reaching for the wrong one: trying to book through the read API, or asking the public API for a studio's clients. Neither is a bug; they are different tools.

1. Public Client API — free, no key

The read-only API behind every public page on openclient.app. Send a plain HTTPS GET to https://app.openmanagerapp.com and parse JSON. No key, no OAuth, no cookie, no account.
A few conventions worth knowing before you parse a response. Money is in each studio's own currency — read the `cur` field from the studio payload before comparing prices across studios. On a pass, `classes_left: -5` means unlimited, not minus five. A `limit` of `w-2` means two classes per week; `m-4` four per month; `d-1` one per day. Dates are ISO 8601 and times are local to the studio as HH:MM.
Please cache the studio directory rather than re-fetching it for every question, and send a descriptive User-Agent so we can tell an integration apart from a scraper.

Public endpoints

GET /businesses/pub_d.json

List every publicly listed studio.
Returns: The full studio directory as a flat array — id, name, city, address, currency and business type. Not paginated; small enough to fetch once and filter locally.

GET /businesses/{businessId}/public_business.json

Get one studio's public page.
Parameters
businessId — Studio id, from the directory endpoint.
Returns: The studio profile plus its upcoming classes, the passes and memberships it sells with prices, its class types, teachers, rooms and photos. This is the endpoint that answers "what is on at this studio and what does it cost".

GET /experiences/public/listing

List published workshops, retreats and special events across all studios.
Returns: Experiences with their dates, capacity, venue and prices. Use `created_by` to map one back to the studio running it.

GET /experiences/public/studio/{businessId}

List one studio's published experiences.
Parameters
businessId — Studio id, from the directory endpoint.
Returns: The same shape, narrowed to one studio. Returns an empty array rather than a 404 when there are none.

GET /public/teachers/{slug}

Get a public teacher profile and their upcoming classes.
Parameters
slug — The slug from openclient.app/t/{slug}.
Returns: The teacher's name, photo and bio, their social links, every studio they teach at, and their schedule aggregated across all of them.
Machine-readable OpenAPI document for the Public Client API
https://openclient.app/openapi.json

2. OPEN Bookings MCP connector — book by chat

A Model Context Protocol server a student connects to their own AI assistant. They authorise it once with their OPEN account and can then book in conversation — "book me into the 07:00 vinyasa on Thursday". The connector URL is https://open-client-mcp.openclient.workers.dev/mcp.
Authorization is OAuth 2.1 with dynamic client registration. Metadata is published at /.well-known/oauth-authorization-server on the same host, so a compliant MCP client discovers and registers itself with no manual setup. Unauthenticated requests return 401 with { "error": "invalid_token" }.
Every action is scoped to the student who authorised it: the connector can only ever see and change that person's own bookings and passes. A separate connector, open-mcp-server.openclient.workers.dev/mcp, exists for studio owners to read their own studio data — do not confuse the two.

Tools it exposes

· find_studios
· get_schedule
· get_class
· book_class
· cancel_booking
· list_my_tickets
· accept_terms

3. Studio API — a studio reading its own data

Getting started

The API is a read-only JSON REST API served over HTTPS at https://app.openmanagerapp.com/api/v1. Every endpoint returns JSON and is scoped to a single studio: a request can only ever see the data of the studio that owns the API key it was made with.
A typical first call lists your studio locations: send a GET request to https://app.openmanagerapp.com/api/v1/locations with your API key in the Authorization header. From there you can read the schedule for a date range, drill into a single class, search students, and look up memberships.
All requests must use HTTPS. Responses are UTF-8 JSON. Dates are ISO 8601 (YYYY-MM-DD); times are returned per class as start and end fields.

Authentication

Authenticate every request with your API key. Send it either as a bearer token in the Authorization header — Authorization: Bearer <api_key> — or in the X-API-KEY header. Requests without a valid key return 401.
Keys are per-studio and scoped: a key only ever grants read access to the data of the studio it belongs to. There is no cross-studio access and no write access. Treat your key like a password — anyone with it can read your studio data. If a key is exposed, revoke it in the dashboard and generate a new one.

How a studio gets an API key

API keys are generated from the admin dashboard. Open OPEN Manager (openmanagerapp.com), go to Business Profile, and open the API Keys section. Generate a key there, copy it, and store it somewhere safe — it is shown once.
You can hold more than one key and revoke any of them at any time from the same screen. Revoking a key takes effect immediately and breaks any integration still using it, so rotate deliberately: generate the replacement first, switch your integration over, then revoke the old key.

Endpoint reference

All paths are relative to the base URL https://app.openmanagerapp.com/api/v1. Every endpoint is GET and read-only. The machine-readable contract (request and response schemas) is in the OpenAPI document linked below.

GET /api/v1/locations

List your studio locations.
Returns: An array of locations, each with id, title, priority, and is_main.

GET /api/v1/schedule

List classes in a date range (range up to 31 days).
Parameters
date_from — Start of the range, YYYY-MM-DD.
date_to — End of the range, YYYY-MM-DD (≤31 days after date_from).
Returns: An object { date_start, date_end, classes: [...] }, where each class has id, name, date, start, end, teacher, room, capacity, booked_count, and spots_left.

GET /api/v1/classes/:id

Get one class in detail.
Parameters
:id — The class id.
Returns: A single class with its detail, including roster count and waitlist.

GET /api/v1/students

Search students (paginated, 25 per page).
Parameters
query — Optional search text (name or email).
active — Optional boolean to filter active students.
page — Optional page number (25 results per page).
Returns: An object { students: [{ id, name, email, active, ... }], page, per_page, total_entries, total_pages }.

GET /api/v1/students/:id

Get one student profile.
Parameters
:id — The student id.
Returns: A single student profile.

GET /api/v1/students/active_count

Count active students.
Returns: An object { active_count }.

GET /api/v1/students/:id/memberships

List a student's memberships and tickets.
Parameters
:id — The student id.
Returns: The student's memberships and tickets.

GET /api/v1/expiring_memberships

List memberships expiring within N days.
Parameters
within_days — Window in days; returns memberships expiring within it.
Returns: The memberships expiring within the given window.

Errors and rate limits

Errors are returned as JSON in the shape { "error": <code>, "message": <text> }, with a matching HTTP status. 401 means the API key is missing or invalid. 404 (not_found) means the requested resource does not exist or is not in your studio. 422 (invalid_params) means a parameter was malformed or out of range — for example a schedule range longer than 31 days.
The API is rate limited per key (429 when you exceed the limit). If you receive a 429, back off and retry after a short pause. Because limits are per key, heavy automated workloads should use their own dedicated key.

Frequently asked questions

Is the API read-only?

Yes. The Public API only reads your studio data — there are no endpoints that create, update, or delete anything.

Can one key see other studios?

No. Keys are per-studio and scoped: a key only ever grants read access to the data of the studio that generated it.

Where do I get an API key?

In the admin dashboard at openmanagerapp.com: Business Profile → API Keys. Generate a key there, copy it, and keep it safe — it is shown once.

How do I authenticate?

Send your key as Authorization: Bearer <api_key>, or in the X-API-KEY header. Requests without a valid key return 401.

What is the base URL?

The Public API is served at https://app.openmanagerapp.com/api/v1. The machine-readable OpenAPI document is at https://app.openmanagerapp.com/api/v1/openapi.json.
OPEN
Connecting mindful movers with premier fitness studios worldwide. Your gateway to better movement.
Quick Links
Find Studios
About Us
Contact
For Studios
Become a Partner
Studio Dashboard
Developers / API
© 2026 OPEN CLIENT. All rights reserved.
Privacy Policy
·
Terms of Service