---
name: placefull-booking
description: Add online booking — classes, appointments, room rentals, memberships — to a studio's website or app with PlaceFull, and set up or run the studio through its MCP server. Use when someone wants customers to book and pay for classes, sessions, workshops or space, wants a booking page or widget on their site, or wants an AI assistant to manage their studio's schedule and bookings.
---

# PlaceFull booking

PlaceFull is booking software for everything a space can earn: classes, appointments, rentals
and memberships on one calendar. Studios take payment on their own Stripe account.
PlaceFull charges no monthly fee. Its fee is 2% of each card payment (the default rate; a studio can be set differently), which the studio absorbs, splits with the customer, or charges the customer as a service fee. Cash and recorded-elsewhere payments carry no fee. Stripe's own processing fee is separate and goes to Stripe.

Base URL: https://placefull.ai. Everything below is public; the full agent guide is
https://placefull.ai/llms-full.txt and the API reference is https://placefull.ai/docs.md.

## Pick the path

1. **The studio already uses PlaceFull and has a website** → *Embed*. Paste one script tag
   and one custom element; the site keeps its own fonts and colours; every time links to the
   hosted booking page where paying happens. No keys, no build step.
2. **Building a custom site or app** → *Storefront API*. Public reads, priced quotes, a cart
   that is the pay link, checkout on the studio's own Stripe account. No auth to read.
3. **Setting up or running the studio itself** → *MCP*. Connect an assistant to
   `POST https://placefull.ai/mcp` (OAuth, no API key for Claude and ChatGPT), create the studio and
   its catalog, take bookings, check people in.

Sign-up is invite-only for now: an operator who already has an account connects and works as usual; a new studio needs an invite link from PlaceFull before an assistant can create it.

## Embed (path 1)

```html
<script src="https://placefull.ai/embed/v1.js" async></script>
<placefull-schedule location="the-studio-slug">
  <a href="https://placefull.ai/the-studio-slug">Book a class</a>
</placefull-schedule>
```

The link inside the tag is the fallback if the script never runs. `location` is the studio's
slug: the last part of its hosted page URL, `https://placefull.ai/{slug}`.

| Tag | Shows |
|---|---|
| `<placefull-schedule location>` | the next 14 days of classes by day; each row books that date |
| `<placefull-classes location>` | every published class, linking to its page |
| `<placefull-appointments location>` | every published appointment |
| `<placefull-rentals location>` | every published rental |
| `<placefull-times location listing>` | one listing's upcoming times, paged |
| `<placefull-walkins location>` | live walk-in spots right now |

Every tag takes `theme`. The markup is plain HTML with `data-pf` hooks and no class names, so
the site's CSS styles it; the contract is frozen for v1: https://placefull.ai/developers/embed.md.
A whole booking experience in an iframe is the other option: `https://placefull.ai/{slug}?embed=1`.

## Storefront API (path 2)

Public read, no auth. Ids come from the slug lookup — never invent one.

```
GET  https://placefull.ai/storefront/slugs/{locationSlug}            → the location and its ids
GET  https://placefull.ai/storefront/locations/{locationId}/offerings  → what is bookable (cursor-paged)
GET  https://placefull.ai/storefront/offerings/{id}                    → one listing
GET  https://placefull.ai/storefront/offerings/{id}/availability       → bookable times, spots left
POST https://placefull.ai/storefront/offerings/{id}/quote              → the price for a choice, fees and tax included
```

Booking is a cart; the cart's token is the capability, and the cart URL is the pay link:

```
POST   https://placefull.ai/storefront/carts                           → open a cart (optionally with the first item)
POST   https://placefull.ai/storefront/carts/{token}/items             → add an item: a ten-minute hold on the spot
GET    https://placefull.ai/storefront/carts/{token}                   → items, live state, totals
DELETE https://placefull.ai/storefront/carts/{token}/items/{itemId}    → release the spot
POST   https://placefull.ai/storefront/carts/{token}/checkout          → customer session; one Stripe charge on the studio's account
```

Money is integer minor units both ways: a $22.00 class is `priceAmount: 2200`. Times are
ISO-8601 in UTC. Responses are `{ "data": … }`; errors are `{ "error": { "code", "message" } }`.
Exact schemas and examples: https://placefull.ai/openapi.json.

## MCP (path 3)

- **Claude (claude.ai):** Settings → Connectors → Add custom connector → paste
  `https://placefull.ai/mcp` → Connect → sign in with the operator's email code → Allow.
- **ChatGPT:** same, with `https://placefull.ai/mcp?tools=compact` (it caps tool definitions).
- **Cursor / CI:** a `bk_` API key from the console (Settings → API keys) as
  `Authorization: Bearer bk_…` on `POST https://placefull.ai/mcp`.

Then, in one session: `create_business` (a default location comes with it; an inline
`catalog` writes the first classes) → `create_class`, `create_session`, `create_space` →
`get_availability`, `book_class_for_customer`, `list_todays_bookings`, `check_in`.

Rules the server states on connect: money in cents; never invent an id; a listing is
draft → published → hidden → archived; read tools (`list_*`, `get_*`, `find_*`) never write;
a tool call cannot accept the Merchant Agreement — the operator does that in the console
before bookings and charges open.

## Where the words are

- Agent guide: https://placefull.ai/llms-full.txt
- API reference: https://placefull.ai/docs.md (schemas: https://placefull.ai/openapi.json)
- Embed contract: https://placefull.ai/developers/embed.md
- MCP server card: https://placefull.ai/.well-known/mcp.json
