Klantly Developers

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

GET /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

NomTypeDescription
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
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"
PHP
$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'];
JavaScript
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();
Python
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.

Exemple de réponse
{
  "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

En outre, chaque endpoint peut renvoyer les erreurs générales, comme une clé invalide ou une limite atteinte. Voir tous les codes d'erreur.

L'objet

Tous les champs sont toujours présents ; un champ sans valeur vaut null.

ChampTypeDescription
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).