Endpoints reference
Every path is namespaced by platform — mindbody, booker, or ghl. Below is the shape of each
group; the interactive docs have the full request/response schemas and a
try-it-out panel.
Discovery services.read
Read-only catalogs, backed by a 6-hour cache. Use these to find the IDs you'll pass to availability and bookings.
| Method | Path | Returns |
|---|---|---|
| GET | /api/v1/{platform}/services | Bookable services (MB SessionTypes, Booker treatments, GHL calendars). |
| GET | /api/v1/{platform}/classes | Class descriptions. Mindbody only — Booker returns 501. |
| GET | /api/v1/{platform}/staff | Staff / instructors / providers. |
| GET | /api/v1/{platform}/resources | Rooms / equipment. |
Pass ?activeOnly=false to include archived entries (default is active only).
Availability availability.read
GET /api/v1/{platform}/availability returns live free slots — never cached. Give it a window
(from/to, ISO 8601 UTC, ≤ 31 days) plus exactly one of serviceId, classDescriptionId
(Mindbody), or ghlCalendarId (when platform=ghl). Optional staffId, resourceId, and
durationMin narrow the results.
curl -G https://autosync.io/api/v1/mindbody/availability \
-H "Authorization: Bearer asyk_live_…" \
--data-urlencode "serviceId=12345" \
--data-urlencode "from=2026-05-15T00:00:00Z" \
--data-urlencode "to=2026-05-16T00:00:00Z" Bookings
| Method | Path | Scope | Does |
|---|---|---|---|
| POST | /api/v1/{platform}/bookings | bookings.write | Create a booking; resolves or creates the contact; dual-writes to HighLevel. |
| GET | /api/v1/{platform}/bookings/{id} | bookings.read | Fetch a normalized booking by platform ID. |
| PATCH | /api/v1/{platform}/bookings/{id} | bookings.write | Reschedule / update (only the fields you send). |
| DELETE | /api/v1/{platform}/bookings/{id} | bookings.write | Cancel; mirrors the cancel to the linked HighLevel event. |
Creating a booking needs a contact (with at least one of email, phone, ghlContactId, or
platformContactId) and a startDateTime. Set autoCreateContact: true to create the contact when no
match is found — otherwise an unknown contact returns 404 contact.not_found. Send an
Idempotency-Key so retries can't double-book.
curl -X POST https://autosync.io/api/v1/mindbody/bookings \
-H "Authorization: Bearer asyk_live_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 5f9c2b7e-3a1d-4e88-9c0a-1b2c3d4e5f60" \
-d '{
"serviceId": "12345",
"contact": { "email": "[email protected]", "firstName": "Jane" },
"startDateTime": "2026-05-15T14:00:00Z",
"staffId": "67890",
"autoCreateContact": true
}' The response includes the normalized booking, how the contact was resolved
(matched_by_email / matched_by_phone / matched_by_id / created), the ghlEventId from the
dual-write, and a partialSuccess flag if the platform booking succeeded but a follow-up step didn't.
Meta no auth
GET /api/v1/— endpoint catalog + supported platforms.GET /api/v1/openapi.json— the OpenAPI 3.1 spec.GET /api/v1/ping— auth smoke test (needs a key; echoes your resolved context).
Rather build with an AI agent than raw HTTP? The same operations are exposed as MCP tools — see Connect an AI agent.
Last updated July 2026