API-Referenz
Verfügbarkeit
Freie Zeitfenster gemäß den Termineinstellungen und den bereits gebuchten Terminen.
Endpunkte
Freie Zeitfenster auflisten
/api/v1/availability
Freie Zeitfenster für einen Termin zwischen date_from und date_to (höchstens 31 Tage). Die Regeln der Buchungsseite: Arbeitszeiten, Pausen, gesperrte Tage, Vorlaufzeit, wie weit im Voraus gebucht werden darf, Puffer sowie die offenen und bestätigten Termine. Der Google-Kalender des Unternehmens zählt hier nicht, und die Zeitfenster gelten für das ganze Unternehmen, nicht pro Mitarbeiter. Sind Termine in den Einstellungen ausgeschaltet, ist die Liste leer. Die Dauer kommt aus duration_minutes, sonst aus der Terminart, sonst aus der Standarddauer.
- Scope
-
appointments.read— Termine (mit Name, E-Mail und Telefon des Kunden), Terminarten und Verfügbarkeit lesen - Erforderliche Funktion
appointments
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
date_from
erforderlich
|
string (date) | Der erste Tag, als JJJJ-MM-TT. |
date_to
|
string (date) | Der letzte Tag, als JJJJ-MM-TT (standardmäßig gleich date_from, höchstens 30 Tage nach date_from). |
appointment_type_id
|
string (uuid) | Die Terminart; die Dauer kommt dann von der Terminart. |
duration_minutes
|
integer | Die Dauer des Termins in Minuten; hat Vorrang vor der Dauer der Terminart. von 5 bis 720 |
Beispielanfrage
curl "https://app.klantly.com/api/v1/availability?date_from=2026-10-05&date_to=2026-10-09&duration_minutes=60" \
-H "Authorization: Bearer $KLANTLY_API_KEY"$client = new \GuzzleHttp\Client([
'base_uri' => 'https://app.klantly.com/api/v1/',
'headers' => ['Authorization' => 'Bearer ' . getenv('KLANTLY_API_KEY')],
]);
$response = $client->request('GET', 'availability', [
'query' => [
'date_from' => '2026-10-05',
'date_to' => '2026-10-09',
'duration_minutes' => 60,
],
]);
$data = json_decode((string) $response->getBody(), true)['data'];const response = await fetch('https://app.klantly.com/api/v1/availability?date_from=2026-10-05&date_to=2026-10-09&duration_minutes=60', {
headers: {
Authorization: `Bearer ${process.env.KLANTLY_API_KEY}`,
},
});
const { data } = await response.json();import os
import requests
response = requests.get(
"https://app.klantly.com/api/v1/availability",
headers={
"Authorization": f"Bearer {os.environ['KLANTLY_API_KEY']}",
},
params={
"date_from": "2026-10-05",
"date_to": "2026-10-09",
"duration_minutes": 60
},
)
data = response.json()["data"]Antwort 200
Die Antwort ist eine Liste mit Cursor-Paginierung: data enthält die Objekte, meta die Paginierung.
{
"data": [
{
"object": "availability_slot",
"starts_at": "2026-10-05T07:00:00Z",
"ends_at": "2026-10-05T08:00:00Z"
}
],
"meta": {
"limit": 50,
"next_cursor": "eyJpZCI6IjlkM2Y2YzFlIn0",
"prev_cursor": null
}
}Mögliche Fehler
-
403
insufficient_scope— Dieser API-Schlüssel hat keinen Zugriff auf diese Aktion. -
422
validation_failed— Die Eingabe ist ungültig.
Das Objekt
Alle Felder sind immer vorhanden; ein Feld ohne Wert ist null.
| Feld | Typ | Beschreibung |
|---|---|---|
object |
string | Immer „availability_slot“. |
starts_at |
string (date-time) | Beginn des Zeitfensters (UTC). |
ends_at |
string (date-time) | Ende des Zeitfensters (UTC). |