# Developers,developers,developers!

Alles in Makeplans zit in de API: REST en JSON, webhooks voor elke wijziging en een MCP-server voor AI-assistenten.

[Lees de API-documentatie](https://developer.makeplans.com)

- REST + JSON
- Webhooks
- MCP
- iCal
- CSV

```
$ curl https://youraccount.makeplans.com/api/v1/services/42/slots?from=2026-11-19 \
  -H 'Authorization: Bearer $MAKEPLANS_API_KEY' \
  -H 'User-Agent: MyApp' \
  -H 'Accept: application/json'
[
  {
    "slot": {
      "timestamp": "2026-11-19T10:30:00+01:00",
      "timestamp_end": "2026-11-19T11:30:00+01:00",
      "free": 1,
      "available_resources": [1, 2],
      "maximum_capacity": 2
    }
  },
  {
    "slot": {
      "timestamp": "2026-11-19T13:00:00+01:00",
      "timestamp_end": "2026-11-19T14:00:00+01:00",
      "free": 2,
      "available_resources": [1, 2],
      "maximum_capacity": 2
    }
  }
]$ curl https://youraccount.makeplans.com/api/v1/bookings -X POST \
  -H 'Authorization: Bearer $MAKEPLANS_API_KEY' \
  -H 'User-Agent: MyApp' \
  -H 'Accept: application/json' \
  -d 'booking[service_id]=42' \
  -d 'booking[resource_id]=1' \
  -d 'booking[booked_from]=2026-11-19T10:30:00+01:00' \
  -d 'booking[booked_to]=2026-11-19T11:30:00+01:00'
{
  "booking": {
    "id": 1337,
    "state": "confirmed",
    "service_id": 42,
    "resource_id": 1,
    "booked_from": "2026-11-19T10:30:00+01:00",
    "booked_to": "2026-11-19T11:30:00+01:00"
  }
}
```

```
curl https://youraccount.makeplans.com/api/v1/services/42/slots?from=2026-11-19 \
  -H 'Authorization: Bearer $MAKEPLANS_API_KEY' \
  -H 'User-Agent: MyApp' \
  -H 'Accept: application/json'
```

```
[
  {
    "slot": {
      "timestamp": "2026-11-19T10:30:00+01:00",
      "timestamp_end": "2026-11-19T11:30:00+01:00",
      "free": 1,
      "available_resources": [1, 2],
      "maximum_capacity": 2
    }
  },
  {
    "slot": {
      "timestamp": "2026-11-19T13:00:00+01:00",
      "timestamp_end": "2026-11-19T14:00:00+01:00",
      "free": 2,
      "available_resources": [1, 2],
      "maximum_capacity": 2
    }
  }
]
```

```
# 10:30 is free. Book it.
```

```
curl https://youraccount.makeplans.com/api/v1/bookings -X POST \
  -H 'Authorization: Bearer $MAKEPLANS_API_KEY' \
  -H 'User-Agent: MyApp' \
  -H 'Accept: application/json' \
  -d 'booking[service_id]=42' \
  -d 'booking[resource_id]=1' \
  -d 'booking[booked_from]=2026-11-19T10:30:00+01:00' \
  -d 'booking[booked_to]=2026-11-19T11:30:00+01:00'
```

```
{
  "booking": {
    "id": 1337,
    "state": "confirmed",
    "service_id": 42,
    "resource_id": 1,
    "booked_from": "2026-11-19T10:30:00+01:00",
    "booked_to": "2026-11-19T11:30:00+01:00"
  }
}
```

```
const api = "https://youraccount.makeplans.com/api/v1";
const headers = {
  Authorization: `Bearer ${process.env.MAKEPLANS_API_KEY}`,
  "User-Agent": "MyApp",
  Accept: "application/json",
};

// Find the first free slot
const slots = await fetch(`${api}/services/42/slots?from=2026-11-19`, { headers })
  .then((res) => res.json());
const { slot } = slots.find(({ slot }) => slot.free > 0);

// Book it
const booking = await fetch(`${api}/bookings`, {
  method: "POST",
  headers,
  body: new URLSearchParams({
    "booking[service_id]": "42",
    "booking[resource_id]": String(slot.available_resources[0]),
    "booking[booked_from]": slot.timestamp,
    "booking[booked_to]": slot.timestamp_end,
  }),
}).then((res) => res.json());

console.log(booking);
```

```
{
  "booking": {
    "id": 1337,
    "state": "confirmed",
    "service_id": 42,
    "resource_id": 1,
    "booked_from": "2026-11-19T10:30:00+01:00",
    "booked_to": "2026-11-19T11:30:00+01:00"
  }
}
```

```
require "net/http"
require "json"

API = "https://youraccount.makeplans.com/api/v1"

def makeplans(request)
  request["Authorization"] = "Bearer #{ENV.fetch('MAKEPLANS_API_KEY')}"
  request["User-Agent"] = "MyApp"
  request["Accept"] = "application/json"
  uri = request.uri
  response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(request) }
  JSON.parse(response.body)
end

# Find the first free slot
slots = makeplans(Net::HTTP::Get.new(URI("#{API}/services/42/slots?from=2026-11-19")))
slot = slots.map { |s| s["slot"] }.find { |s| s["free"] > 0 }

# Book it
post = Net::HTTP::Post.new(URI("#{API}/bookings"))
post.set_form_data(
  "booking[service_id]" => 42,
  "booking[resource_id]" => slot["available_resources"].first,
  "booking[booked_from]" => slot["timestamp"],
  "booking[booked_to]" => slot["timestamp_end"]
)
puts makeplans(post)
```

```
{
  "booking": {
    "id": 1337,
    "state": "confirmed",
    "service_id": 42,
    "resource_id": 1,
    "booked_from": "2026-11-19T10:30:00+01:00",
    "booked_to": "2026-11-19T11:30:00+01:00"
  }
}
```

```
import os
import requests

API = "https://youraccount.makeplans.com/api/v1"
session = requests.Session()
session.headers.update({
    "Authorization": f"Bearer {os.environ['MAKEPLANS_API_KEY']}",
    "User-Agent": "MyApp",
    "Accept": "application/json",
})

# Find the first free slot
slots = session.get(f"{API}/services/42/slots", params={"from": "2026-11-19"}).json()
slot = next(s["slot"] for s in slots if s["slot"]["free"] > 0)

# Book it
booking = session.post(f"{API}/bookings", data={
    "booking[service_id]": 42,
    "booking[resource_id]": slot["available_resources"][0],
    "booking[booked_from]": slot["timestamp"],
    "booking[booked_to]": slot["timestamp_end"],
}).json()
print(booking)
```

```
{
  "booking": {
    "id": 1337,
    "state": "confirmed",
    "service_id": 42,
    "resource_id": 1,
    "booked_from": "2026-11-19T10:30:00+01:00",
    "booked_to": "2026-11-19T11:30:00+01:00"
  }
}
```

## In een paar minuten aan de slag

### Haal je API-sleutel op

Schakel de API in onder Setup → Integrations → API en kopieer je sleutel.

### Doe je eerste request

Stuur de sleutel mee als Bearer-token. Elk object heeft een eigen endpoint, alles in JSON.

### Luister naar wijzigingen

Voeg een webhook toe en wij doen een POST naar je server wanneer boekingen, evenementen of klanten wijzigen.

## Twee API's

### Publieke API

Geen sleutel nodig. Toon diensten en beschikbare tijden en start een boeking, direct vanaf je website.

`https://youraccount.makeplans.com/`

### Privé-API

Volledige toegang tot je account met een API-sleutel, voor je backend en integraties. Houd de sleutel buiten publieke code.

`https://youraccount.makeplans.com/api/v1/`

## Koppel Makeplans aan je interne applicatie of website

Alle functies van Makeplans zijn beschikbaar via de API. Het is een REST-API met JSON. We kunnen ook webhooks versturen.

- [Slots](https://developer.makeplans.com/endpoints/slots/)
- [Bookings](https://developer.makeplans.com/endpoints/bookings/)
- [People](https://developer.makeplans.com/endpoints/people/)
- [Services](https://developer.makeplans.com/endpoints/services/)
- [Events](https://developer.makeplans.com/endpoints/events/)
- [Resources](https://developer.makeplans.com/endpoints/resources/)
- [Resource Exception Dates](https://developer.makeplans.com/endpoints/resource-exception-dates/)
- [Providers](https://developer.makeplans.com/endpoints/providers/)
- [Categories](https://developer.makeplans.com/endpoints/categories/)
- [Coupons](https://developer.makeplans.com/endpoints/coupons/)
- [Orders](https://developer.makeplans.com/endpoints/orders/)
- [Gift Cards](https://developer.makeplans.com/endpoints/gift-cards/)
- [Message Templates](https://developer.makeplans.com/endpoints/message-templates/)
- [Webhooks](https://developer.makeplans.com/endpoints/webhooks/)
- [Account](https://developer.makeplans.com/endpoints/account/)
- [Passes](https://developer.makeplans.com/endpoints/passes/)
- [Subscriptions](https://developer.makeplans.com/endpoints/subscriptions/)
- [Bekijk alle endpoints](https://developer.makeplans.com/endpoints/)

## Koppel je AI-assistent (MCP)

Makeplans biedt een MCP-server, zodat AI-assistenten zoals Claude en ChatGPT met je boekingen kunnen werken. Vraag je assistent om de beschikbaarheid te controleren, een klant op te zoeken of boekingen aan te maken en te annuleren – met je eigen Makeplans-inloggegevens.

MCP (Model Context Protocol) is een open standaard. Elke assistent of agent die MCP spreekt, kan verbinding maken – geen speciale plug-in, geen lock-in, net zoals we al het andere bouwen.

### Tools die je assistent krijgt

- `find_available_slots`
- `list_services`
- `list_events`
- `list_bookings`
- `get_booking`
- `find_customer`
- `create_booking`
- `cancel_booking`

### Koppel Claude Code met één regel

```
claude mcp add --transport http makeplans \
  https://youraccount.makeplans.com/api/mcp \
  --header "Authorization: Bearer $MAKEPLANS_API_KEY"
```

Lees meer over onze [AI-boekingsassistent](/nl/oplossingen/ai-boekingsassistent/).

Boek Anna in voor een massage op vrijdag om 14:00

Ik zoek de dienst massage op en zoek Anna erbij.

M`list_services`

```
→{}←[{"id": 42, "title": "Massage", "interval": 60}]
```

M`find_customer`

```
→{"query": "Anna"}←[{"id": 7, "name": "Anna Nordmann"}]
```

M`find_available_slots`

```
→{"service_id": 42, "from": "2026-11-13"}←[{"timestamp": "2026-11-13T14:00:00+01:00", "free": 1}]
```

M`create_booking`

```
→{"service_id": 42, "person_id": 7, "booked_from": "2026-11-13T14:00:00+01:00"}←{"id": 1338, "state": "confirmed"}
```

Geboekt: Anna Nordmann, massage op vrijdag om 14:00. Ze krijgt een bevestiging en een herinnering.

## Webhooks voor elke wijziging

Wordt een boeking aangemaakt, bevestigd, verplaatst of geannuleerd, dan sturen wij die met een POST naar je server, ondertekend met HMAC SHA-256 zodat je weet dat het bericht van ons komt. Zapier en Make kunnen het ook oppikken.

Mmakeplans

{ }your server

Zapier

Make

POST https://example.com/webhooks

```
X-MakePlans-Signature: sha256=5257a869e7ec…{
  "event": "booking.created",
  "idempotency_id": "evt_4810",
  "generated_at": "2026-11-12T02:37:29Z",
  "performed_by": "customer",
  "data": {
    "object": "booking",
    "id": 1337,
    "booking": { "id": 1337, "state": "confirmed" }
  }
}
```

tail -f webhooks.log

```
02:37:29 POST /webhooks **booking.created** _200 OK_signature ✓
```

## De standaard boekingspagina aanpassen

Je kunt de standaard boekingspagina aanpassen met eigen CSS. Daarnaast kun je [formulieren aanpassen](https://github.com/makeplans/makeplans-custom-forms) en alle [uitgaande berichten](https://github.com/makeplans/makeplans-custom-messages) met de templatetaal Liquid.

custom.css

.booking-site {--accent: #2a8c8f;--background: #f1f8f8;--text: #173f44;--soft: #d9ecec;--radius: 14px;--font: "Avenir Next", sans-serif;}

// Klik op een waarde om die te wijzigen

 Jouw bedrijf Jouw boekingspagina, jouw stijl 

**12**** 13 ****14**** 15**

09:0010:3011:0013:0014:3016:00
Nu boeken

### Ingebouwde integraties

Makeplans heeft al een flink aantal integraties ingebouwd. Kijk op onze [integratiepagina](/nl/integraties/) voor meer informatie. Naast onze directe integraties koppelen we ook met de integratieplatformen [Zapier](/nl/integraties/zapier/) en [Make](/nl/integraties/make/), waarmee je zonder te programmeren met andere applicaties kunt integreren.

### Gegevens exporteren

Boekingen, klanten en evenementen kun je eenvoudig als CSV-bestand exporteren en downloaden.

### iCalendar-feeds

Om afspraken uit Makeplans in andere agenda-apps te tonen, bieden we een iCalendar-feed. Die werkt met Google Calendar, Agenda voor macOS en iOS, Android, Outlook en andere agenda-apps.

## Duik in de documentatie

- [Handleiding](https://developer.makeplans.com/guide/getting-started/)
- [API-endpoints](https://developer.makeplans.com/endpoints/)
- [Voorbeelden](https://developer.makeplans.com/examples/overview/)
- [Changelog](https://developer.makeplans.com/changelog/)
- [Partner-API](https://developer.makeplans.com/partner/)

Je vindt onze [API-documentatie op developer.makeplans.com](https://developer.makeplans.com).
