PlaceFull API
PlaceFull is a booking platform for studios and service businesses. Use the REST API to manage catalog, availability, bookings, payments, memberships, and customer records — or embed the public storefront surface for self-serve booking.
All successful responses use a { "data": … } envelope. Money amounts are integer minor units (cents). Timestamps are ISO-8601 strings in UTC.
Base URLs
| Environment | URL |
|---|---|
| Production | https://placefull.ai |
| Local | http://localhost:3000 |
Use the Production or Local server selector above when trying requests in this reference.
Authentication
PlaceFull accepts two credential types:
- Session bearer — passwordless login for operators and customers.
- API key — machine access for integrations and MCP (
bk_…prefix).
Passwordless session
Step 1 — request a verification code
curl -sS -X POST https://placefull.ai/auth/challenges \
-H 'Content-Type: application/json' \
-d '{"email":"you@example.com","channel":"email_code"}'
Response data.challengeId identifies the challenge. The code is delivered by email (or SMS when enabled).
Step 2 — verify and receive a session token
curl -sS -X POST https://placefull.ai/auth/verify \
-H 'Content-Type: application/json' \
-d '{"challengeId":"<challenge-id>","code":"123456"}'
Step 3 — send the token on authenticated requests
curl -sS https://placefull.ai/me/profile \
-H 'Authorization: Bearer <sessionToken>'
Session tokens expire. Repeat the flow when you receive 401 unauthorized.
API key
Create a key with POST /businesses/{businessId}/api-keys (session auth, business.manage). The plaintext bk_ key is returned once. Send it as a Bearer token on feature-gated /businesses/* routes:
curl -sS https://placefull.ai/businesses/<business-id>/customers \
-H 'Authorization: Bearer bk_your_api_key_here'
That example needs feature crm.view. API keys are not accepted on /me/*, POST /businesses, or the api-keys routes themselves — a key cannot mint its own successor. Gated operator routes also require the feature named in each operation's description (for example booking.manage).
Agents
Point an agent host at this base URL.
| What | URL |
|---|---|
| MCP (Streamable HTTP) | POST https://placefull.ai/mcp |
| Server card | https://placefull.ai/.well-known/mcp.json |
| Agent guide | https://placefull.ai/llms.txt |
| OAuth metadata | https://placefull.ai/.well-known/oauth-authorization-server |
| Operator setup (console) | https://placefull.ai/app/settings?show=integrations |
Claude (recommended): paste https://placefull.ai/mcp into Settings → Connectors → Add custom connector → Connect → sign in with the operator email. OAuth 2.1 + PKCE — no API key.
Cursor / CI: create a bk_ API key and send Authorization: Bearer bk_… on POST /mcp.
Unauthenticated POST /mcp returns 401 with WWW-Authenticate pointing at protected-resource metadata so clients discover OAuth automatically.
API surfaces
| Surface | Prefix | Audience |
|---|---|---|
| Operator API | /businesses/…, /offerings/…, /locations/…, … | Operators and integrations managing a business |
| Storefront API | /storefront/… | Public embeddable booking widgets |
| Customer self-service | /me/… | Signed-in customers managing their profile and bookings |
Storefront routes are public read (no auth) except booking hold and confirm, which require a customer session. Storefront routes are rate limited — see below.
Errors
Errors return a non-2xx status with this envelope:
{
"error": {
"code": "validation",
"message": "email is required",
"details": {}
}
}
| Code | HTTP | Meaning |
|---|---|---|
validation | 400 | Invalid input |
unauthorized | 401 | Missing or invalid credentials |
forbidden | 403 | Authenticated but not permitted (missing feature or role) |
not_found | 404 | Resource does not exist |
conflict | 409 | State conflict (capacity, duplicate, or concurrent hold lost) |
too_many_requests | 429 | Rate limit exceeded |
internal_error | 500 | Unexpected server error |
Rate limits
Storefront routes (/storefront/…) are limited to 480 requests per minute per visitor by default (STOREFRONT_RATE_LIMIT_MAX / STOREFRONT_RATE_LIMIT_WINDOW_MS). The visitor is the cf-connecting-ip header when it is a single IP, otherwise the connection address. Cart and other unauthenticated storefront writes have a separate limit of 60 per minute (STOREFRONT_WRITE_RATE_LIMIT_MAX). When exceeded, the API returns 429 too_many_requests with a Retry-After header (seconds until the window resets). Operator routes are not globally rate limited in v1.
Pagination
Offset pagination — CRM customer list (GET /businesses/:id/customers):
- Query:
limit(default 50),offset(default 0) - Response
data:{ customers, total, limit, offset }
Cursor pagination — storefront offering lists (GET /storefront/locations/:id/offerings), the Products list (GET /businesses/:id/products), and one option's stock ledger (GET /products/:productId/variants/:variantId/stock):
- Query:
limit,cursor(opaque; omit on first page) - Response
data:{ items, nextCursor }— passnextCursorascursorfor the next page;nullmeans end.
Versioning
info.version tracks the REST contract. Breaking changes (removed fields, renamed paths, semantic changes) bump the major version. Additive changes (new optional fields, new endpoints) are minor. The MCP surface is versioned separately via tool schemas.
Download this spec from /openapi.json to generate clients or import into Postman.
Endpoints
Every operation, grouped as the interactive reference groups them. Exact request and response schemas, examples and the required feature for each gated operation are in the OpenAPI document: https://placefull.ai/openapi.json. Interactive reference with "try it": https://placefull.ai/docs.
Platform
system — Process health and platform status
GET /app-config— Public client configurationGET /health— Health checkGET /health/worker— Worker health checkGET /platform/memberships/report— The daily membership report, as factsPOST /platform/memberships/report/send— Send a day’s membership report againGET /platform/overview— Every live location, and who is waiting to joinGET /platform/legacy-mirrors— Legacy mirrorsPOST /platform/legacy-mirrors— Start a legacy mirrorPOST /platform/legacy-mirrors/{mirrorId}/run— Run a legacy mirror nowPOST /platform/legacy-mirrors/{mirrorId}/stop— Stop a legacy mirrorPOST /platform/legacy-mirrors/{mirrorId}/start— Start a stopped legacy mirrorPOST /platform/legacy-mirrors/{mirrorId}/cutover— Cut a legacy mirror over to livePOST /platform/legacy-mirrors/{mirrorId}/preview— A short link to a mirror’s shadow pageGET /platform/calls— Calls to the support lineGET /platform/calls/{callId}— One call, with its transcriptGET /platform/calls/{callId}/recording— A call’s recordingGET /platform/threads— Texts to the support line, one conversation per numberGET /platform/threads/{threadId}— One text conversation, with its messagesPOST /platform/threads/{threadId}/take— Take a text conversationPOST /platform/threads/{threadId}/messages— Reply in a text conversationPOST /platform/threads/{threadId}/complete— Complete a text conversationPOST /platform/threads/{threadId}/assign— Put an unknown number with a locationPOST /platform/threads/{threadId}/draft— Draft a replyGET /platform/texts/{textId}— The conversation a text belongs toGET /platform/texts/{textId}/media/{index}— One photo from a textGET /platform/feedback— How customers rated booking online, every studioPOST /places/autocomplete— Autocomplete an addressPOST /places/details— Resolve a place to an address and coordinatesPOST /places/resolve— Qualify a free-text addressPOST /waitlist— Join the coming-soon waitlist
auth — Passwordless authentication
POST /auth/challenges— Request a passwordless verification challengePOST /auth/verify— Verify a challenge and receive a session tokenGET /auth/verify— Open a magic link: a page that posts it back to verifyGET /auth/me— Get the authenticated person (auth namespace)POST /auth/sign-out— Revoke the current sessionPOST /auth/sign-out-all— Revoke every session the signed-in person holds
person — Person identities
GET /persons/{id}— Get a personPATCH /persons/{id}— Update a person
access — Team roles and feature gates
GET /businesses/{businessId}/team— List team members (featureteam.view)GET /businesses/{businessId}/team/me— The caller’s own team row (featurelocation.view)POST /businesses/{businessId}/team— Add a team member (featureteam.manage)GET /businesses/{businessId}/user-roles— List user roles for a business (featureteam.view)POST /businesses/{businessId}/user-roles— Grant a user role (featureteam.manage)GET /businesses/{businessId}/features— List enabled business features (featurebusiness.view)PUT /businesses/{businessId}/features— Set enabled business features (featurebusiness.manage)PATCH /user-roles/{id}— Update a user role (featureteam.manage)POST /user-roles/{id}/invite— Email a team member their invite again (featureteam.manage)POST /user-roles/{id}/archive— Archive a user role (featureteam.manage)GET /businesses/{businessId}/terminals— List terminals (featureteam.manage)POST /businesses/{businessId}/terminals— Add a terminal (featureteam.manage)PATCH /businesses/{businessId}/terminals/{terminalId}— Rename a terminal (featureteam.manage)POST /businesses/{businessId}/terminals/{terminalId}/pairing-code— A fresh pairing code (featureteam.manage)POST /businesses/{businessId}/terminals/{terminalId}/revoke— Revoke a terminal (featureteam.manage)POST /businesses/{businessId}/team/{personId}/pin— Give a team member a terminal PIN (featureteam.manage)DELETE /businesses/{businessId}/team/{personId}/pin— Remove a team member’s terminal PIN (featureteam.manage)POST /terminal/pair— Pair this device as a terminalGET /terminal/me— Where this terminal is pairedPOST /terminal/sign-in— Sign in on a terminal with a PIN
Operator API
business — Business profiles and settings
POST /businesses— Create a business and its first locationPOST /businesses/{businessId}/legal/merchant-agreement/accept— Accept the current Merchant Agreement and Privacy Policy (featurebusiness.manage)GET /businesses— List businessesGET /businesses/{id}— Get a business by IDPATCH /businesses/{id}— Update a business (featurebusiness.manage)POST /businesses/{id}/archive— Archive a business (featurebusiness.manage)PATCH /businesses/{id}/slug— Override the business slug (featurebusiness.manage)POST /businesses/{id}/slug/revert— Revert a business slug to auto-generated from the current name (featurebusiness.manage)POST /businesses/{id}/message-preview— Preview unsaved customer-facing words (featurebusiness.manage)GET /businesses/{id}/message-changes— Who last changed each customer-facing line (featurebusiness.manage)POST /businesses/{businessId}/api-keys— Create an API key (featurebusiness.manage)GET /businesses/{businessId}/api-keys— List API keys (featurebusiness.manage)DELETE /businesses/{businessId}/api-keys/{id}— Revoke an API key (featurebusiness.manage)POST /businesses/{businessId}/locations/{locationId}/page-preview— Render the location page with unsaved edits (featurelocation.manage)POST /businesses/{businessId}/locations/{locationId}/listing-preview— Render an offering’s booking page from an unsaved editor form (featurecatalog.manage)POST /businesses/{businessId}/locations/{locationId}/passes-preview— Render the passes page with an unsaved plan (featurecatalog.manage)GET /businesses/{businessId}/tax-rates— List active tax rates (featurebusiness.view)GET /businesses/{businessId}/tax-setup— Tax setup for the Payments panel (featurebusiness.manage)PUT /businesses/{businessId}/tax-rates— Replace active tax rates (featurebusiness.manage)PATCH /businesses/{businessId}/tax-rates/{id}— Update a tax rate (featurebusiness.manage)POST /businesses/{businessId}/tax-rates/{id}/archive— Archive a tax rate (featurebusiness.manage)GET /businesses/{businessId}/revenue-categories— List revenue categories (featurebusiness.view)POST /businesses/{businessId}/revenue-categories— Create a revenue category (featurebusiness.manage)PATCH /businesses/{businessId}/revenue-categories/{id}— Update a revenue category (featurebusiness.manage)POST /businesses/{businessId}/revenue-categories/{id}/archive— Archive a revenue category (featurebusiness.manage)GET /businesses/{businessId}/discounts— List discounts (featurecatalog.manage or booking.manage)POST /businesses/{businessId}/discounts— Create a discount (featurecatalog.manage)GET /businesses/{businessId}/discounts/{id}— Read a discount (featurecatalog.manage or booking.manage)PATCH /businesses/{businessId}/discounts/{id}— Update a discount (featurecatalog.manage)POST /businesses/{businessId}/discounts/{id}/archive— Archive a discount (featurecatalog.manage)GET /businesses/{businessId}/calendar-connections— Google Calendar for a person or a location’s spaces (featurelocation.view)POST /businesses/{businessId}/calendar-connections/start— Start connecting a Google Calendar (featurelocation.view)GET /businesses/{businessId}/calendar-connections/{connectionId}/calendars— The calendars on a Google account (featurelocation.view)PATCH /businesses/{businessId}/calendar-connections/{connectionId}— Save which calendars a connection uses (featurelocation.view)DELETE /businesses/{businessId}/calendar-connections/{connectionId}— Disconnect a Google Calendar (featurelocation.view)GET /businesses/{businessId}/calendar/busy— Google busy time for the calendar’s lanes (featurelocation.view)GET /businesses/{businessId}/changes— Console freshness marker (featurebooking.view)GET /businesses/{businessId}/home— Today — the operator console's first tab (featurelocation.view)GET /businesses/{businessId}/home/activity— Today's Activity — booked, added, cancelled and moved (featurelocation.view)POST /businesses/{businessId}/home/activity/seen— Mark Activity read (featurelocation.view)POST /businesses/{businessId}/home/needs-you/dismiss— Dismiss Needs-you rows (featurelocation.view)GET /businesses/{businessId}/locations/{locationId}/readiness— Can a customer book this location, and what is first if not (featurelocation.view)GET /businesses/{businessId}/my-day— Day view of the schedule and roster (featurebooking.view)GET /businesses/{businessId}/calendar— Ops calendar range for the Calendar tab (featurelocation.view)GET /businesses/{businessId}/calendar/items— Posts and scheduled messages on the Calendar’s days (featurelocation.view)GET /businesses/{businessId}/journey-sends— One day’s scheduled messages, with each recipient (featurecatalog.manage)GET /businesses/{businessId}/journey— List the studio journey (featurebusiness.view)POST /businesses/{businessId}/journey/steps— Add a studio journey step (featurecatalog.manage)PATCH /businesses/{businessId}/journey/steps/{stepId}— Update a studio journey step (featurecatalog.manage)DELETE /businesses/{businessId}/journey/steps/{stepId}— Archive a studio journey step (featurecatalog.manage)PUT /businesses/{businessId}/journey/order— Reorder studio journey steps (featurecatalog.manage)GET /businesses/{businessId}/journey/arrive-and-leave— Read the business's Arrive and leave (featurebusiness.view)PUT /businesses/{businessId}/journey/arrive-and-leave— Set the business's Arrive and leave (featurecatalog.manage)GET /businesses/{businessId}/social-connections— A location’s Instagram and Facebook connection (featurecatalog.manage)GET /businesses/{businessId}/social-connections/bio-link— Instagram’s bio link (featurecatalog.manage)POST /businesses/{businessId}/social-connections/start— Start connecting Instagram and Facebook (featurecatalog.manage)POST /businesses/{businessId}/social-connections— Keep the Page the owner picked (featurecatalog.manage)DELETE /businesses/{businessId}/social-connections/{connectionId}— Disconnect Instagram and Facebook (featurecatalog.manage)GET /businesses/{businessId}/social-voice— How the studio writes its posts (featurecatalog.manage)PUT /businesses/{businessId}/social-voice— Rewrite the studio’s voice (featurecatalog.manage)POST /businesses/{businessId}/social-connections/{connectionId}/learn-voice— Learn the studio’s voice again (featurecatalog.manage)POST /businesses/{businessId}/social-posts/preview— Preview a social post (featurecatalog.manage)POST /businesses/{businessId}/social-posts/words— Write the words of a social post again (featurecatalog.manage)GET /businesses/{businessId}/social-posts/frame.jpg— One typeset frame of a social post, drawn now (featurecatalog.manage)GET /businesses/{businessId}/social-posts/card.jpg— The Facebook card a class date’s post will show (featurecatalog.manage)GET /businesses/{businessId}/social-posts/suggestions— Up next: what is worth posting today (featurecatalog.manage)POST /businesses/{businessId}/social-posts— Post to Instagram and Facebook (featurecatalog.manage)GET /businesses/{businessId}/social-posts— Scheduled and recent social posts (featurecatalog.manage)GET /businesses/{businessId}/social-posts/{postId}— One social post (featurecatalog.manage)PATCH /businesses/{businessId}/social-posts/{postId}— Edit a scheduled social post (featurecatalog.manage)POST /businesses/{businessId}/social-posts/{postId}/cancel— Cancel a social post that has not gone out (featurecatalog.manage)POST /businesses/{businessId}/social-posts/{postId}/targets/{targetId}/retry— Retry a social post that failed (featurecatalog.manage)GET /businesses/{businessId}/social-results— What a month of social posts brought (featurecatalog.manage)
location — Physical locations
GET /locations/{id}/agreements— List a location's waivers & terms (featurelocation.view)POST /locations/{id}/agreements— Add a waiver or terms document (featurecatalog.manage)PATCH /locations/{id}/agreements/{documentId}— Change a waiver or terms document (featurecatalog.manage)POST /locations/{id}/agreements/{documentId}/archive— Remove a waiver or terms document (featurecatalog.manage)GET /businesses/{businessId}/locations— List locations for a businessPOST /businesses/{businessId}/locations— Create a location (featurelocation.manage)GET /locations/{id}— Get a locationPATCH /locations/{id}— Update a location (featurelocation.manage)POST /locations/{id}/archive— Archive a location (featurelocation.manage)PATCH /locations/{id}/slug— Override a location slug (featurelocation.manage)POST /locations/{id}/slug/revert— Revert a location slug to auto-generated from the current name (featurelocation.manage)GET /locations/{id}/closures— List a location's upcoming blocked time (featurelocation.view)GET /locations/{id}/closures/holiday-suggestions— US federal holidays for the location year (featurelocation.view)POST /locations/{id}/closures— Block time or add a holiday (featurelocation.manage)GET /locations/{id}/calendar-feeds— List subscribe calendars for a location (featurelocation.view)POST /locations/{id}/calendar-feeds— Create a subscribe calendar (featurelocation.view)POST /locations/{id}/calendar-feeds/{feedId}/rotate— Replace a subscribe calendar link (featurelocation.view)POST /locations/{id}/calendar-feeds/{feedId}/revoke— Stop a subscribe calendar (featurelocation.view)DELETE /locations/closures/{closureId}— Remove blocked time (featurelocation.manage)
catalog — Spaces, team, and offerings
GET /businesses/{businessId}/assets— List photos (featurelocation.view)POST /businesses/{businessId}/assets— Upload a photo (featurecatalog.manage)GET /assets/{id}— Get a photo (featurelocation.view)PATCH /assets/{id}— Update a photo’s title, alt text or tags (featurecatalog.manage)POST /assets/{id}/archive— Archive a photo (featurecatalog.manage)POST /assets/{id}/replace— Replace a photo’s file (featurecatalog.manage)DELETE /assets/{id}— Delete a photo (featurecatalog.manage)POST /offerings/{id}/images/attach— Attach a photo to an offering (featurecatalog.manage)POST /resources/{id}/images/attach— Attach a photo to a space (featurecatalog.manage)POST /instructor-profiles/{id}/images/attach— Attach a photo as an instructor headshot (featureteam.manage)POST /locations/{id}/images/attach— Attach a photo to a location (featurelocation.manage)POST /locations/{id}/logo/attach— Attach a photo as the location logo (featurelocation.manage)POST /locations/{id}/header/attach— Attach a photo as the location header image (featurelocation.manage)POST /businesses/{businessId}/locations/{locationId}/resources— Create a space (featurecatalog.manage)GET /businesses/{businessId}/locations/{locationId}/resources— List spaces at a location (featurelocation.view)GET /resources/{id}— Get a space (featurelocation.view)GET /resources/{id}/floor— Seating chart for one day (featurebooking.view)PATCH /resources/{id}— Update a space (featurecatalog.manage)POST /resources/{id}/archive— Archive a space (featurecatalog.manage)POST /businesses/{businessId}/instructor-profiles— Create an instructor profile (featureteam.manage)GET /businesses/{businessId}/instructor-profiles— List instructor profiles (featurelocation.view)GET /instructor-profiles/{id}— Get an instructor profile (featurelocation.view)GET /instructor-profiles/{id}/time-off— List a team member's upcoming time off (featurelocation.view)POST /instructor-profiles/{id}/time-off— Add time off for a team member (featureteam.manage)PATCH /instructor-profiles/{id}— Update an instructor profile (featureteam.manage)POST /instructor-profiles/{id}/archive— Archive an instructor profile (featureteam.manage)POST /businesses/{businessId}/locations/{locationId}/offerings— Create an offering (featurecatalog.manage)GET /businesses/{businessId}/locations/{locationId}/offerings/slug-availability— Check whether an offering slug is available at a location (featurecatalog.manage)GET /businesses/{businessId}/locations/{locationId}/offerings— List offerings at a location (featurelocation.view)PATCH /businesses/{businessId}/locations/{locationId}/offerings/order— Reorder offerings of one type (featurecatalog.manage)GET /offerings/{id}— Get an offering (featurelocation.view)GET /offerings/{id}/overview— Get an offering’s upcoming dates (featurelocation.view)GET /offerings/{id}/share— Get an offering as a post to share (featurelocation.view)PATCH /offerings/{id}— Update an offering (featurecatalog.manage)PATCH /offerings/{id}/slug— Override an offering slug (unique per location) (featurecatalog.manage)POST /offerings/{id}/slug/revert— Revert an offering slug to auto-generated from the current name (featurecatalog.manage)POST /offerings/{id}/duplicate— Copy an offering as a new draft (featurecatalog.manage)POST /offerings/{id}/publish— Show an offering for booking (featurecatalog.manage)POST /offerings/{id}/hide— Hide an offering from booking (featurecatalog.manage)POST /offerings/{id}/archive— Archive an offering (featurecatalog.manage)DELETE /offerings/{id}— Delete a draft (featurecatalog.manage)GET /businesses/{businessId}/locations/{locationId}/series— List series at a location (featurelocation.view)GET /businesses/{businessId}/offerings/{id}/series/preview— Preview series dates (featurelocation.view)GET /businesses/{businessId}/offerings/{id}/series— List series on an offering (featurelocation.view)POST /businesses/{businessId}/offerings/{id}/series— Create a series (featurecatalog.manage)GET /businesses/{businessId}/series/{id}— Get a series (featurelocation.view)PATCH /businesses/{businessId}/series/{id}— Update a series (featurecatalog.manage)DELETE /businesses/{businessId}/series/{id}— Archive a series (featurecatalog.manage)POST /businesses/{businessId}/series/{id}/publish— Publish a series (featurecatalog.manage)POST /businesses/{businessId}/series/{id}/hide— Hide a series (featurecatalog.manage)GET /businesses/{businessId}/series/{id}/overview— Series overview — roster, dates, money collected (featurebooking.view)PATCH /businesses/{businessId}/occurrences/{occurrenceId}— Change one class date: who teaches it, which room, how many spots (featurecatalog.manage)POST /businesses/{businessId}/occurrences/{occurrenceId}/cancel— Cancel one class date — a series date keeps the series, a drop-in date refunds its bookings (featurebooking.manage)DELETE /businesses/{businessId}/occurrences/{occurrenceId}— Take back a class date added by mistake — a one-off nobody has booked (featurecatalog.manage)GET /businesses/{businessId}/questions— List the checkout-question catalogPOST /businesses/{businessId}/questions— Create a checkout questionPATCH /businesses/{businessId}/questions/{questionId}— Update a checkout questionPOST /businesses/{businessId}/questions/{questionId}/archive— Archive a checkout questionPOST /offerings/{id}/images— Upload an offering photo (featurecatalog.manage)POST /resources/{id}/images— Upload a space photo (featurecatalog.manage)POST /instructor-profiles/{id}/images— Upload an instructor headshot (featureteam.manage)POST /locations/{id}/images— Upload a location photo (featurelocation.manage)GET /locations/{id}/images— List location photos (featurelocation.view)PATCH /locations/{id}/images/order— Reorder location photos (featurelocation.manage)GET /offerings/{id}/images— List offering photos (featurelocation.view)GET /resources/{id}/images— List space photos (featurelocation.view)GET /instructor-profiles/{id}/images— List instructor headshots (featurelocation.view)PATCH /resources/{id}/images/order— Reorder space photos (featurecatalog.manage)PATCH /offerings/{id}/images/order— Reorder offering photos (featurecatalog.manage)GET /images/{id}— Get a photo placement (featurelocation.view)PATCH /images/{id}— Frame a photo placement (featurecatalog.manage)DELETE /images/{id}— Delete a photo (featurecatalog.manage)POST /locations/{id}/logo— Upload a location logo (featurelocation.manage)GET /locations/{id}/logo— List a location's logo placement (featurelocation.view)POST /locations/{id}/header— Upload a location header image (featurelocation.manage)GET /locations/{id}/header— List the location header image (featurelocation.view)DELETE /locations/{id}/header— Remove a location header image (featurelocation.manage)DELETE /locations/{id}/logo— Remove a location logo (featurelocation.manage)GET /businesses/{businessId}/offerings/{offeringId}/journey— List a listing's journey (featurelocation.view)POST /businesses/{businessId}/offerings/{offeringId}/journey/steps— Add a listing journey step (featurecatalog.manage)PATCH /businesses/{businessId}/offerings/{offeringId}/journey/steps/{stepId}— Update a listing journey step (featurecatalog.manage)DELETE /businesses/{businessId}/offerings/{offeringId}/journey/steps/{stepId}— Archive a listing journey step (featurecatalog.manage)PUT /businesses/{businessId}/offerings/{offeringId}/journey/order— Reorder a listing's own journey steps (featurecatalog.manage)PUT /businesses/{businessId}/offerings/{offeringId}/journey/off/{stepId}— Switch a studio step off for one listing (featurecatalog.manage)PUT /businesses/{businessId}/offerings/{offeringId}/journey/timing/{stepId}— Retime the studio Check in, Collect balance, Check out or Complete for one listing (featurecatalog.manage)GET /businesses/{businessId}/offerings/{offeringId}/journey/arrive-and-leave— Read a listing's Arrive and leave (featurelocation.view)PUT /businesses/{businessId}/offerings/{offeringId}/journey/arrive-and-leave— Set a listing's Arrive and leave (featurecatalog.manage)PUT /businesses/{businessId}/offerings/{offeringId}/pieces— Turn a listing's Pieces on or off (featurecatalog.manage)
products — Products, their options, and the stock ledger
GET /businesses/{businessId}/products— List products (featurelocation.view)POST /businesses/{businessId}/products— Create a product (featurecatalog.manage)PATCH /businesses/{businessId}/products/order— Reorder products (featurecatalog.manage)GET /products/{productId}— Get a product (featurelocation.view)PATCH /products/{productId}— Update a product (featurecatalog.manage)POST /products/{productId}/publish— Put a product on sale (featurecatalog.manage)POST /products/{productId}/hide— Hide a product (featurecatalog.manage)POST /products/{productId}/archive— Archive a product (featurecatalog.manage)POST /products/{productId}/duplicate— Copy a product as a new draft (featurecatalog.manage)GET /products/{productId}/variants/{variantId}/stock— List an option's stock ledger (featurelocation.view)POST /products/{productId}/variants/{variantId}/stock— Record received, counted or adjusted stock (featurecatalog.manage)GET /products/{productId}/images— List a product's photos (featurelocation.view)POST /products/{productId}/images— Upload a product photo (featurecatalog.manage)POST /products/{productId}/images/attach— Attach a library photo to a product (featurecatalog.manage)PATCH /products/{productId}/images/order— Reorder a product's photos (featurecatalog.manage)POST /businesses/{businessId}/order-lines/{orderLineId}/cancel— Cancel an order line — refund and restock (featurebooking.manage)GET /businesses/{businessId}/order-lines— List pickups (featurebooking.view)POST /businesses/{businessId}/order-lines/{orderLineId}/fulfill— Mark an order line picked up (featurebooking.checkin)
availability — Schedule projection and bookable slots
GET /offerings/{id}/availability-explain— Why these times — one day of a reservation’s or rental’s open times, explained (featurelocation.view)GET /availability— Get projected availability slotsGET /occurrence— Get a single bookable slotPOST /occurrences/materialize— Materialize a bookable slot into a booked timeGET /locations/{locationId}/is-open— Check whether a location is currently openPOST /businesses/{businessId}/schedules— Create a schedule (featurecatalog.manage)GET /businesses/{businessId}/schedules— List schedules for a business (featurelocation.view)GET /schedules/{id}— Get a schedule (featurelocation.view)PATCH /schedules/{id}— Update a schedule (featurecatalog.manage)POST /schedules/{id}/archive— Archive a schedule (featurecatalog.manage)GET /schedules/{id}/health— Validate that a schedule projects sane dates (featurelocation.view)GET /schedules/{id}/occurrences— Project schedule dates in a window (featurelocation.view)DELETE /schedules/{id}— Delete a schedule (not supported)
booking — Operator booking lifecycle
POST /businesses/{businessId}/booking-imports— Start a booking import (featurebooking.manage)GET /businesses/{businessId}/booking-imports/latest— The latest booking import (featurebooking.manage)GET /businesses/{businessId}/booking-imports/sample.csv— The booking import’s sample file (featurebooking.manage)GET /businesses/{businessId}/booking-imports/{importId}— Get a booking import (featurebooking.manage)PATCH /businesses/{businessId}/booking-imports/{importId}— Save a booking import’s choices (featurebooking.manage)POST /businesses/{businessId}/booking-imports/{importId}/read-times— Check how a booking import reads its times (featurebooking.manage)POST /businesses/{businessId}/booking-imports/{importId}/match-listings— Match a booking import’s listings and people (featurebooking.manage)POST /businesses/{businessId}/booking-imports/{importId}/rows— Import a chunk of booking rows (featurebooking.manage)POST /businesses/{businessId}/booking-imports/{importId}/issues/{issueId}/resolve— Answer a booking import question (featurebooking.manage)POST /businesses/{businessId}/booking-imports/{importId}/issues/{issueId}/skip— Skip a booking import question (featurebooking.manage)POST /businesses/{businessId}/inline-ai/import-columns— Match an import’s columns with the model (featurebooking.manage)POST /businesses/{businessId}/inline-ai/import-listings— Match an import’s listings and people with the model (featurebooking.manage)POST /businesses/{businessId}/bookings— Create a booking hold (featurebooking.manage)GET /businesses/{businessId}/availability— List bookable dates and times for operators (includes past-cutoff, in-progress, and closed starts) (featurebooking.manage)POST /businesses/{businessId}/carts— Create an operator pay-by-link cart (featurebooking.manage)POST /businesses/{businessId}/carts/{token}/checkout— Check out an operator cart at the desk (featurebooking.manage)POST /businesses/{businessId}/carts/{token}/cancel— Cancel a staff cart and release its holds (featurebooking.manage)POST /businesses/{businessId}/carts/{token}/email— Email a pay link to the cart customer (featurebooking.manage)POST /businesses/{businessId}/bookings/{bookingId}/agreements/send— Send the customer a link to accept the booking's waivers & terms (featurebooking.checkin)POST /businesses/{businessId}/bookings/{bookingId}/agreements/{documentId}/override— Mark one of the booking's waivers & terms agreed (featurebooking.checkin)POST /businesses/{businessId}/bookings/{bookingId}/pay-link— Send a held booking its pay link, by email or text (featurebooking.manage)GET /businesses/{businessId}/bookings— List bookings for the operator console (featurebooking.view)GET /businesses/{businessId}/bookings/export.csv— Export the bookings list as CSV (featurebooking.view)GET /businesses/{businessId}/bookings/{bookingId}— Get a booking (featurebooking.view)POST /businesses/{businessId}/bookings/{bookingId}/confirm— Confirm a held booking with payment (featurebooking.manage)POST /businesses/{businessId}/bookings/{bookingId}/collect-balance— Collect remaining booking balance (featurebooking.manage)POST /businesses/{businessId}/bookings/{bookingId}/record-payment— Record a booking as paid through a payment method (featurebooking.manage)PUT /businesses/{businessId}/bookings/{bookingId}/answers— Write what the desk asked onto a booking (featurebooking.manage)GET /businesses/{businessId}/bookings/{bookingId}/add-ons— What a booking can still add at the class (featurebooking.view)POST /businesses/{businessId}/bookings/{bookingId}/add-ons— Add pieces to a booking on its saved card (featurebooking.manage)POST /businesses/{businessId}/bookings/{bookingId}/cancel— Cancel a booking (featurebooking.manage)POST /businesses/{businessId}/enrollments/{enrollmentId}/cancel— Cancel a series enrollment (featurebooking.manage)POST /businesses/{businessId}/bookings/{bookingId}/email— Change the email a booking belongs to (featurebooking.manage)POST /businesses/{businessId}/bookings/{bookingId}/reschedule— Reschedule a booking (featurebooking.manage)PATCH /businesses/{businessId}/bookings/{bookingId}— Edit a booking (featurebooking.manage)POST /businesses/{businessId}/bookings/{bookingId}/spots— Change how many spots a booking holds (featurebooking.manage)GET /businesses/{businessId}/bookings/{bookingId}/places— Where a booking could sit: its room’s tables, and the other rooms (featurebooking.manage)GET /businesses/{businessId}/bookings/{bookingId}/rooms— Rooms a booking could move to (featurebooking.manage)POST /businesses/{businessId}/bookings/{bookingId}/check-in— Check in a booking (status checked_in) (featurebooking.checkin)GET /businesses/{businessId}/bookings/{bookingId}/desk-check-in— Preview early check-in stay, tables, and next opening (featurebooking.checkin)POST /businesses/{businessId}/bookings/{bookingId}/check-in-at-desk— Desk check-in (may start now and seat a table) (featurebooking.checkin)POST /businesses/{businessId}/bookings/{bookingId}/check-out— Check out a booking (status checked_out; frees a sole booking's space early) (featurebooking.checkin)POST /businesses/{businessId}/bookings/{bookingId}/undo-check-out— Undo check-out (back to checked_in) (featurebooking.checkin)POST /businesses/{businessId}/money-effects— Dry-run: declare the money effect of an action without executing it (featurebooking.view)POST /businesses/{businessId}/bookings/{bookingId}/undo-check-in— Undo check-in (back to confirmed) (featurebooking.checkin)POST /businesses/{businessId}/bookings/{bookingId}/no-show— Mark a booking as no-show (featurebooking.checkin)GET /businesses/{businessId}/occurrences/{occurrenceId}/positions— Class date fill map (featurebooking.view)DELETE /businesses/{businessId}/occurrences/{occurrenceId}/waitlist/{entryId}— Take someone off a class date's waitlist (featurebooking.manage)POST /businesses/{businessId}/bookings/{bookingId}/table— Move a party to another table (featurebooking.checkin)POST /businesses/{businessId}/bookings/{bookingId}/positions/move— Move, swap, or assign one spot (featurebooking.checkin)POST /businesses/{businessId}/occurrences/{occurrenceId}/message— Email everyone booked on this date (featurebooking.checkin)POST /businesses/{businessId}/wallet-notes— Message Wallet holders (featurecrm.notes)GET /businesses/{businessId}/channels— List where spots are sold elsewhere (featurebooking.view)POST /businesses/{businessId}/channels— Add where spots are sold elsewhere (featurebooking.manage)PATCH /businesses/{businessId}/channels/{channelId}— Rename or archive where spots are sold elsewhere (featurebooking.manage)GET /businesses/{businessId}/occurrences/{occurrenceId}/claims— List spots sold elsewhere on this date (featurebooking.view)POST /businesses/{businessId}/occurrences/{occurrenceId}/claims— Mark spots sold elsewhere (featurebooking.checkin)PUT /businesses/{businessId}/channels/{channelId}/claims/by-ref/{externalRef}— Sync spots sold elsewhere by reference (featurebooking.checkin)POST /businesses/{businessId}/channels/{channelId}/claims/sync— Sync many spots sold elsewhere at once (featurebooking.checkin)PATCH /businesses/{businessId}/claims/{claimId}— Edit spots sold elsewhere (featurebooking.checkin)DELETE /businesses/{businessId}/claims/{claimId}— Release spots sold elsewhere (featurebooking.checkin)PUT /businesses/{businessId}/carts/{token}/code— Add or remove a staff cart's code (featurebooking.manage)GET /businesses/{businessId}/locations/{locationId}/occupancy— Who is at this location right now (featurebooking.view)GET /businesses/{businessId}/bookings/{bookingId}/timeline— Get booking event timeline (featurebooking.view)GET /businesses/{businessId}/bookings/{bookingId}/steps— List a booking's journey (featurebooking.view)POST /businesses/{businessId}/bookings/{bookingId}/steps/{bookingStepId}/mark— Mark a booking journey step (featurebooking.checkin)POST /businesses/{businessId}/bookings/{bookingId}/steps/{bookingStepId}/skip— Skip a booking journey step (featurebooking.checkin)POST /businesses/{businessId}/bookings/{bookingId}/steps/{bookingStepId}/run— Run a booking journey step now (featurebooking.checkin)POST /businesses/{businessId}/occurrences/{occurrenceId}/steps/{stepId}/mark— Mark a journey step for everyone on a date (featurebooking.checkin)GET /businesses/{businessId}/bookings/{bookingId}/steps/{bookingStepId}/message— The message a booking step would send (featurebooking.view)POST /businesses/{businessId}/bookings/{bookingId}/steps/{bookingStepId}/resend— Send a booking step’s message again (featurebooking.checkin)POST /businesses/{businessId}/journey/preview— Preview a journey message over a sample booking (featurebusiness.view)GET /businesses/{businessId}/bookings/{bookingId}/pieces— List a booking's pieces (featurebooking.view)GET /businesses/{businessId}/occurrences/{occurrenceId}/pieces— List a class date's pieces (featurebooking.view)POST /businesses/{businessId}/bookings/{bookingId}/pieces— Add a piece to a booking (featurebooking.manage)POST /businesses/{businessId}/bookings/{bookingId}/pieces/remind— Send a booking's pickup reminder now (featurebooking.manage)GET /businesses/{businessId}/pieces— List the shelf (featurebooking.view)POST /businesses/{businessId}/pieces/move— Move pieces to a stage (featurebooking.manage)PATCH /businesses/{businessId}/pieces/{pieceId}— Rename a piece or set its shelf (featurebooking.manage)DELETE /businesses/{businessId}/pieces/{pieceId}— Remove a piece (featurebooking.manage)POST /businesses/{businessId}/pieces/{pieceId}/booking— Move a piece to another booking (featurebooking.manage)POST /businesses/{businessId}/pieces/{pieceId}/photos— Add photos to a piece (featurebooking.manage)DELETE /businesses/{businessId}/pieces/{pieceId}/photos/{photoId}— Delete a photo of a piece (featurebooking.manage)POST /businesses/{businessId}/inline-ai/name-piece— Name a piece from its photo (featurebooking.manage)GET /businesses/{businessId}/locations/{locationId}/piece-shelves— Get a location's shelves (featurebooking.view)PUT /businesses/{businessId}/locations/{locationId}/piece-shelves— Set a location's shelves (featurebooking.manage)
commerce — Payments, balances, and Stripe Connect
GET /businesses/{businessId}/accounting/connect— Start a QuickBooks Online connection (featurebusiness.manage)POST /businesses/{businessId}/accounting/connect/complete— Finish a QuickBooks Online connection (featurebusiness.manage)GET /businesses/{businessId}/accounting/connection— Get the live accounting connection (featurebusiness.manage)PATCH /businesses/{businessId}/accounting/connection— Update the posting start date (featurebusiness.manage)DELETE /businesses/{businessId}/accounting/connection— Disconnect QuickBooks Online (featurebusiness.manage)GET /businesses/{businessId}/accounting/map— Propose the QuickBooks account map (featurebusiness.manage)PUT /businesses/{businessId}/accounting/map— Confirm QuickBooks account selections (featurebusiness.manage)POST /businesses/{businessId}/accounting/map/{category}/create— Create a QuickBooks account and confirm it (featurebusiness.manage)GET /businesses/{businessId}/accounting/postings— List recent QuickBooks postings (featurebusiness.manage)POST /businesses/{businessId}/accounting/postings/{batchId}/retry— Retry a failed QuickBooks posting (featurebusiness.manage)POST /businesses/{businessId}/stripe/connect-account— Create a Stripe Connect account for the business (featurebusiness.manage)POST /businesses/{businessId}/stripe/sandbox-account— Create a verified Stripe test account (development and staging only) (featurebusiness.manage)POST /businesses/{businessId}/stripe/account-session— Create a Stripe Account Session for embedded onboarding (featurebusiness.manage)GET /businesses/{businessId}/stripe/status— Get the Stripe Connect onboarding status for the business (featurebusiness.manage)GET /businesses/{businessId}/payments/status— The business's payments provider and whether it can take cards now (featurebusiness.manage)DELETE /businesses/{businessId}/payments/account— Unlink the business's payments account (platform admins only) (featurebusiness.manage)GET /businesses/{businessId}/demo— Demo mode: on or off, whether it can be switched on, and what Clear would delete (featurebusiness.manage)POST /businesses/{businessId}/demo— Switch demo mode on (featurebusiness.manage)POST /businesses/{businessId}/demo/clear— Delete the demo data; demo stays on (featurebusiness.manage)DELETE /businesses/{businessId}/demo— Switch demo mode off, deleting its data (featurebusiness.manage)POST /businesses/{businessId}/payments/provider— Choose the business's card processor, Stripe or TRX, before its first payment (featurebusiness.manage)GET /businesses/{businessId}/payments/trx-application— The business's TRX application — status, draft, masked facts (featurebusiness.manage)PUT /businesses/{businessId}/payments/trx-application— Save the non-sensitive half of the TRX application for later (featurebusiness.manage)POST /businesses/{businessId}/payments/trx-application/submit— Send the TRX application: Lead/Insert, then a File/Insert per document (featurebusiness.manage)POST /businesses/{businessId}/payments/trx-application/documents— Send again only the documents TRX did not take — against the same lead (featurebusiness.manage)GET /businesses/{businessId}/payments/trx-pricing— The pricing TRX’s merchant application states for the business (featurebusiness.manage)PUT /businesses/{businessId}/payments/trx-pricing— Set the business’s TRX pricing (platform admins only) (featurebusiness.manage)GET /businesses/{businessId}/payments/trx-account— The TRX merchant record, masked — or null when the business has none (featurebusiness.manage)PUT /businesses/{businessId}/payments/trx-account— Write the TRX merchant record and verify its login (platform admins only) (featurebusiness.manage)POST /businesses/{businessId}/payments/trx-account/check— Check a merchant's TRX gateway login and find TRX's record of it (platform admins only) (featurebusiness.manage)POST /businesses/{businessId}/payments/trx-account/verify— Re-run the login probe on the stored TRX merchant record (featurebusiness.manage)GET /businesses/{businessId}/payments/trx-account/legacy-pull— The last pull of a legacy TRX record asked for on this business — or null (platform admins only) (featurebusiness.manage)POST /businesses/{businessId}/payments/trx-account/legacy-pull— Take the TRX merchant record from the studio's legacy PlaceFull account (platform admins only) (featurebusiness.manage)POST /businesses/{businessId}/payments— Create a payment (featurebusiness.manage)GET /businesses/{businessId}/payments/{paymentId}— Get a payment (featurebusiness.view)POST /businesses/{businessId}/payments/{paymentId}/authorize— Authorize a payment (featurebusiness.manage)POST /businesses/{businessId}/payments/{paymentId}/capture— Capture an authorized payment (featurebusiness.manage)POST /businesses/{businessId}/payments/{paymentId}/refund— Refund a payment (featurebusiness.manage)POST /businesses/{businessId}/payments/{paymentId}/receipt— Send a payment's receipt again (featurebooking.checkin)GET /businesses/{businessId}/balance— Get business ledger balance (featurebusiness.view)GET /businesses/{businessId}/bookings/{bookingId}/balance— Get booking ledger balance (featurebooking.view)GET /businesses/{businessId}/customers/{customerId}/balance— Get customer ledger balance (featurecrm.view)GET /businesses/{businessId}/platform-fee-revenue— Get platform fee revenue for a business (featurebusiness.manage)GET /businesses/{businessId}/performance— Every visible report, drawn for the Overview (featurereports.view)GET /businesses/{businessId}/performance/{report}— One report for a period (featurereports.view)GET /businesses/{businessId}/performance/{report}/export— Export one report as CSV (featurereports.view)GET /businesses/{businessId}/reports/money— Payments report for a period (featurefinance.view)GET /businesses/{businessId}/reports/tax— Tax report for a period (featurefinance.view)GET /businesses/{businessId}/reports/transactions— Transaction lines for a period (featurefinance.view)GET /businesses/{businessId}/reports/transactions/export— Export transaction lines as CSV (featurefinance.export)GET /businesses/{businessId}/reports/journal/export— Export journal lines as CSV (featurefinance.export)GET /businesses/{businessId}/reports/tax/export— Export the tax report as CSV (featurefinance.export)GET /businesses/{businessId}/reports/transactions/{paymentId}— One payment: what it bought, what it cost, its timeline, card, refunds and disputes (featurefinance.view)GET /businesses/{businessId}/reports/deposits— Deposits dated in a period — Stripe payouts or TRX batches, one shape (featurefinance.view)GET /businesses/{businessId}/reports/deposits/{depositId}— One deposit with its breakdown and movements (featurefinance.view)GET /businesses/{businessId}/reports/fees— A month's fees by kind, its sales, total, effective rate, rate history and rate by card type (featurefinance.view)GET /businesses/{businessId}/reports/statements— The months a statement can be read for (featurefinance.view)GET /businesses/{businessId}/reports/statements/{month}— A closed month's statement: deposits, withdrawals, chargebacks, reserves, fees, brands, totals (featurefinance.view)GET /businesses/{businessId}/reports/statements/{month}/export— Export a month's statement as CSV (featurefinance.export)GET /businesses/{businessId}/payments/balance— What the processor holds now and where it goes (featurefinance.view)GET /businesses/{businessId}/reports/payouts/{payoutId}/transactions— Transaction lines for one Stripe payout (featurefinance.view)GET /businesses/{businessId}/reports/payouts/{payoutId}/transactions/export— Export one payout's transaction lines as CSV (featurefinance.export)GET /businesses/{businessId}/payments/payouts— TRX batches as the studio's payouts, and what is not yet deposited (featurefinance.view)GET /businesses/{businessId}/payments/payouts/{batchGuid}— One TRX batch with its sales, returns and adjustments — the Deposit receipt (featurefinance.view)GET /businesses/{businessId}/payments/statements— The monthly TRX statements fetched for this business (featurefinance.view)GET /businesses/{businessId}/payments/statements/{statementDate}— One monthly TRX statement — deposits, card plans and the fee table (featurefinance.view)
crm — Customer records and export
GET /businesses/{businessId}/customers/{customerId}/agreements— A customer's waivers & terms at a location (featurecrm.view)POST /businesses/{businessId}/customers/{customerId}/agreements/{documentId}/mark-signed— Mark a document as signed on paper (featurecrm.notes)GET /businesses/{businessId}/customers— List customers (featurecrm.view)GET /businesses/{businessId}/customers/export— Export customers as CSV or JSON (featurecrm.export)POST /businesses/{businessId}/customers— Create a customer (featurecrm.notes)POST /businesses/{businessId}/customers/import— Import customers (featurecrm.notes)GET /businesses/{businessId}/customers/{customerId}— Get a customer (featurecrm.view)GET /businesses/{businessId}/customers/{customerId}/answers— A customer's last answer to each question (featurecrm.view)GET /businesses/{businessId}/customers/{customerId}/bookings— List a customer's recent bookings (featurecrm.view)GET /businesses/{businessId}/customers/{customerId}/purchases— List a customer's product purchases (featurecrm.view)PATCH /businesses/{businessId}/customers/{customerId}— Update a customer (featurecrm.notes)POST /businesses/{businessId}/customers/{customerId}/archive— Archive a customer (featurecrm.notes)GET /businesses/{businessId}/customers/duplicates— List possible duplicate customers (featurecrm.view)POST /businesses/{businessId}/customers/{customerId}/merge— Merge another customer into this one (featurecrm.merge)POST /businesses/{businessId}/customers/{customerId}/split— Split a contact field onto a new customer (featurecrm.merge)
customers — Customer lists and the messages sent to them
GET /businesses/{businessId}/customer-lists— List customer lists (featurecrm.view)POST /businesses/{businessId}/customer-lists— Create a customer list (featurecrm.notes)POST /businesses/{businessId}/customer-lists/preview-counts— Preview list counts for a rule (featurecrm.view)GET /businesses/{businessId}/customer-lists/{id}— Get a customer list (featurecrm.view)PATCH /businesses/{businessId}/customer-lists/{id}— Update a customer list (featurecrm.notes)POST /businesses/{businessId}/customer-lists/{id}/archive— Archive a customer list (featurecrm.notes)GET /businesses/{businessId}/customer-lists/{id}/counts— Count customers matching a list (featurecrm.view)GET /businesses/{businessId}/messages— List marketing messages (featurecrm.view)POST /businesses/{businessId}/messages— Create a message draft (featurecrm.notes)GET /businesses/{businessId}/messages/{id}— Get a message (featurecrm.view)PATCH /businesses/{businessId}/messages/{id}— Update a message draft (featurecrm.notes)POST /businesses/{businessId}/messages/{id}/schedule— Schedule or send a message (featurecrm.notes)POST /businesses/{businessId}/messages/{id}/cancel— Cancel a scheduled message (featurecrm.notes)POST /businesses/{businessId}/messages/{id}/reschedule— Reschedule a scheduled message (featurecrm.notes)POST /businesses/{businessId}/messages/{id}/clone— Clone a message into a new draft (featurecrm.notes)POST /businesses/{businessId}/messages/{id}/archive— Archive a message (featurecrm.notes)GET /businesses/{businessId}/messages/{id}/preview— Preview a message as HTML (featurecrm.view)GET /businesses/{businessId}/messages/{id}/recipients— List per-recipient delivery outcomes (featurecrm.view)POST /businesses/{businessId}/messages/{id}/test— Send a test to the signed-in operator (featurecrm.notes)
membership — Plans, benefits, and pricing
POST /membership-plans/{id}/images/attach— Attach a photo as a plan cover (featurecatalog.manage)POST /businesses/{businessId}/membership-plans— Create a membership plan (featurecatalog.manage)GET /businesses/{businessId}/membership-plans— List membership plans (featurebusiness.view)PATCH /businesses/{businessId}/membership-plans/order— Reorder memberships or passes (featurecatalog.manage)GET /businesses/{businessId}/membership-plans/{planId}— Get a membership plan (featurebusiness.view)PATCH /businesses/{businessId}/membership-plans/{planId}— Update a membership plan (featurecatalog.manage)POST /businesses/{businessId}/membership-plans/{planId}/publish— Publish a membership plan (featurecatalog.manage)POST /businesses/{businessId}/membership-plans/{planId}/unpublish— Unpublish a membership plan (featurecatalog.manage)POST /businesses/{businessId}/membership-plans/{planId}/archive— Archive a membership plan (featurecatalog.manage)DELETE /businesses/{businessId}/membership-plans/{planId}— Delete a draft plan (featurecatalog.manage)POST /businesses/{businessId}/customers/{customerId}/memberships/purchase— Purchase a membership for a customer (featurebooking.manage)POST /businesses/{businessId}/memberships/{membershipId}/record-payment— Record a membership period as paid through a payment method (featurebooking.manage)GET /businesses/{businessId}/memberships— List memberships for the operator console (featurebusiness.view)POST /businesses/{businessId}/memberships/{membershipId}/email— Change the email a pass or membership belongs to (featurebooking.manage)POST /businesses/{businessId}/memberships/{membershipId}/cancel— Cancel a membership (featurebooking.manage)DELETE /businesses/{businessId}/memberships/{membershipId}/cancel— Keep a membership — take back a cancel at period end (featurebooking.manage)POST /businesses/{businessId}/memberships/{membershipId}/renew— Try the card again on a past-due membership (featurebooking.manage)POST /businesses/{businessId}/memberships/{membershipId}/spots/quote— Quote a change to a subscription's spots (featurebooking.manage)POST /businesses/{businessId}/memberships/{membershipId}/spots— Change a subscription's spots (featurebooking.manage)POST /businesses/{businessId}/memberships/{membershipId}/card-link— Email the holder a link to update the card on file (featurebooking.manage)POST /businesses/{businessId}/memberships/{membershipId}/pause— Pause a membership (featurebooking.manage)POST /businesses/{businessId}/memberships/{membershipId}/resume— Resume a paused membership (featurebooking.manage)POST /businesses/{businessId}/pricing/quote— Quote a listing or a product (featurebooking.view)GET /businesses/{businessId}/pricing/access-check— Check a customer’s access to an offering (featurebooking.view)POST /businesses/{businessId}/membership-plans/card/preview— Preview an unsaved plan's card (featurecatalog.manage)POST /businesses/{businessId}/membership-plans/{planId}/card/preview— Preview a plan's card (featurecatalog.manage)GET /businesses/{businessId}/membership-plans/{planId}/card— Get a plan's card images (featurebusiness.view)GET /businesses/{businessId}/memberships/{membershipId}/card.svg— Get a holder's card (featurebusiness.view)POST /businesses/{businessId}/membership-plans/{planId}/card/redesign— Propose a plan's card design (featurecatalog.manage)POST /businesses/{businessId}/membership-plans/card/redesign— Propose a card design for an unsaved plan (featurecatalog.manage)POST /membership-plans/{id}/images— Upload a membership plan photo (featurecatalog.manage)GET /membership-plans/{id}/images— List membership plan photos (featurebusiness.view)
waitlist — Waitlists for full dates
POST /businesses/{businessId}/waitlist/join— Join the waitlist for a date (featurebooking.manage)GET /businesses/{businessId}/waitlist/{entryId}— Get a waitlist entry (featurebooking.view)GET /businesses/{businessId}/occurrences/{occurrenceId}/waitlist— List waitlist entries for a date (featurebooking.view)POST /businesses/{businessId}/occurrences/{occurrenceId}/waitlist/process-expired— Process expired waitlist offers (featurebooking.manage)
chat — Operator chat — an LLM agent over the intent tools
GET /me/chat-llm— List chat model providersPOST /businesses/{businessId}/chat— Ask: send a message (featurebooking.view)POST /me/setup-chat— Ask (setup): send a messagePOST /me/setup-chat/{sessionId}/confirm— Confirm a setup proposalPOST /me/setup-chat/{sessionId}/preview— Ask (setup): render the page being builtGET /me/setup-chat— Resume the latest setup conversationGET /me/setup-chat/{sessionId}— Ask (setup): read the draftPATCH /me/setup-chat— Type the setup answersPOST /me/setup-chat/{sessionId}/commit— Go live from the setup draftPOST /me/setup-chat/{sessionId}/apply-site— Apply the website find to the setup pagePOST /businesses/{businessId}/chat/{sessionId}/confirm— Confirm a proposed destructive action (featurebooking.view)POST /businesses/{businessId}/chat/{sessionId}/decline— Decline a proposed destructive action (featurebooking.view)GET /businesses/{businessId}/chat/sessions— List chat sessions (featurebooking.view)GET /businesses/{businessId}/chat/sessions/{sessionId}— Get a chat transcript (featurebooking.view)DELETE /businesses/{businessId}/chat/sessions/{sessionId}— Archive a chat session (featurebooking.view)POST /businesses/{businessId}/inline-ai/listing— Propose offering form values from plain English (featurecatalog.manage)POST /businesses/{businessId}/inline-ai/plan— Propose membership or pass form values from plain English (featurecatalog.manage)POST /businesses/{businessId}/inline-ai/embed-css— Propose a revised embed stylesheet from plain English (featurelocation.manage)POST /businesses/{businessId}/inline-ai/format-text— Clean up the formatting of a document (featurelocation.manage, business.manage, team.manage, or booking.manage)POST /businesses/{businessId}/inline-ai/listing-mark— Pick a listing’s icon and colour from its name (featurecatalog.manage)POST /businesses/{businessId}/inline-ai/rewrite-text— Write a description in the business’s voice (featurecatalog.manage, location.manage, business.manage, team.manage, or booking.manage)
Storefront API
storefront — Public embeddable booking surface
GET /storefront/carts/{token}/agreements— What the signed-in customer has agreed to, for this cartGET /storefront/offerings/{offeringId}/agreements— What the signed-in customer has agreed to, for this listingGET /storefront/slugs/{slug}— Resolve a root slug to a business or locationGET /storefront/slugs/{locationSlug}/live— Get a location’s live walk-in projectionGET /storefront/slugs/{locationSlug}/{listingSlug}— Resolve a location + offering slug pairGET /storefront/businesses/{businessId}— Get a business pageGET /storefront/locations/{locationId}— Get a location pageGET /storefront/locations/{locationId}/offerings— List published offerings at a locationGET /storefront/offerings/{id}— Get a published offeringGET /storefront/offerings/{id}/series— List published series for an offeringGET /storefront/offerings/{id}/availability— Get a published offering’s availabilityPOST /storefront/offerings/{id}/quote— Quote a published offeringPOST /storefront/offerings/{id}/waitlist— Join a full date's waitlistPOST /storefront/offerings/{id}/subscription-waitlist— Join a full subscription's waitlistPOST /storefront/waitlist/leave— Leave a waitlistPOST /storefront/carts— Create a cartGET /storefront/carts/{token}— Get a cart by tokenGET /storefront/carts/{token}/answer-suggestions— Remembered answers for this cartGET /storefront/offerings/{offeringId}/answer-suggestions— Last time, for the Book sheetPOST /storefront/carts/{token}/items— Add an item to a cartDELETE /storefront/carts/{token}/items— Empty a cartDELETE /storefront/carts/{token}/items/{itemId}— Remove an item from a cartPUT /storefront/carts/{token}/items/{itemId}/answers— Set a cart line's answersPOST /storefront/carts/{token}/cancel— Cancel a cartPOST /storefront/carts/{token}/holds— Extend or re-acquire cart holdsPOST /storefront/carts/{token}/settle— Settle a cart from its provider’s recordPOST /storefront/carts/{token}/card-session— Open the cart’s card fields (TRX)POST /storefront/carts/{token}/checkout— Check out a cartGET /storefront/bookings/{bookingId}— Get a booking by manage-link idGET /storefront/bookings/{bookingId}/availability— Availability for rescheduling a bookingPOST /storefront/bookings/{bookingId}/cancel— Cancel a booking via manage linkPOST /storefront/bookings/{bookingId}/reschedule— Reschedule a booking via manage linkPOST /storefront/bookings/{bookingId}/feedback— Rate booking online, from a one-item receiptPOST /storefront/carts/{token}/feedback— Rate booking online, from a receipt of severalPOST /storefront/membership-plans/{planId}/checkout— Buy a membership planPOST /storefront/memberships/{membershipId}/cancel— Cancel a membership at the period endPOST /storefront/memberships/{membershipId}/spots/quote— Quote a change to my subscription's spotsPOST /storefront/memberships/{membershipId}/spots— Change my subscription's spotsDELETE /storefront/memberships/{membershipId}/cancel— Keep a membership — take back a cancel at the period endPOST /storefront/memberships/{membershipId}/card-session— Open the update-card page’s card sessionPOST /storefront/memberships/{membershipId}/card— Save a new card on a membershipPUT /storefront/carts/{token}/code— Add or remove a cart's codeGET /storefront/bookings/{bookingId}/pieces— Get a booking's pieces by manage linkPOST /storefront/bookings/{bookingId}/pieces— Add a piece from the booking pageDELETE /storefront/bookings/{bookingId}/pieces/{pieceId}— Take back a piece from the booking page
me — Customer self-service for the signed-in person
POST /me/google-calendar/complete— Finish connecting a Google CalendarGET /me/context— Boot context for the signed-in personPOST /me/enrollments/{enrollmentId}/cancel— Cancel my series enrollmentGET /me/profile— Get my detailsPATCH /me/profile— Update my detailsGET /me/customers— List my customer relationshipsPATCH /me/customers/{customerId}— Update my mobile at a studioGET /me/marketing-consents— List my marketing email preferencesPATCH /me/marketing-consents/{businessId}— Update marketing email preference for one businessGET /me/bookings— My bookingsGET /me/memberships— List my membershipsGET /me/subscriptions— My subscriptions to a listingPOST /me/bookings/{bookingId}/cancel— Cancel my bookingPOST /me/bookings/{bookingId}/reschedule— Reschedule my bookingPOST /me/meta/complete— Finish Meta’s return and list Pages
Agents
MCP (Streamable HTTP): POST https://placefull.ai/mcp · server card: https://placefull.ai/.well-known/mcp.json · agent guide: https://placefull.ai/llms.txt