# Entwickler,Entwickler,Entwickler!

Alles in Makeplans gibt es auch in der API: REST und JSON, Webhooks für jede Änderung und ein MCP-Server für KI-Assistenten.

[API-Dokumentation lesen](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 wenigen Minuten startklar

### API-Schlüssel holen

Aktivieren Sie die API unter Einstellungen → Integrationen → API und kopieren Sie Ihren Schlüssel.

### Erste Anfrage senden

Senden Sie den Schlüssel als Bearer-Token. Jedes Objekt hat einen eigenen Endpunkt, alles in JSON.

### Auf Änderungen reagieren

Richten Sie einen Webhook ein, und wir senden einen POST an Ihren Server, sobald sich Buchungen, Veranstaltungen oder Kunden ändern.

## Zwei APIs

### Öffentliche API

Kein Schlüssel nötig. Zeigen Sie Dienstleistungen und freie Zeiten an und starten Sie eine Buchung, direkt auf Ihrer Website.

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

### Private API

Voller Zugriff auf Ihr Konto per API-Schlüssel, für Ihr Backend und Ihre Integrationen. Der Schlüssel gehört nicht in öffentlichen Code.

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

## Makeplans in Ihre interne Anwendung oder Website einbinden

Alle Funktionen von Makeplans stehen auch über die API zur Verfügung. Es ist eine REST-basierte API mit JSON. Wir können auch Webhooks senden.

- [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/)
- [Alle Endpunkte ansehen](https://developer.makeplans.com/endpoints/)

## Verbinden Sie Ihren KI-Assistenten (MCP)

Makeplans stellt einen MCP-Server bereit, damit KI-Assistenten wie Claude und ChatGPT mit Ihren Buchungen arbeiten können. Bitten Sie Ihren Assistenten, die Verfügbarkeit zu prüfen, einen Kunden nachzuschlagen oder Buchungen zu erstellen und zu stornieren – mit Ihren eigenen Makeplans-Zugangsdaten.

MCP (Model Context Protocol) ist ein offener Standard. Jeder Assistent oder Agent, der MCP spricht, kann sich verbinden – kein proprietäres Plugin, keine Abhängigkeit, ganz so, wie wir auch alles andere bauen.

### Werkzeuge für Ihren Assistenten

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

### Claude Code mit einer Zeile verbinden

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

Mehr über unseren [KI-Buchungsassistenten](/de/loesungen/ki-buchungsassistent/).

Trag Anna am Freitag um 14 Uhr für eine Massage ein

Ich suche die Dienstleistung Massage und schlage Anna nach.

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"}
```

Gebucht: Anna Nordmann, Massage am Freitag um 14 Uhr. Sie erhält eine Bestätigung und eine Erinnerung.

## Webhooks für jede Änderung

Wird eine Buchung erstellt, bestätigt, verschoben oder storniert, senden wir sie per POST an Ihren Server, signiert mit HMAC SHA-256, damit Sie wissen, dass sie von uns stammt. Auch Zapier und Make können sie aufgreifen.

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 ✓
```

## Anpassung der Standard-Buchungsseite

Die Standard-Buchungsseite lässt sich mit eigenem CSS anpassen. Außerdem können Sie mit der Template-Sprache Liquid [Formulare](https://github.com/makeplans/makeplans-custom-forms) und alle [ausgehenden Nachrichten](https://github.com/makeplans/makeplans-custom-messages) anpassen.

custom.css

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

// Klicken Sie auf einen Wert, um ihn zu ändern

 Ihr Unternehmen Ihre Buchungsseite, Ihr Stil 

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

09:0010:3011:0013:0014:3016:00
Jetzt buchen

### Integrierte Anbindungen

Makeplans bringt bereits eine ganze Reihe von Integrationen mit. Mehr dazu auf unserer [Seite zu den Integrationen](/de/integrationen/). Neben den direkten Integrationen sind wir auch an die Integrationsplattformen [Zapier](/de/integrationen/zapier/) und [Make](/de/integrationen/make/) angebunden, mit denen Sie andere Anwendungen ganz ohne Programmieren verbinden.

### Datenexport

Buchungen, Kunden und Veranstaltungen können Sie jederzeit bequem als CSV-Datei herunterladen.

### iCalendar-Feeds

Um Termine aus Makeplans in anderen Kalenderprogrammen anzuzeigen, bieten wir einen iCalendar-Feed an. Er funktioniert in Google Calendar, im Kalender von macOS und iOS, auf Android, in Outlook und in anderen Kalenderanwendungen.

## Tiefer in die Dokumentation

- [Leitfaden](https://developer.makeplans.com/guide/getting-started/)
- [API-Endpunkte](https://developer.makeplans.com/endpoints/)
- [Beispiele](https://developer.makeplans.com/examples/overview/)
- [Änderungsprotokoll](https://developer.makeplans.com/changelog/)
- [Partner-API](https://developer.makeplans.com/partner/)

Unsere [API-Dokumentation finden Sie unter developer.makeplans.com](https://developer.makeplans.com).
