Référence de l'API
Disponibilités
Les créneaux libres selon les paramètres des rendez-vous et les rendez-vous déjà réservés.
Endpoints
Lister les créneaux libres
/api/v1/availability
Les créneaux libres pour un rendez-vous entre date_from et date_to (31 jours au maximum). Les règles de la page de réservation : horaires, pauses, jours bloqués, délai de prévenance, délai de réservation maximal, battement et les rendez-vous en attente et confirmés. L’agenda Google de l’entreprise n’est pas pris en compte ici, et les créneaux valent pour toute l’entreprise, pas par collaborateur. Si les rendez-vous sont désactivés dans les paramètres, la liste est vide. La durée vient de duration_minutes, sinon du type de rendez-vous, sinon de la durée par défaut.
- Scope
-
appointments.read— Lire les rendez-vous (avec le nom, l'e-mail et le téléphone du client), les types de rendez-vous et les disponibilités - Fonctionnalité requise
appointments
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
date_from
obligatoire
|
string (date) | Le premier jour, au format AAAA-MM-JJ. |
date_to
|
string (date) | Le dernier jour, au format AAAA-MM-JJ (par défaut égal à date_from, au plus 30 jours après date_from). |
appointment_type_id
|
string (uuid) | Le type de rendez-vous ; la durée vient alors du type. |
duration_minutes
|
integer | La durée du rendez-vous en minutes ; prime sur la durée du type. de 5 à 720 |
Exemple de requête
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"]Réponse 200
La réponse est une liste avec pagination par curseur : data contient les objets, meta la pagination.
{
"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
}
}Erreurs possibles
-
403
insufficient_scope— Cette clé API n'a pas accès à cette action. -
422
validation_failed— Les données saisies ne sont pas valides.
L'objet
Tous les champs sont toujours présents ; un champ sans valeur vaut null.
| Champ | Type | Description |
|---|---|---|
object |
string | Toujours « availability_slot ». |
starts_at |
string (date-time) | Début du créneau (UTC). |
ends_at |
string (date-time) | Fin du créneau (UTC). |