Local services & SaaS
Faire
Orders, inventory, reorders and messages for wholesale brands.
12 endpoints
Bookings, free times, customers, the waitlist and messages for your Bokadirekt salon. Use it in ChatGPT, Claude or any AI agent over MCP, or in n8n, Make and scripts over REST.
13 tools Read and write
Bokadirekt has a Merchant API that reads bookings, customers, sales, staff and services, but it cannot create, move or cancel a booking (checked 31 Oct 2026). It costs 399 kr per month excl. VAT and Bokadirekt support switches it on. There is no official MCP server. Cotlet runs 13 Bokadirekt tools hosted, over MCP for agents and REST for scripts.
| What you need | Merchant API | By hand in the portal | Cotlet |
|---|---|---|---|
| Read bookings, customers and staff | Yes, 399 kr a month | Yes | Yes |
| Create a booking | No | Yes | Yes, after your OK |
| Move or cancel a booking | No | Yes | Yes, after your OK |
| Text a booked customer | No | Yes | Yes, after your OK |
| Runs by itself on a schedule | Reads, if you write code | No | Yes |
| Allowed by Bokadirekt's terms | Yes, official | Yes | Uses the web portal, see Terms |
Checked 31 Oct 2026. Sources: Bokadirekt Merchant API reference · Bokadirekt help: Bokadirekts API · Bokadirekt: API & Webhooks · Bokadirekt: Webhooks
Use your own account in its Cotlet Cloud Browser.
Connect your agent or create a Cotlet API key.
Ask your agent or send an HTTP request.
We never keep your Bokadirekt password, and no move, cancellation or message reaches a customer until you approve it. Who can see your session
Use MCP with your AI agent, or HTTP requests in n8n, Make, Zapier and scripts. Follow the MCP setup below or jump to the REST guide.
Enable Bokadirekt for agents. Sign up, log in to Bokadirekt in its Cloud Browser, then press Enable for agents.
Add the Cotlet address. Add https://cotlet.dev/mcp/v1 as an MCP server or connector in your agent.
Approve the connection. Chat apps ask you to sign in to Cotlet. Editors, n8n and scripts use an API key from the console.
One shared address, https://cotlet.dev/mcp/v1, also carries Bokadirekt next to your other apps. If you enable Bokadirekt after connecting, refresh the connector so the new tools show up.
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet-bokadirekt \
https://cotlet.dev/mcp/v1 \
--header "Authorization: Bearer $COTLET_API_KEY" Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth // ~/.cursor/mcp.json
{
"mcpServers": {
"cotlet-bokadirekt": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet-bokadirekt]
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: bokadirekt_read Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key>
Tool: bokadirekt_write Create a Cotlet API key with access to Bokadirekt and its read operations. Store it as COTLET_API_KEY in your environment or automation platform's credential store.
Connect Bokadirekt in Cotlet and enable it for agents. Account access: Your own Bokadirekt business user (what it can do depends on the permissions your account owner gave it).
curl "https://cotlet.dev/api/v1/bokadirekt/bookings?from=2026-11-06&to=2026-11-06&type=all" \
-H "Authorization: Bearer $COTLET_API_KEY" A successful REST call puts the tool output in result. This illustrative response excerpt omits call IDs, messages and credit details.
{
"status": "success",
"app": "bokadirekt",
"tool": "list_bookings",
"result": {
"bookings": [
{
"booking_id": "bk_5501",
"customer": "Anna Ek",
"service": "Klippning dam",
"staff": "Elin Berg",
"start": "2026-11-06T09:00:00+01:00",
"price": 595,
"status": "booked",
"source": "bokadirekt.se"
},
{
"booking_id": "bk_5502",
"customer": "Maja Holm",
"service": "Färg och klipp",
"staff": "Elin Berg",
"start": "2026-11-06T11:00:00+01:00",
"price": 1490,
"status": "booked",
"source": "internal"
}
]
}
} Returns the bookings the Lista view shows for the dates you pick, in start order, with cancelled ones marked cancelled.
Pass type to narrow the list the way the portal's Filter panel does: cancelled, no_show, new_customer, last_minute, internal or online.
Keep each booking_id. get_booking, move_booking and cancel_booking take it.
Compare changed values as well as ids when refreshing your destination: a booking can be moved to another time or staff member.
| Tool | Connect through | Example workflow |
|---|---|---|
| n8n | HTTP Request | Read tomorrow's bookings every afternoon. Use list_bookings in your configured reminder flow. |
| Make | HTTP > Make a request | Read the waitlist and post it to a channel for your OK. Use list_waitlist in your configured scenario. |
| Python or Node.js | REST API | Look up a customer's history before a call. Use get_customer in your configured script. |
Send Authorization: Bearer <your Cotlet API key> in request headers. You configure the schedule, destination and record comparisons.
Cotlet reads Bokadirekt; your workflow steps write to your chosen destination. These HTTP workflows do not require a native Cotlet connector or a prebuilt template.
Python and Node.js can use the same HTTP requests without an AI agent. Keep access keys in credentials, outside shared workflow exports.
The API and MCP reference lists operations and inputs. The REST API guide explains authentication, errors and approvals.
Read only. These return the ids the other tools take.
Returns the locations of your business with the name Bokadirekt shows. Use location as the filter on the other tools when your account has more than one. A business with one location gets a list of one.
MCP callbokadirekt_read → list_locations
REST endpointGET https://cotlet.dev/api/v1/bokadirekt/locations
No parameters.
{
"locations": [
{
"location": "Salong Eira Södermalm",
"city": "Stockholm"
}
]
} Returns the users of your account who can be booked. Use staff_id to filter bookings and available times.
MCP callbokadirekt_read → list_staff
REST endpointGET https://cotlet.dev/api/v1/bokadirekt/staffs
| Name | Type | Description |
|---|---|---|
| location string | string | Only staff of this location. |
{
"staff": [
{
"staff_id": "st_101",
"name": "Elin Berg",
"location": "Salong Eira Södermalm"
},
{
"staff_id": "st_102",
"name": "Sara Lind",
"location": "Salong Eira Södermalm"
}
]
} Returns the bookable services of your account with their length in minutes and price. Use service_id in find_available_times and create_booking.
MCP callbokadirekt_read → list_services
REST endpointGET https://cotlet.dev/api/v1/bokadirekt/services
| Name | Type | Description |
|---|---|---|
| location string | string | Only services offered at this location. |
{
"services": [
{
"service_id": "sv_21",
"name": "Klippning dam",
"minutes": 45,
"price": 595
},
{
"service_id": "sv_22",
"name": "Färg och klipp",
"minutes": 120,
"price": 1490
}
]
} Create, move and cancel work as the booking card does. Booking and cancellation margins do not apply to a signed-in business user.
Returns the free start times Bokadirekt proposes for one service when you pick it in the calendar, in the time order of the calendar. The length of the service and any gap after it are respected. Pick staff_id to see one person only.
MCP callbokadirekt_read → find_available_times
REST endpointGET https://cotlet.dev/api/v1/bokadirekt/services/{service_id}/available-times/find
| Name | Type | Description |
|---|---|---|
| service_id string required | string | Service from list_services. |
| date date required | date | First day to search. |
| staff_id string | string | Only this staff member. |
{
"service_id": "service_8c41d2",
"date": "2026-10-01"
} {
"times": [
{
"staff_id": "st_102",
"start": "2026-11-06T10:00:00+01:00"
},
{
"staff_id": "st_102",
"start": "2026-11-06T13:30:00+01:00"
}
]
} Returns the bookings the Lista view shows for the dates you pick, with cancelled ones marked. type narrows the list the way the Filter panel does. Results come in start order. Use booking_id with get_booking, move_booking and cancel_booking.
MCP callbokadirekt_read → list_bookings
REST endpointGET https://cotlet.dev/api/v1/bokadirekt/bookings
| Name | Type | Description |
|---|---|---|
| from date required | date | First day. |
| to date required | date | Last day. |
| type enum | enum | all, cancelled, no_show, new_customer, last_minute, internal or online (made on Bokadirekt.se). Default: all. |
| staff_id string | string | Only this staff member. |
| service_id string | string | Only this service. |
{
"from": "2026-10-01",
"to": "2026-10-01"
} {
"bookings": [
{
"booking_id": "bk_5501",
"customer": "Anna Ek",
"service": "Klippning dam",
"staff": "Elin Berg",
"start": "2026-11-06T09:00:00+01:00",
"price": 595,
"status": "booked",
"source": "bokadirekt.se"
},
{
"booking_id": "bk_5502",
"customer": "Maja Holm",
"service": "Färg och klipp",
"staff": "Elin Berg",
"start": "2026-11-06T11:00:00+01:00",
"price": 1490,
"status": "booked",
"source": "internal"
}
]
} Returns the details of one booking as the booking card shows them, including the booking note and whether the customer paid online. A booking with several services returns one line per service.
MCP callbokadirekt_read → get_booking
REST endpointGET https://cotlet.dev/api/v1/bokadirekt/bookings/{booking_id}
| Name | Type | Description |
|---|---|---|
| booking_id string required | string | Booking from list_bookings. |
{
"booking_id": "booking_8c41d2"
} {
"booking_id": "bk_5501",
"customer": "Anna Ek",
"customer_id": "cu_880",
"service": "Klippning dam",
"staff": "Elin Berg",
"start": "2026-11-06T09:00:00+01:00",
"minutes": 45,
"price": 595,
"status": "booked",
"note": "Vill ha kortare lugg"
} Creates a booking for an existing customer on one service with one staff member. The booking is made from your signed-in user, so the booking margin does not apply. Bokadirekt sends the customer a confirmation according to your settings. By default you confirm each call; you can switch that off for this tool.
MCP callbokadirekt_write → create_booking
REST endpointPOST https://cotlet.dev/api/v1/bokadirekt/customers/{customer_id}/bookings
| Name | Type | Description |
|---|---|---|
| customer_id string required | string | Customer from list_customers. |
| service_id string required | string | Service from list_services. |
| staff_id string required | string | Staff member from list_staff. |
| start datetime required | datetime | Start time, ISO 8601, from find_available_times. |
{
"customer_id": "cu_912",
"service_id": "sv_21",
"staff_id": "st_102",
"start": "2026-11-06T10:00:00+01:00"
} {
"booking_id": "bk_5530",
"status": "booked",
"start": "2026-11-06T10:00:00+01:00",
"customer": "Maja Holm",
"service": "Klippning dam",
"staff": "Sara Lind"
} Changes the start time, the staff member or both on an existing booking, as the booking card does. The original booking does not stay behind. It changes a customer's appointment, so you confirm it. By default you confirm each call; you can switch that off for this tool.
MCP callbokadirekt_write → move_booking
REST endpointPOST https://cotlet.dev/api/v1/bokadirekt/bookings/{booking_id}/move
| Name | Type | Description |
|---|---|---|
| booking_id string required | string | Booking from list_bookings. |
| start datetime | datetime | New start time, ISO 8601. |
| staff_id string | string | New staff member. |
{
"booking_id": "booking_8c41d2"
} {
"booking_id": "bk_5502",
"status": "booked",
"start": "2026-11-07T11:00:00+01:00",
"staff": "Sara Lind"
} Cancels one booking as Avboka does. Bokadirekt confirms the cancellation to the customer according to your settings. The cancellation margin does not apply to your own user. A cancelled booking stays in list_bookings with status cancelled. By default you confirm each call; you can switch that off for this tool.
MCP callbokadirekt_write → cancel_booking
REST endpointPOST https://cotlet.dev/api/v1/bokadirekt/bookings/{booking_id}/cancel
| Name | Type | Description |
|---|---|---|
| booking_id string required | string | Booking from list_bookings. |
{
"booking_id": "booking_8c41d2"
} {
"booking_id": "bk_5502",
"status": "cancelled"
} Customers appear in the register when they book. An SMS costs extra in Bokadirekt; email is free.
Searches the customer register, which is shared by all locations and users. Returns name, contact details and the date of the latest booking. Customers appear automatically when they book, so the register is also a list of everyone who has booked.
MCP callbokadirekt_read → list_customers
REST endpointGET https://cotlet.dev/api/v1/bokadirekt/customers
| Name | Type | Description |
|---|---|---|
| query string | string | Part of a name, email or phone number. |
{
"customers": [
{
"customer_id": "cu_880",
"name": "Anna Ek",
"email": "anna@example.com",
"last_booking": "2026-10-14"
}
]
} Returns what the customer card shows: contact details, past and future bookings and the notes you saved. Also says whether the customer is blocked from booking online.
MCP callbokadirekt_read → get_customer
REST endpointGET https://cotlet.dev/api/v1/bokadirekt/customers/{customer_id}
| Name | Type | Description |
|---|---|---|
| customer_id string required | string | Customer from list_customers. |
{
"customer_id": "customer_8c41d2"
} {
"customer_id": "cu_880",
"name": "Anna Ek",
"email": "anna@example.com",
"blocked_online": false,
"bookings": [
{
"booking_id": "bk_5501",
"start": "2026-11-06T09:00:00+01:00",
"service": "Klippning dam"
}
],
"notes": [
"Allergisk mot ammoniak"
]
} Returns the customers on your waitlist with the service, the staff member if one was chosen and the date range they gave. The calendar shows the same count for the dates in view.
MCP callbokadirekt_read → list_waitlist
REST endpointGET https://cotlet.dev/api/v1/bokadirekt/waitlists
No parameters.
{
"waitlist": [
{
"customer": "Maja Holm",
"customer_id": "cu_912",
"service": "Klippning dam",
"from": "2026-11-05",
"to": "2026-11-09"
}
]
} Sends a confirmation, a reminder or your own text to the customer of one booking, as the SMS and Mail buttons on the booking card do. SMS costs extra in Bokadirekt; email is free. By default you confirm each call; you can switch that off for this tool.
MCP callbokadirekt_write → send_booking_message
REST endpointPOST https://cotlet.dev/api/v1/bokadirekt/bookings/{booking_id}/message
| Name | Type | Description |
|---|---|---|
| booking_id string required | string | Booking from list_bookings. |
| channel enum required | enum | sms or email. |
| kind enum required | enum | confirmation, reminder or custom. |
| text string | string | The message, only for kind custom. |
{
"booking_id": "booking_8c41d2",
"channel": "sms",
"kind": "confirmation"
} {
"booking_id": "bk_5501",
"channel": "sms",
"status": "sent"
} Your logged-in Bokadirekt profile, encrypted with AES-256-GCM, in Finland. Not the password.
The 13 Bokadirekt tools. Never the cookie.
What your user sees: the diary, customers with their contact details and booking history.
Payments, the point of sale, payouts, subscription, password and deleting.
Your agent gets a link to sign in again. You do it, we never do.
Disable for agents in the console, reset the browser, or change your Bokadirekt password.
Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results). There is no SOC 2 report or third-party pentest yet. Customer names, phone numbers and notes pass through your agent, so check that your use is covered by your own privacy notice.
"The Customer agrees, among other things, not to: use the Business System for illegal purposes, attempt to gain unauthorized access, use automated tools to extract data, or copy and reproduce parts of the Business System."
The clause does not name AI agents or bots. It does ban automated tools that extract data, and an agent that reads your diary can be read that way. Section 3.4 also says not to hand your login details to a third party; Cotlet never receives your password, you sign in yourself in the Cloud Browser. We found no public case of a Bokadirekt account closed for automation (checked 31 Oct 2026). If you want no risk at all, the official Merchant API reads the same bookings and customers for 399 kr a month, and it is the right choice when you only need reads.
Read in short runs and avoid pulling the whole customer register at once. Bokadirekt's API help asks for a reasonable call rate and caching, and the same courtesy applies here.
When Bokadirekt moves a button or renames a field, the fix happens on our side and your prompts keep working. status.cotlet.dev watches the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Create a booking | Cancel it; the customer already got a confirmation |
| Move a booking | Move it back; the customer sees both changes |
| Cancel a booking | Book the time again if it is still free; the customer was told |
| Send an SMS or email | No, the message is out |
4 of 13 tools ask first: create_booking, move_booking, cancel_booking and send_booking_message, the four that change a customer's appointment or message them. The reads run at once. Switch the wait off per tool for a scheduled run.
An SMS costs extra in Bokadirekt according to your price list, so a daily text job adds to your Bokadirekt bill.
{
"name": "create_booking",
"arguments": {
"customer_id": "cu_912",
"service_id": "sv_21",
"staff_id": "st_102",
"start": "2026-11-06T10:00:00+01:00"
}
} curl -X POST https://cotlet.dev/api/v1/bokadirekt/customers/cu_912/bookings \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"service_id":"sv_21","staff_id":"st_102","start":"2026-11-06T10:00:00+01:00"}' {
"booking_id": "bk_5530",
"status": "booked",
"start": "2026-11-06T10:00:00+01:00",
"customer": "Maja Holm",
"service": "Klippning dam",
"staff": "Sara Lind"
} Scripts and cron jobs reach the same tools over REST at /api/v1/bokadirekt, with the same key and price. A failed call costs nothing. The tools table lists the REST path of each tool.
About $34 a monthfor a small salon running five jobs, 5,800 credits. Your Bokadirekt plan is billed by Bokadirekt as before.
| Job | Calls | Credits |
|---|---|---|
| Text tomorrow's customers, daily | 11 × 22 | 2,420 |
| Fill free slots from the waitlist, daily | 5 × 22 | 1,100 |
| Move a sick day's bookings | 19 × 2 | 380 |
| Follow up no-shows, weekly | 7 × 4 | 280 |
| Weekly bookings report | 3 × 4 | 120 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 5,800 |
The month is our example: three stylists, about 10 customers texted a day over 22 working days. Bokadirekt publishes no figure for a typical account. Dollars at the $29 pack rate.
| 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 |
|---|---|---|
| Bokadirekt Merchant API | Official reads of bookings, customers, sales, staff and services, plus webhooks. 399 kr a month excl. VAT. | Read-only, needs a developer, no create, move or cancel. |
| Zapier and n8n | No Bokadirekt app listed on either. | Nothing to connect except the official API by hand. |
| Scrapers of public profiles | Collect public salon pages from Bokadirekt.se. | Your own diary is behind your login, so they do not reach it. |
| By hand in the portal | Everything, with your own clicks. | Every repeat job costs time each day. |
We found no Bokadirekt MCP server on GitHub and no hosted one besides ours. The official API is the safer pick for reports and dashboards. Cotlet is for the jobs it cannot do: rebooking, cancelling, filling gaps and texting customers.
Take Group sp. z o.o. runs Cotlet. It is a software company registered in Poland, EU (VAT PL6342984273), working since 2019, founded by Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Write to contact@cotlet.dev with questions about the Bokadirekt tools.
Create a free account at https://cotlet.dev, open Bokadirekt under Integrations in the console and log in to Bokadirekt in its Cloud Browser. The trial starts with your first app, no card asked.
Sign up at cotlet.dev, log in to Bokadirekt once in its Cloud Browser and add Cotlet to ChatGPT or Claude, following the steps in your console. No API key is needed. ChatGPT and Claude then work in your Bokadirekt account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in Bokadirekt: move a day of bookings when staff are out; text tomorrow\; fill cancelled slots from the waitlist. You ask in plain words, and anything that reaches other people waits for your OK first.
No. Cotlet works in your own signed-in portal and does not use the Merchant API, which costs 399 kr per month excl. VAT and is switched on through Bokadirekt support (checked 31 Oct 2026). What your agent can do still depends on the permissions of your own user.
Not yet. The tools read services, staff and customers and book customers who already exist. New customers appear when a booking is made through the portal or the booking page, and services, prices and opening hours stay in Bokadirekt.
Yes, with the API package or as a 199 kr a month module (checked 31 Oct 2026). They push booking events: created, changed, cancelled, no-show and payment. Cotlet does not receive them. Run your agent on a schedule instead, for example a daily list_bookings pass.
The portal and help center are in Swedish. Tool names and inputs are in English, and customer names, services and notes come back as they are in your diary.
Only the door is different. Both expose the same 13 tools, inputs and answers, with one API key and one price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with Bokadirekt i Stockholm AB.
Yes. Call Cotlet's REST API from a script or an HTTP step in n8n, Make or Zapier with your Cotlet key. MCP is the alternative for AI agents; you do not need to connect an agent to use REST.
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