# BookingKoala API and MCP server

> BookingKoala has no public, documented REST API (checked 11 Oct 2026). An API key from Settings > General > Apps & Integrations only connects Zapier and Make. Zapier gets event triggers for bookings, customers, providers, quotes, ratings and invoices plus one action, Create Lead; Make gets the same kind of triggers.

Booking and business software for home service companies such as cleaning and maid services: online booking forms, scheduling, providers, charges and invoices.

## What is the BookingKoala API?

Cotlet's BookingKoala API exposes 15 endpoints for your own BookingKoala account: list bookings, get booking, list customers, list providers, list charges, list invoices, get provider payments, create booking, reschedule booking, assign provider, add booking note, cancel booking, send quote, refund charge and resend invoice. The list_bookings endpoint returns bookings with customer, services, date, arrival time, provider and price. Each endpoint takes simple JSON inputs like booking_id, to or from and works both as an MCP tool for agents and as a REST call for scripts.

- **Category:** [Local services & SaaS](https://cotlet.dev/integrations/category/local-services-saas)
- **Endpoints:** 15 (7 read, 8 write)
- **Updated:** 2026-10-11

BookingKoala has no public, documented REST API (checked 11 Oct 2026). Cotlet is a hosted MCP server and REST API for BookingKoala with 15 endpoints (7 read, 8 write): your AI agent signs in as you and does the work.

## Does BookingKoala have an official API?

BookingKoala has no public, documented REST API (checked 11 Oct 2026). An API key from Settings > General > Apps & Integrations only connects Zapier and Make. Zapier gets event triggers for bookings, customers, providers, quotes, ratings and invoices plus one action, Create Lead; Make gets the same kind of triggers.

| Task | BookingKoala official | Cotlet |
|---|---|---|
| List upcoming and unassigned bookings | Partly: Only New or Updated Booking triggers, no lookup | Yes |
| Create a booking | No: Zapier can only create a lead | Yes |
| Reschedule a booking | No | Yes |
| Assign a provider or team | No: In-app auto-assign covers new bookings only; no API | Yes |
| Cancel a booking with or without a fee | No | Yes |
| Refund a charge | No | Yes |
| Provider amounts due for a pay period | No: Shown in the Provider Payments screen; Zapier only sends a Provider Payout event | Yes |
| Resend an overdue invoice | No: Per-invoice reminders in the app; Zapier only has invoice triggers | Yes |

Sources: [BookingKoala on Zapier](https://zapier.com/apps/bookingkoala/integrations), [BookingKoala Help: Make (Integromat) integration guide](https://help.bookingkoala.com/help/make-integromat-integration-guide), [BookingKoala Help: Refund a charge](https://help.bookingkoala.com/help/refund-a-charge), [BookingKoala Help: Resend an invoice](https://help.bookingkoala.com/help/resend-an-invoice), [BookingKoala Help: Three types of scheduling](https://help.bookingkoala.com/help/three-types-of-scheduling), [BookingKoala Help: Creating customer invoices (reminders)](https://help.bookingkoala.com/help/creating-customer-invoices), [BookingKoala Help: Provider payments](https://help.bookingkoala.com/help/provider-payments)

## For AI agents

```text
BookingKoala has no public, documented REST API (checked 11 Oct 2026). An API key from Settings > General > Apps & Integrations only connects Zapier and Make. Zapier gets event triggers for bookings, customers, providers, quotes, ratings and invoices plus one action, Create Lead; Make gets the same kind of triggers.
Cotlet provides a hosted MCP server and REST API for BookingKoala: 15 tools (7 read, 8 write).
Access       Request access at https://cotlet.dev/app/signup?app=bookingkoala; we email the API key.

MCP server   https://cotlet.dev/mcp/v1
REST base    https://cotlet.dev/api/v1/bookingkoala
Auth         Authorization: Bearer <COTLET_API_KEY>. Listing endpoints and schemas needs no key; calling an endpoint needs one.
Tools        list_bookings, get_booking, list_customers, list_providers, list_charges, list_invoices, get_provider_payments, create_booking, reschedule_booking, assign_provider, add_booking_note, cancel_booking, send_quote, refund_charge, resend_invoice
Confirm      create_booking, reschedule_booking, assign_provider, add_booking_note, cancel_booking, send_quote, refund_charge, resend_invoice (by default the user approves each call; the user can switch this off per tool, e.g. for scheduled automations)
Markdown     https://cotlet.dev/integrations/bookingkoala-api-mcp-server.md

How access works:
1. The user requests access at https://cotlet.dev/app/signup?app=bookingkoala (BookingKoala is pre-selected). Each request is reviewed and the API key is sent by email.
2. The user signs in to BookingKoala once in a browser. An agent cannot do this step.
3. The API key goes into the MCP client or the REST call as a bearer token.

Fits: people who want a hosted BookingKoala server that someone else maintains, including non-developers.

Policy: Cotlet never stores passwords, never solves CAPTCHAs, never bypasses MFA.
Company: legal details in the Terms of service at https://cotlet.dev/terms. Contact contact@cotlet.dev.
Session: the user signs in to BookingKoala in a browser; Cotlet keeps only the session, AES-256 encrypted, revocable in the dashboard at any time.
Terms: the user stays responsible for following BookingKoala's terms; Cotlet is not affiliated with BookingKoala.
```

## What can an AI agent do in BookingKoala?

Cotlet is best for home service owners and office managers on BookingKoala who want their AI agent to assign providers, move bookings, refund charges and report provider pay without running or fixing a server.

- **[Assign unassigned bookings to providers](https://cotlet.dev/integrations/bookingkoala-api-mcp-server/assign-unassigned-bookings)** (runs: daily): "Go through the BookingKoala unassigned folder for this week. Give each job to the free provider with the fewest bookings that day, high priority first, and tell me which jobs nobody can take." → `list_bookings`, `list_providers`, `get_booking`, `assign_provider`
- **[Reschedule bookings](https://cotlet.dev/integrations/bookingkoala-api-mcp-server/reschedule-bookings)**: "Thursday is a storm day. Move every Thursday booking to Friday or Saturday, same provider and as close to the old time as possible, and tell me who could not be moved." → `list_customers`, `list_bookings`, `get_booking`, `reschedule_booking`
- **[Create bookings from phone and email requests](https://cotlet.dev/integrations/bookingkoala-api-mcp-server/create-bookings)**: "Here are this morning's three voicemails. Book each caller in BookingKoala: find existing customers by phone, add new ones with name and email, leave the job unassigned if nobody is free, and save a quote when they only asked for a price." → `list_customers`, `list_providers`, `create_booking`
- **Refund a booking charge**: "Refund half of the last charge for booking 48213 and note the reason on the booking." → `list_charges`, `refund_charge`
- **Provider pay report for a pay period** (runs: weekly): "How much do I owe each provider for the last two weeks?" → `get_provider_payments`
- **Send reminders for overdue invoices** (runs: weekly): "Send every overdue invoice a reminder." → `list_invoices`, `resend_invoice`

## Can BookingKoala automations run on a schedule in n8n, Make or Zapier?

Yes. Cotlet does not replace your automation platform: it gives it a BookingKoala connection it does not have, with the same API key as your agent. Write actions ask for your OK by default; switch that off in your dashboard for the tools you choose, for example to assign unassigned bookings to providers, and the schedule runs on its own. Cotlet runs in the cloud, so it keeps going while your computer is off.

| Where | How to connect | How to schedule |
|---|---|---|
| Your AI agent | Add https://cotlet.dev/mcp/v1 with your API key. | A scheduled agent run, for example a Claude Code routine. |
| n8n | MCP Client node with https://cotlet.dev/mcp/v1, or an HTTP Request node to https://cotlet.dev/api/v1/bookingkoala/{tool}. | Schedule Trigger node. |
| Make | HTTP module: POST https://cotlet.dev/api/v1/bookingkoala/{tool} with an Authorization: Bearer header and a JSON body. | Scenario schedule. |
| Zapier | Webhooks by Zapier: POST https://cotlet.dev/api/v1/bookingkoala/{tool} with the same header and body. | Schedule by Zapier trigger. |
| Your own script | POST https://cotlet.dev/api/v1/bookingkoala/{tool} with your API key. | cron or GitHub Actions. |

## Tools

**For AI agents:** Every endpoint and its schema is public. The 15 endpoints on this page, with parameters and example responses, can be listed without an account. Calling one returns 403 until the account has an API key with access to BookingKoala.

### list_bookings

Bookings with customer, services, date, arrival time, provider and price. Access: read. REST: `POST /api/v1/bookingkoala/list_bookings`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `folder` | enum | no | upcoming, unassigned, drafts_quotes or cancelled. Default: upcoming. |
| `from` | date | no | Only bookings on or after this date. |
| `to` | date | no | Only bookings on or before this date. |
| `customer_id` | string | no | Only bookings of this customer. |
| `provider_id` | string | no | Only bookings of this provider or team. |
| `cursor` | string | no | Next page cursor from the previous call. |

Lists bookings in one folder: upcoming, unassigned, drafts and quotes, or cancelled. Filter by date range, customer or provider. Pages follow the order of the folder; pass next_cursor back as cursor. Quotes in drafts_quotes carry the quote_id that send_quote needs.

Example response:

```json
{
  "bookings": [
    {
      "booking_id": "48213",
      "customer": {
        "customer_id": "1207",
        "name": "Sarah Miller"
      },
      "services": [
        "Deep clean"
      ],
      "arrival": "2026-10-15T09:00:00-05:00",
      "provider": null,
      "folder": "unassigned",
      "price": "180.00"
    }
  ],
  "next_cursor": null
}
```

### get_booking

Full booking: services, address, provider, price and job length adjustments, notes and charges. Access: read. REST: `POST /api/v1/bookingkoala/get_booking`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `booking_id` | string | yes | Booking ID from list_bookings. |

Returns one booking with its services, service address, assigned provider or team, price and job length adjustments, notes and charges. Use it before changing a booking so your agent sees its current state.

Example response:

```json
{
  "booking_id": "48213",
  "customer": {
    "customer_id": "1207",
    "name": "Sarah Miller"
  },
  "services": [
    "Deep clean"
  ],
  "address": "14 Maple Street, Austin, TX",
  "arrival": "2026-10-15T09:00:00-05:00",
  "provider": {
    "id": "312",
    "name": "Team Blue"
  },
  "price": "180.00",
  "notes": [
    {
      "type": "private_booking",
      "text": "Gate code 4417"
    }
  ],
  "charges": [
    {
      "charge_id": "90417",
      "amount": "50.00",
      "status": "charged"
    }
  ]
}
```

### list_customers

Customers with name, email, phone, addresses and number of bookings. Access: read. REST: `POST /api/v1/bookingkoala/list_customers`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `query` | string | no | Search by name, email or phone. |
| `limit` | integer | no | Customers per page. |
| `cursor` | string | no | Next page cursor from the previous call. |

Lists customers, or searches them by name, email or phone. Each customer comes with addresses and a booking count. Use customer_id with list_bookings or create_booking. Pass next_cursor back as cursor for the next page.

Example response:

```json
{
  "customers": [
    {
      "customer_id": "1207",
      "name": "Sarah Miller",
      "email": "sarah@example.com",
      "phone": "+1 555 0100",
      "addresses": [
        "14 Maple Street, Austin, TX"
      ],
      "bookings": 6
    }
  ],
  "next_cursor": null
}
```

### list_providers

Providers and teams, active or not, with their bookings on a given day. Access: read. REST: `POST /api/v1/bookingkoala/list_providers`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `date` | date | no | Show each provider's bookings on this day. |

Lists providers and teams, active or not. Pass a date to see each provider's bookings that day, which shows who has room. Use the id as provider_id in list_bookings, create_booking and assign_provider.

Example response:

```json
{
  "providers": [
    {
      "id": "312",
      "name": "Team Blue",
      "type": "team",
      "active": true,
      "bookings_on_date": 3
    },
    {
      "id": "318",
      "name": "Marcus Reed",
      "type": "provider",
      "active": true,
      "bookings_on_date": 1
    }
  ]
}
```

### list_charges

Booking charges with amount, status, card or cash/check, and refunds. Access: read. REST: `POST /api/v1/bookingkoala/list_charges`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `booking_id` | string | no | Only charges of this booking. |
| `from` | date | no | Charged on or after this date. |
| `to` | date | no | Charged on or before this date. |

Lists charges from Booking Charges, newest first, with amount, status, payment method and any refund. Filter by booking or by charge date. The charge_id goes to refund_charge.

Example response:

```json
{
  "charges": [
    {
      "charge_id": "90417",
      "booking_id": "48213",
      "amount": "50.00",
      "status": "charged",
      "method": "card",
      "charged_at": "2026-10-15T12:30:00-05:00",
      "refunded": "0.00"
    }
  ]
}
```

### list_invoices

Invoices from the Invoice Dashboard with customer, amount and due date. Access: read. REST: `POST /api/v1/bookingkoala/list_invoices`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `status` | enum | no | active or overdue. Default: active. |

Lists invoices from the Invoice Dashboard, the active ones or the ones on the Overdue tab. Each has customer, amount and due date. The invoice_id goes to resend_invoice.

Example response:

```json
{
  "invoices": [
    {
      "invoice_id": "inv_7710",
      "customer": {
        "customer_id": "1207",
        "name": "Sarah Miller"
      },
      "amount": "240.00",
      "due_date": "2026-10-01",
      "status": "overdue"
    }
  ]
}
```

### get_provider_payments

Amount due per provider for a pay period and amount owed up to today. Access: read. REST: `POST /api/v1/bookingkoala/get_provider_payments`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `from` | date | yes | Start of the pay period. |
| `to` | date | yes | End of the pay period. |

Returns, per provider, the amount due for the pay period you give and the amount owed up to today, the same two figures as Provider Payments in BookingKoala. The amount owed up to today is never lower than the amount due for the period. It is read only: it does not pay anyone.

Example response:

```json
{
  "from": "2026-09-28",
  "to": "2026-10-11",
  "providers": [
    {
      "id": "312",
      "name": "Team Blue",
      "amount_due": "1240.00",
      "owed_to_date": "1240.00"
    },
    {
      "id": "318",
      "name": "Marcus Reed",
      "amount_due": "610.00",
      "owed_to_date": "730.00"
    }
  ],
  "total_due": "1850.00"
}
```

### create_booking

New booking for an existing or new customer, with a provider or left in the unassigned folder. Access: write, asks the user first. REST: `POST /api/v1/bookingkoala/create_booking`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `customer` | object | yes | customer_id, or first_name, last_name and email for a new customer. |
| `services` | object | yes | Industry and the services or extras picked on the booking form. |
| `arrival` | datetime | yes | Date and arrival time, ISO 8601 with time zone. |
| `address` | string | no | Service address. Default: the customer's existing address. |
| `provider_id` | string | no | Provider or team. Omit to leave the booking unassigned. |
| `payment` | enum | no | existing_card or cash_check. Default: existing_card. |
| `save_as` | enum | no | booking, draft or quote. Default: booking. |

Creates a booking for an existing customer, or for a new one when you pass a name and email. Without provider_id the booking waits in the unassigned folder. save_as can store it as a draft or a quote instead. Returns the booking_id and its folder. By default you confirm each call; you can switch that off for this tool.

Example response:

```json
{
  "booking_id": "48377",
  "status": "upcoming",
  "folder": "upcoming",
  "arrival": "2026-10-12T09:00:00-05:00",
  "customer": {
    "customer_id": "1207",
    "name": "Sarah Miller"
  },
  "provider": null,
  "payment": "cash_check"
}
```

### reschedule_booking

Move a booking to a new date and arrival time. Access: write, asks the user first. REST: `POST /api/v1/bookingkoala/reschedule_booking`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `booking_id` | string | yes | Booking ID from list_bookings. |
| `arrival` | datetime | yes | New date and arrival time, ISO 8601 with time zone. |
| `keep_provider` | boolean | no | Keep the assigned provider or team. Default: true. |

Moves one booking to a new date and arrival time and returns the updated booking. The assigned provider or team stays unless keep_provider is false. Rescheduling fees are set in BookingKoala; check them before moving many jobs. By default you confirm each call; you can switch that off for this tool.

Example response:

```json
{
  "booking_id": "48213",
  "status": "upcoming",
  "arrival": "2026-10-16T10:00:00-05:00",
  "provider": {
    "id": "312",
    "name": "Team Blue"
  }
}
```

### assign_provider

Assign a provider or team to a booking, or pair providers for it. Access: write, asks the user first. REST: `POST /api/v1/bookingkoala/assign_provider`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `booking_id` | string | yes | Booking ID from list_bookings. |
| `provider_ids` | string[] | yes | One provider or team, or several providers to pair. |

Assigns one provider or team to a booking, which takes it out of the unassigned folder. Pass several provider_ids to pair providers on one booking; that needs provider pairing switched on in your BookingKoala scheduling permissions and on each provider. By default you confirm each call; you can switch that off for this tool.

Example response:

```json
{
  "booking_id": "48213",
  "status": "assigned",
  "folder": "upcoming",
  "providers": [
    {
      "id": "312",
      "name": "Team Blue"
    }
  ]
}
```

### add_booking_note

Add a private booking note, a private customer note or a note for the service provider. Access: write, asks the user first. REST: `POST /api/v1/bookingkoala/add_booking_note`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `booking_id` | string | yes | Booking ID from list_bookings. |
| `type` | enum | yes | private_booking, private_customer or for_provider. |
| `text` | string | yes | Note text. |

Adds a note to a booking. private_booking and private_customer notes are for your team only; for_provider is shown to the service provider, so it reaches another person. Returns the note_id. By default you confirm each call; you can switch that off for this tool.

Example response:

```json
{
  "note_id": "n_5521",
  "booking_id": "48213",
  "type": "for_provider",
  "status": "added"
}
```

### cancel_booking

Cancel a booking, with or without the cancellation fee and the provider's share of it. Access: write, asks the user first. REST: `POST /api/v1/bookingkoala/cancel_booking`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `booking_id` | string | yes | Booking ID from list_bookings. |
| `charge_fee` | boolean | no | Charge your cancellation fee. Default: true. |
| `pay_provider` | boolean | no | Pay the provider out of the fee. Default: true. |
| `reason` | string | no | One of your cancellation reasons, if set up. |

Cancels one booking and moves it to the cancelled folder. charge_fee false cancels without your cancellation fee. pay_provider false skips the provider's share of the fee. reason takes one of the cancellation reasons you set up in BookingKoala. By default you confirm each call; you can switch that off for this tool.

Example response:

```json
{
  "booking_id": "48213",
  "status": "cancelled",
  "folder": "cancelled",
  "fee_charged": false,
  "reason": "Customer request"
}
```

### send_quote

Email a saved quote with an expiry date, reminder and optional offer. Access: write, asks the user first. REST: `POST /api/v1/bookingkoala/send_quote`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `quote_id` | string | yes | Quote ID from list_bookings with folder drafts_quotes. |
| `to` | string | no | Recipient email. Default: the customer's email. |
| `expires_on` | date | no | Expiry date of the quote link. |
| `reminder_days` | integer | no | Send a reminder after this many days. |
| `offer` | string | no | Discount, e.g. "10%" or "$20". |

Emails a quote saved in the drafts and quotes folder to the customer, with an optional expiry date, reminder and offer. Returns the recipient and expiry. By default you confirm each call; you can switch that off for this tool.

Example response:

```json
{
  "quote_id": "q_3302",
  "status": "sent",
  "to": "sarah@example.com",
  "expires_on": "2026-10-25"
}
```

### refund_charge

Full or partial refund of a charge. One refund per charge. Access: write, asks the user first. REST: `POST /api/v1/bookingkoala/refund_charge`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `charge_id` | string | yes | Charge ID from list_charges. |
| `amount` | string | no | Partial refund including tax. Omit for a full refund. |
| `reason` | string | yes | Reason shown on the booking. |
| `notify` | boolean | no | Notify the customer. Default: true. |

Refunds a charge in full, or in part when you pass amount; a partial amount includes tax. BookingKoala allows one refund per transaction, so a second refund on the same charge fails. The reason shows on the booking. notify false skips the customer notification. By default you confirm each call; you can switch that off for this tool.

Example response:

```json
{
  "charge_id": "90417",
  "status": "refunded",
  "charge_amount": "50.00",
  "refunded": "25.00",
  "reason": "Kitchen not finished, half refunded"
}
```

### resend_invoice

Resend an unpaid invoice to the customer. Access: write, asks the user first. REST: `POST /api/v1/bookingkoala/resend_invoice`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `invoice_id` | string | yes | Invoice ID from list_invoices. |

Resends one unpaid invoice to its customer, the same as Resend in the Actions menu of the Invoice Dashboard. Returns the send time. By default you confirm each call; you can switch that off for this tool.

Example response:

```json
{
  "invoice_id": "inv_7710",
  "status": "resent",
  "to": "sarah@example.com",
  "sent_at": "2026-10-12T08:00:00-05:00"
}
```

## How do I connect BookingKoala to Claude Code, Codex or Cursor?

Connecting BookingKoala takes three steps: request access, sign in to BookingKoala once, then add one MCP server or call the REST API with the same key.

### Connect BookingKoala to your agent.

1. **Create an account** Sign up and add BookingKoala in the console. Your API key is there too.

2. **Sign in to BookingKoala once** Open the connect page from the console and sign in to BookingKoala the way you always do. We keep the session, never your password, and you can revoke it anytime.

3. **Add Cotlet to your agent** Paste the snippet for your client. The same server and key serve every app you connect, so you do this once.

   Claude Code:

```
claude mcp add --transport http cotlet \
  https://cotlet.dev/mcp/v1 \
  --header "Authorization: Bearer $COTLET_API_KEY"
```

   Cursor:

```
{
  "mcpServers": {
    "cotlet": {
      "url": "https://cotlet.dev/mcp/v1",
      "headers": {
        "Authorization": "Bearer ${COTLET_API_KEY}"
      }
    }
  }
}
```

   Codex:

```
# ~/.codex/config.toml
[mcp_servers.cotlet]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY"
```

4. **Ask your agent** Ask in plain words. Your agent finds the BookingKoala tools on the server and calls them for you; anything that reaches other people waits for your OK unless you switch that off for a tool.

```
Go through the BookingKoala unassigned folder for this week. Give each job to the free provider with the fewest bookings that day, high priority first, and tell me which jobs nobody can take.
```

### Call BookingKoala from your scripts.

1. **Export your API key** Your scripts use the same API key as your agent. Keep it in an environment variable, never in your code.

```
export COTLET_API_KEY="cotlet_..."
```

2. **Call a tool** Every tool is a POST endpoint at /api/v1/bookingkoala/{tool}. Send its parameters as JSON, exactly as listed in the endpoints above.

```
curl https://cotlet.dev/api/v1/bookingkoala/reschedule_booking \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"booking_id":"48213","arrival":"2026-10-16T10:00:00-05:00","keep_provider":true}'
```

3. **Read the result** You get plain JSON back, ready for your script. A failed call costs nothing.

```
{
  "booking_id": "48213",
  "status": "upcoming",
  "arrival": "2026-10-16T10:00:00-05:00",
  "provider": {
    "id": "312",
    "name": "Team Blue"
  }
}
```

## Why use Cotlet for BookingKoala?

**Built for agents**

- One MCP server for every app you connect.
- The same tools as a REST API for scripts and cron jobs.
- Works with Claude Code, Codex and Cursor.

**Your login stays yours**

- You sign in to BookingKoala yourself. We keep only the session, encrypted with AES-256.
- The model never sees a login.
- No stored passwords, no CAPTCHA solving, no MFA bypass.

**You stay in control**

- Pick read only, or read and write.
- Anything that reaches other people waits for your OK, unless you switch it off per tool.
- Revoke access in one click.

**Kept working for you**

- We test every integration daily.
- When BookingKoala changes, the tool pauses until we fix it.
- Failed calls cost nothing.

## Is there a BookingKoala MCP server on GitHub?

Zapier and Make connect with a BookingKoala API key and react to events like New Booking or Booking Cancelled, but can only write one thing back: a lead. We found no open-source BookingKoala MCP server.

|  | Zapier or Make | Cotlet |
|---|---|---|
| Setup | Generate a key in Apps & Integrations, build a Zap or scenario per event | Request access, sign in to BookingKoala once, add one MCP server or API key |
| Reading data | Only events as they happen, no lookup of past bookings | Search bookings, customers, charges and provider payments any time |
| Write actions | Create Lead only | Book, reschedule, assign, cancel, refund; you confirm each call by default |
| When the app changes | Maintained by BookingKoala, Zapier and Make | Our team tests it daily and fixes it for you; failed calls are free |
| Your session | An API key you generate and keep in each tool | Encrypted in an EU vault, limited to the actions you allow, revoked in one click |
| Where it runs | Zapier or Make cloud, inside a fixed workflow | Hosted: Claude Code, Codex, Cursor, n8n and scripts, also on a schedule |
| Price | Free tier, paid plans for more tasks | Free 7-day trial with 5,000 credits, then credits per call |

### Which one fits you

**Pick Cotlet if**

- you are not a developer, or you do not want to maintain a server
- you need it to keep working when BookingKoala changes, without checking it yourself
- your agent or a script should run it on a schedule, also while your computer is off

**Pick an open-source server if**

- you are comfortable installing, updating and fixing it yourself
- you want the session to stay on your own computer
- you only need it now and then, from one MCP client

## How much does the BookingKoala API cost?

Free 7-day trial with 5,000 credits, no card needed. After that, the BookingKoala API comes with the Cotlet plan, from $29 a month for 3,000 credits, with no limit on apps. Each month's credits stay valid for 3 months, so unused credits add up.

| Size | Price | Credits / month | Per credit |
|---|---|---|---|
| Solo | $29/mo | 3,000 | about $0.0097 |
| Pro | $99/mo | 12,000 | about $0.0083 |
| Agency | $299/mo | 40,000 | $0.0075 |

Each successful call uses credits for the work it takes; failed calls and timeouts cost nothing. A hard spend cap is on by default. Authenticate with the `Authorization: Bearer` header. [See full pricing](https://cotlet.dev/pricing)

## How Cotlet holds your access

Cotlet hosts MCP servers and REST APIs for apps with no usable API. Your agent works in your own BookingKoala account.

- **Company details:** The legal name, address and registration numbers of the company behind Cotlet are in the Terms of service. [Terms](https://cotlet.dev/terms)
- **Your session:** You sign in to BookingKoala yourself, in your browser. We keep only the session, never your password: encrypted with AES-256 in an EU vault, isolated to your account and used only when your agent calls a BookingKoala tool you allowed. When it expires, your agent gives you a link to sign in again. [Security](https://cotlet.dev/security)
- **Revoking access:** Disconnect BookingKoala in your dashboard: the session is deleted and access ends at once. Actions that reach other people wait for your OK unless you switch that off per tool.
- **What we never do:** Store passwords, solve CAPTCHAs or bypass MFA.
- **BookingKoala's terms:** You use your own BookingKoala account and stay responsible for following BookingKoala's terms. Cotlet is independent and not affiliated with BookingKoala. [Terms](https://cotlet.dev/terms)
- **Contact:** Questions about the company, security or an app: [contact@cotlet.dev](mailto:contact@cotlet.dev)

## Frequently asked questions

**How do I get access?**

Request access and pick BookingKoala. Cotlet reviews each request and emails you your API key.

**Do I need to be technical?**

No. You sign in to BookingKoala once in your browser and paste one command into your agent, or one URL into n8n. Your agent can walk you through it. There is no server to install, update or fix.

**Is a hosted server safe? My BookingKoala session would leave my computer.**

Cotlet keeps your BookingKoala session encrypted with AES-256 in an EU vault, isolated to your account and used only for the tools you allow: read only, or read and write. The AI model never sees it, and you revoke it in one click. A local server keeps the same session in a file on your computer, readable by any program you run, and needs a fresh sign-in whenever it expires.

**Do I need Zapier or an API key from BookingKoala?**

No. Cotlet works in your own BookingKoala admin or staff account and does not use the API key from Apps & Integrations, which only connects Zapier and Make (checked 11 Oct 2026).

**Can my agent post or send messages in BookingKoala without asking me?**

No. Every call to create_booking, reschedule_booking, assign_provider, add_booking_note, cancel_booking, send_quote, refund_charge or resend_invoice waits for your OK by default. For scheduled automations you can switch confirmation off per tool in your dashboard, for example only for approvals.

**Can I use the BookingKoala API in n8n?**

Yes. Add https://cotlet.dev/mcp/v1 with your API key in n8n's MCP Client node, or call https://cotlet.dev/api/v1/bookingkoala/{tool} from the HTTP Request node.
