Local services & SaaS
Acuity Scheduling
Appointments, availability and blocked time in Acuity, worked by your agent.
10 endpoints
Breely publishes no public API, and its private Zapier link only reports appointment changes to other apps (checked 14 Nov 2026). Cotlet runs a hosted Breely MCP server with 17 tools that ChatGPT and Claude use in your own studio account. Cancellations, reminders and invoices wait for your OK.
17 tools Read and write
Breely publishes no public API and no MCP server. Its Help Center documents one integration route for other apps: a private Zapier invite link that starts actions elsewhere when an appointment is scheduled, canceled or rescheduled.
| What you need | Zapier link and webhooks | By hand | Cotlet |
|---|---|---|---|
| Ask ChatGPT or Claude to do the work | No connector | Copy and paste | Hosted MCP server |
| Know when a booking changes | Scheduled, canceled, rescheduled | Check the calendar | Read reports on a schedule |
| Change bookings, hours, forms, invoices | Nothing comes back in | One screen at a time | 17 tools, writes after your OK |
| Read revenue and package reports | Not available | Reports page | run_report |
Checked 14 Nov 2026. Sources: Help: Zapier Integration Details · Breely Help Center · Breely homepage · Help: Automations · Help: Reports · Help: Canceling appointments · Help: Setting up availability · Help: Blocking off time · Help: Joint appointments · Help: Form questions · Help: Add-ons · Help: Packages · Help: Subscriptions · Help: Coupon codes · Help: Gift certificates · Help: Invoicing · Help: Recording offline payments · Help: Waitlisting · Help: Banning clients · Help: Custom fields
Once, in a browser we host for you.
One address in its settings.
Draft the invoice, then approve it.
Your agent works in your own signed-in Cloud Browser. Writes, and anything that reaches a client, wait for your OK. Who can see your session
Sign in to Breely in a Cloud Browser. Open app.breely.com in your Cotlet Cloud Browser and sign in with your own Breely user.
Add the Cotlet address. Enter https://cotlet.dev/mcp/v1 as the MCP server or connector URL in your agent.
Let the agent in. Chat apps open a Cotlet sign-in page. Editors, n8n and scripts send an API key made in the console.
Breely is served from the shared address https://cotlet.dev/mcp/v1 along with every other app you switch on, so you add one connector, not one per app. Turned Breely on after connecting? Refresh the connector and its 17 tools show up.
Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet \
https://cotlet.dev/mcp/v1 \
--header "Authorization: Bearer $COTLET_API_KEY" // ~/.cursor/mcp.json
{
"mcpServers": {
"cotlet": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY" MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: breely_read One tool per owner workflow in the Breely Help Center, in Breely's own words. Where a tool takes an `action`, `list` and `get` only read and the rest write and ask first.
Hours for each Person or Bookable Thing, blocked time, joint appointments, waitlists and cancellations.
Specific hours override the regular hours for one day or open a day you are usually closed. Bookable Things can carry a capacity, so a sauna for five is never booked by six. By default you confirm each call; you can switch that off for this tool.
MCP callbreely_write → set_availability
REST endpointPUT https://cotlet.dev/api/v1/breely/availability
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `get`, `set_weekly`, `set_specific`, `set_group`. `list` and `get` only read. |
| bookable string required | string | A Person or other Bookable Thing (room, chair, court, seat and so on). |
| hours object | object | Weekly hours, or the date and hours that override them. |
| group string | string | For `set_group`: the event type group and its own hours. |
{
"action": "action",
"bookable": "bookable"
} {
"bookable": "Anna",
"date": "2026-11-28",
"hours": [
{
"from": "10:00",
"to": "14:00"
}
],
"saved": true
} Only time blocked in Breely can be removed here. Time blocked by a synced Google, Office 365 or iCloud event changes only in that calendar. By default you confirm each call; you can switch that off for this tool.
MCP callbreely_write → manage_blocked_time
REST endpointPOST https://cotlet.dev/api/v1/breely/blocked-time/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `create`, `delete`. `list` and `get` only read. |
| bookable string | string | Person or Bookable Thing the time is blocked for. |
| start string | string | ISO date and time. |
| end string | string | ISO date and time. |
{
"action": "action"
} {
"bookable": "Anna",
"start": "2026-11-21T12:00",
"end": "2026-11-21T13:00",
"blocked": true
} Turns on "Clients must pick two people to book with". Clients then see only times when both people are free. By default you confirm each call; you can switch that off for this tool.
MCP callbreely_write → set_joint_appointments
REST endpointPUT https://cotlet.dev/api/v1/breely/joint-appointments
| Name | Type | Description |
|---|---|---|
| event_type string required | string | The event type. |
| people array required | array | Two or more people who offer it, each with the event type in their availability. |
{
"event_type": "event type",
"people": "people"
} {
"event_type": "Couples massage",
"people": [
"Anna",
"Ben"
],
"joint": true
} Clients can then join a waitlist for an event type with no open times, watched for 30 days by default, or for a full class session. Breely notifies them when a spot opens. By default you confirm each call; you can switch that off for this tool.
MCP callbreely_write → set_waitlisting
REST endpointPUT https://cotlet.dev/api/v1/breely/waitlisting
| Name | Type | Description |
|---|---|---|
| form string required | string | Form name, as Breely lists it under Forms. |
| first_in_line boolean | boolean | For classes: offer the seat to the first client on the list. |
{
"form": "form"
} {
"form": "Book a class",
"waitlisting": true,
"first_in_line": true
} Removing an attendee from a class in a series removes them from every class in that series. A cancellation reaches the client when automations are on, so the agent names the appointments and the setting first. By default you confirm each call; you can switch that off for this tool.
MCP callbreely_write → cancel_appointment
REST endpointPOST https://cotlet.dev/api/v1/breely/appointment/cancel
| Name | Type | Description |
|---|---|---|
| target string required | string | One of `appointment`, `client_upcoming`, `class_attendee`, `class`. |
| appointment string | string | The appointment or class, by client and date and time. |
| client string | string | For `client_upcoming` and `class_attendee`: the client. |
| send_automations boolean | boolean | Send your cancellation automations. Deleting a class always sends them. |
{
"target": "target"
} {
"target": "appointment",
"client": "Example Client",
"appointment": "2026-11-20T15:00",
"send_automations": true,
"canceled": true
} Clients book through forms, so questions, add-ons and the emails and texts they trigger all live on a form.
A Client Login question lets clients see their bookings and package balances, signing in with Google, Apple or an emailed code. Section logic can send new clients to a meet and greet and returning clients straight to booking. The form is what clients book through, so changes wait for your OK. By default you confirm each call; you can switch that off for this tool.
MCP callbreely_write → edit_form_questions
REST endpointPATCH https://cotlet.dev/api/v1/breely/form-questions
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `get`, `add_question`, `set_section_logic`. `list` and `get` only read. |
| form string required | string | Form name, as Breely lists it under Forms. |
| question object | object | For `add_question`: type, label, required, and options or terms text. |
| logic object | object | For `set_section_logic`: the yes/no question and the section each answer goes to. |
{
"action": "action",
"form": "form"
} {
"form": "Book a massage",
"question": {
"type": "signature",
"label": "Sign to accept the cancellation policy",
"required": true
},
"saved": true
} Add-ons belong to one form and show to clients booking through it and to admins booking with it. By default you confirm each call; you can switch that off for this tool.
MCP callbreely_write → manage_add_ons
REST endpointPOST https://cotlet.dev/api/v1/breely/add-ons/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `create`. `list` and `get` only read. |
| form string required | string | Form name, as Breely lists it under Forms. |
| add_on object | object | For `create`: label, extra price, extra minutes, allow quantity, add only once per booking. |
{
"action": "action",
"form": "form"
} {
"form": "Book a massage",
"add_on": "Hot stones",
"price": 15,
"minutes": 10,
"saved": true
} Texts go only to clients who opted in. A reminder can ask the client to confirm, and a custom field can track the reply. Automations message your clients from then on, so every new one waits for your OK. By default you confirm each call; you can switch that off for this tool.
MCP callbreely_write → manage_automations
REST endpointPOST https://cotlet.dev/api/v1/breely/automations/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `create`, `update`. `list` and `get` only read. |
| form string required | string | Form name, as Breely lists it under Forms. |
| trigger string | string | One of `scheduled`, `before_appointment`, `completed`, `canceled`, `rescheduled`, `form_submitted`, plus minutes, hours or days. |
| channel string | string | One of `email`, `text`, `slack`, `phone_call`, `custom_field_update`, `webhook`. |
| content string | string | The message, with fields such as client name and appointment time. |
{
"action": "action",
"form": "form"
} {
"form": "Book a massage",
"trigger": "before_appointment",
"offset": "24 hours",
"channel": "text",
"saved": true
} Prepaid bundles, recurring packs, coupon codes and gift certificates. Each one changes what a client pays.
Clients need no code: a package applies to eligible bookings made with the same name and email. A balance change is money a client has paid for, so it waits for your OK. By default you confirm each call; you can switch that off for this tool.
MCP callbreely_write → manage_packages
REST endpointPOST https://cotlet.dev/api/v1/breely/packages/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `create`, `update_purchase`. `list` and `get` only read. |
| package string | string | Package name, or the client's purchased package for `update_purchase`. |
| rules object | object | For `create`: price, what it redeems for (appointments, minutes, dollar amount or a count per type) and the eligible event types. |
| override object | object | For `update_purchase`: new balance or expiration date. |
{
"action": "action"
} {
"package": "Five 60 min massages",
"client": "Example Client",
"redeemed": 3,
"remaining": 2,
"expires": "2027-03-31"
} A subscription bills clients again on every renewal, so a new one waits for your OK. By default you confirm each call; you can switch that off for this tool.
MCP callbreely_write → manage_subscriptions
REST endpointPOST https://cotlet.dev/api/v1/breely/subscriptions/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `create`. `list` and `get` only read. |
| subscription string | string | Name, for `get` and `create`. |
| rules object | object | For `create`: price, what it redeems for, renewal (weekly up to yearly), rollover, reset or keep, and any discount on other services. |
{
"action": "action"
} {
"subscription": "90 min membership",
"renews": "monthly",
"price": 120,
"unused_balance": "rollover",
"extra_discount_percent": 20,
"saved": true
} A coupon lowers what clients pay, so the agent shows the discount, limit and expiry first. By default you confirm each call; you can switch that off for this tool.
MCP callbreely_write → manage_coupons
REST endpointPOST https://cotlet.dev/api/v1/breely/coupons/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `create`. `list` and `get` only read. |
| code string | string | The code, for a single code. |
| discount object | object | Percent or fixed amount, and the event types, packages or subscriptions it applies to. |
| limit string | string | One of `unlimited`, `once_per_client`, or a total number of uses. |
| expires string | string | ISO date, or empty for no expiry. |
{
"action": "action"
} {
"code": "WINTER15",
"discount": {
"percent": 15,
"applies_to": [
"Massage, 60 min"
]
},
"limit": "once_per_client",
"expires": "2027-01-31",
"saved": true
} Useful for in-person sales or a complimentary certificate. Each one gets its own code, expiry and balance, and delivery emails the recipient. By default you confirm each call; you can switch that off for this tool.
MCP callbreely_write → manage_gift_certificates
REST endpointPOST https://cotlet.dev/api/v1/breely/gift-certificates/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `create`. `list` and `get` only read. |
| recipient object | object | For `create`: name and email. |
| amount number | number | One of your values, or a custom amount. |
| message string | string | Optional message. |
| delivery string | string | Delivery preference. |
{
"action": "action"
} {
"recipient": "Example Recipient",
"amount": 100,
"code": "GC-7Q2K",
"delivered": true
} Draft and send invoices, and record cash or bank transfer payments. Card payments stay with your Stripe or Square connection.
Statuses run Draft, Sent, Overdue, Paid; a paid invoice can no longer be edited. Creating and sending are separate calls, so you read the draft first. By default you confirm each call; you can switch that off for this tool.
MCP callbreely_write → manage_invoices
REST endpointPOST https://cotlet.dev/api/v1/breely/invoices/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `create`, `send`. `list` and `get` only read. |
| invoice string | string | Invoice number, for `get` and `send`. |
| client string | string | For `create`: the client. |
| items array | array | For `create`: name, description, quantity and unit price per line, plus discounts or fees. |
| due_date string | string | ISO date. Defaults to your invoice settings. |
{
"action": "create",
"client": "Example Client",
"items": [
{
"name": "Massage, 60 min",
"quantity": 2,
"unit_price": 90
},
{
"name": "Hot stones",
"quantity": 1,
"unit_price": 15
}
],
"due_date": "2026-11-30"
} {
"invoice": "1042",
"client": "Example Client",
"items": [
{
"name": "Massage, 60 min",
"quantity": 2,
"unit_price": 90
},
{
"name": "Hot stones",
"quantity": 1,
"unit_price": 15
}
],
"total": 195,
"status": "Draft"
} Uses Make Payment, Manual. Breely does not process the money; it records it. By default you confirm each call; you can switch that off for this tool.
MCP callbreely_write → record_payment
REST endpointPOST https://cotlet.dev/api/v1/breely/payments
| Name | Type | Description |
|---|---|---|
| appointment string required | string | The appointment or client, by client and date. |
| amount number required | number | Amount received. |
| note string | string | Cash, bank transfer or another note. |
{
"appointment": "appointment",
"amount": 1
} {
"client": "Example Client",
"appointment": "2026-11-20T15:00",
"amount": 90,
"method": "manual",
"recorded": true
} Reports are read only. Custom fields and bans change client records.
Returns the rows of the report your user can see. Events carry their times, event type, who they were booked with and form or custom fields; Packages/Subscriptions carry status and balance left. It changes nothing and runs without asking.
MCP callbreely_read → run_report
REST endpointGET https://cotlet.dev/api/v1/breely/reports/run
| Name | Type | Description |
|---|---|---|
| report string required | string | A saved report by name, or one of `clients`, `events`, `forms`, `packages_subscriptions`, `classes`, `payments`, `gift_certificates`, `invoices`, `last_month_bookings`, `revenue_per_event_type`, `revenue`. |
| filters object | object | Filters and grouping, for example a date range or an event type. |
{
"report": "report"
} {
"report": "revenue_per_event_type",
"from": "2026-10-01",
"to": "2026-10-31",
"rows": [
{
"event_type": "Massage, 60 min",
"bookings": 42,
"revenue": 3780
},
{
"event_type": "Massage, 90 min",
"bookings": 18,
"revenue": 2340
},
{
"event_type": "Couples massage",
"bookings": 6,
"revenue": 1140
}
]
} Fields live under Settings, Fields and are private to your team. A confirmation status field is one way to track reminder replies. By default you confirm each call; you can switch that off for this tool.
MCP callbreely_write → set_custom_fields
REST endpointPUT https://cotlet.dev/api/v1/breely/custom-fields
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `create`, `set_value`. `list` and `get` only read. |
| on string | string | One of `client`, `appointment`. |
| field string | string | Field name, for example Phone Call Summary. |
| record string | string | For `set_value`: the client or appointment. |
| value string | string | For `set_value`: the text to store. |
{
"action": "action"
} {
"on": "appointment",
"field": "Confirmed",
"record": "Example Client, 2026-11-20T15:00",
"value": "Yes",
"saved": true
} The ban covers the client and their browser. It always waits for your OK. By default you confirm each call; you can switch that off for this tool.
MCP callbreely_write → ban_client
REST endpointPOST https://cotlet.dev/api/v1/breely/client/ban
| Name | Type | Description |
|---|---|---|
| client string required | string | Client name or email. |
| message string required | string | What the client sees when they try to book. |
{
"client": "client",
"message": "message"
} {
"client": "Example Client",
"banned": true
} Your signed-in Breely browser profile, AES-256-GCM encrypted, in Finland. Never your password.
The 17 Breely tools. The session cookie stays in the Cloud Browser.
The calendar, clients, forms and invoices your Breely user can open, and nothing more.
Your Breely plan and billing, other users, calendar syncing and the Stripe or Square connection.
You sign in again yourself, in the same Cloud Browser.
Disable Breely for agents in the console, or reset the Cloud Browser to drop the session.
Cotlet never sees or stores your password: you sign in to Breely yourself, and the agent only uses the session that leaves. Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results).
When a Breely page changes, Cotlet updates its Breely server, and your agent calls the same tools with the same inputs.
Features you switch on in Breely, such as Packages, Subscriptions, Invoices or Waitlisting under Features & Integrations, become usable by the agent once they are on.
If Breely signs you out, one click in the Cotlet console reopens the Cloud Browser so you can sign in again.
| Action | How to put it right |
|---|---|
| Hours, blocked time, custom fields | Call the same tool again with the earlier values |
| A draft invoice | Change it before it is sent; a paid invoice can no longer be edited |
| A coupon or package balance | Change the limit, expiry or balance back |
| A canceled appointment | The client got the cancellation if automations were on: rebook and tell them |
| A new automation | Messages already sent stay sent: switch it off and follow up |
All 16 write tools ask first: by default you confirm each call, and you can switch that off per tool. The read tool, run_report, runs at once.
{
"name": "manage_invoices",
"arguments": {
"action": "create",
"client": "Example Client",
"items": [
{
"name": "Massage, 60 min",
"quantity": 2,
"unit_price": 90
},
{
"name": "Hot stones",
"quantity": 1,
"unit_price": 15
}
],
"due_date": "2026-11-30"
}
} curl -X POST https://cotlet.dev/api/v1/breely/invoices/manage \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"create","client":"Example Client","items":[{"name":"Massage, 60 min","quantity":2,"unit_price":90},{"name":"Hot stones","quantity":1,"unit_price":15}],"due_date":"2026-11-30"}' {
"invoice": "1042",
"client": "Example Client",
"items": [
{
"name": "Massage, 60 min",
"quantity": 2,
"unit_price": 90
},
{
"name": "Hot stones",
"quantity": 1,
"unit_price": 15
}
],
"total": 195,
"status": "Draft"
} The example bills two 60 min massages at $90 and one hot stones add-on at $15: $195, saved as a draft. A cron job or n8n flow makes the same call over REST at /api/v1/breely with the same key and price, in JSON. Failed calls are free.
About $15 a monthfor a two-therapist studio with about 60 bookings a month, 2,500 credits. Your Breely plan stays as it is.
| Job | Calls | Credits |
|---|---|---|
| Morning check of the day's bookings | 1 × 26 | 260 |
| Blocked time and hour changes | 1 × 12 | 120 |
| Cancellations and reschedule follow-ups | 1 × 10 | 100 |
| Invoices and cash payments | 2 × 15 | 300 |
| Package balances and gift certificates | 1 × 8 | 80 |
| Weekly revenue and package reports | 2 × 4 | 80 |
| New coupon, reminder or form change | 2 × 3 | 60 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 100 calls | 2,500 |
The smallest pack is 5,000 credits for $29. Most of a quiet month is the Cloud Browser; a busier studio adds calls, not days.
Credit packs are one-time purchases, not a subscription. The month above is our own example, not measured customer usage.
| Credits | Price, one time | Calls at 10 credits | Per 1,000 credits |
|---|---|---|---|
| 5,000 | $29 | 500 | $5.80 |
| 15,000 | $79 | 1,500 | $5.27 |
| 32,000 | $149 | 3,200 | $4.66 |
| 60,000 | $249 | 6,000 | $4.15 |
Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.
| Option | What it does | Where it stops |
|---|---|---|
| Breely Zapier link | Starts a Zap when an appointment is scheduled, canceled or rescheduled. | Private invite link; other apps cannot add appointments or clients to Breely. |
| Form automation webhooks | Breely posts form and booking data to a URL you set. | Outgoing only, per form; you host whatever receives it. |
| Report exports | Breely's Reports page with filters, grouping and export. | By hand, while you are at the desk. |
If all you need is to copy new bookings into a mailing list, the Zapier link already does that. Cotlet fits when you want ChatGPT, Claude or a script to read and change things inside Breely, from your own login, with nothing to host.
Cotlet belongs to Take Group sp. z o.o., a software company registered in Poland, EU (VAT PL6342984273), operating since 2019 and run by its founders Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Questions about the Breely tools: contact@cotlet.dev.
Sign up free at https://cotlet.dev/signup?app=breely, turn on Breely under Integrations in the console and sign in at https://app.breely.com/ in your Cloud Browser. Then connect your AI agent and ask it about this week. The trial needs no card.
No. Breely publishes no public API (checked 14 Nov 2026). Its Help Center documents a Zapier integration through a private invite link that triggers actions in other apps when an appointment is scheduled, canceled or rescheduled; other apps cannot add appointments or clients to Breely. No Breely MCP server or official ChatGPT or Claude connector was found. Cotlet does not need one: it works in your own signed-in Breely account.
No. Online payments run through the Stripe or Square account you connect in Breely, and no Cotlet tool changes that connection. The agent can send an invoice the client pays online, or record a cash or bank transfer payment.
No. Breely shows time blocked by a synced calendar but cannot edit it; you change it in that calendar. The agent adds and removes only time blocked in Breely itself.
The user whose work the agent should do. It sees only what that user can see in Breely, so a team member without access to invoices gives the agent no invoices either.
Only in how it is called. Both carry the same 17 tools, inputs, answers, API key and price. Agents use MCP; scripts and n8n HTTP steps use REST.
No. Cotlet is independent and not affiliated with Breely.
Free 7-day trial with 2,000 credits, no card needed.
May we use Google Analytics to see which pages help people? It sets cookies only if you accept. No ads, and we never sell data. Cookie policy