Skip to main content

Pagination

Les points de terminaison de liste renvoient jusqu’à 25 éléments par page, du plus récent au plus ancien. Passez limit pour demander de 1 à 100 éléments.
Les filtres de liste, comme status, starts_after, starts_before et contact_id sur GET /appointments, se combinent entre eux et avec la pagination. Pour obtenir la page suivante, envoyez la même requête, filtres compris, avec cursor égal à next_cursor. Sur la dernière page, next_cursor vaut null et has_more vaut false. Traitez le curseur comme une chaîne opaque, car son format peut changer.
GET /services, GET /staff, GET /availability et GET /webhooks renvoient tous les éléments sur une seule page.

Filtrer les listes

Certains points de terminaison de liste acceptent des filtres en paramètres de requête. Les filtres se combinent entre eux et avec cursor. Pour lister les appels d’hier d’une entreprise située à Toronto :
Encodez le + d’un décalage comme +01:00 sous la forme %2B01:00 dans l’URL.

Relancer sans risque avec Idempotency-Key

Une erreur réseau peut vous laisser dans le doute : la requête a-t-elle fonctionné? Envoyez un en-tête Idempotency-Key sur les requêtes qui créent des éléments, et relancez avec la même clé :
  • POST /contacts
  • POST /appointments
  • POST /knowledge
  • POST /webhooks
LobbyStack mémorise chaque clé pendant 24 heures, par clé API et par opération. Le serveur MCP partage ces clés : book_appointment, create_contact et add_knowledge comptent comme POST /appointments, POST /contacts et POST /knowledge.
  • Une nouvelle tentative avec le même corps reçoit de nouveau la première réponse, avec l’en-tête Idempotent-Replayed: true. L’API ne crée pas de deuxième rendez-vous. LobbyStack compare les valeurs JSON, donc l’ordre des clés et les espaces n’ont pas d’importance.
  • La même clé avec un corps différent renvoie 422 avec le code idempotency_key_reused.
  • Une nouvelle tentative qui arrive pendant que la première requête est encore en cours attend sa fin, puis reçoit sa réponse.
  • LobbyStack enregistre la clé et le changement ensemble. Si la première requête a échoué avec une erreur, rien n’a été enregistré, donc votre nouvelle tentative s’exécute de nouveau.
Utilisez une valeur unique par opération, comme un UUID ou votre propre numéro de commande.

Erreurs

Les erreurs ont toutes la même forme :
details n’apparaît que sur les erreurs de validation. Basez-vous sur code, car la formulation de message peut changer.

Réserver par l’API

L’API suit les mêmes règles que la réceptionniste IA :
  • POST /appointments et POST /appointments/{appointment_id}/reschedule fonctionnent seulement quand le booking_mode de l’entreprise vaut instant. Lisez-le avec GET /business.
  • L’heure demandée doit être dans les heures d’ouverture, éviter les fermetures et les autres rendez-vous, et être libre dans un Google Calendar connecté. Quand LobbyStack ne peut pas confirmer que le calendrier est à jour, il considère ce créneau comme occupé.
  • Les nouvelles réservations se synchronisent avec le calendrier connecté et mettent en file d’attente les textos habituels de confirmation et de rappel. LobbyStack ne les envoie qu’aux contacts qui ont accepté de recevoir des textos. Passez "sms_consent": true quand le client a donné son accord pendant la réservation.
  • Pour réserver avec une personne précise, passez staff_id. Sans ce champ, LobbyStack choisit un membre du personnel libre qui offre le service.
  • L’annulation fonctionne dans tous les modes de réservation. Annuler un rendez-vous déjà annulé le renvoie sans changement.
Les clés API agissent au nom de l’entreprise, donc l’API saute la vérification de l’appelant que la réceptionniste fait au téléphone.

Personnel

GET /staff liste toutes les personnes qui prennent des rendez-vous, avec active et les service_ids pour lesquels chaque personne peut être réservée. Un service sans personnel assigné dans le tableau de bord est ouvert à tous les membres actifs du personnel. Une entreprise qui n’a jamais configuré de personnel a quand même un membre actif, qui porte le nom de l’entreprise. Les réservations vont à cette personne. GET /staff la renvoie donc comme n’importe quel autre membre du personnel, et vous pouvez passer son id comme staff_id. Passez staff_id à :
  • GET /availability, pour lister seulement les heures où cette personne est libre.
  • POST /appointments, pour réserver avec cette personne.
  • POST /appointments/{appointment_id}/reschedule, pour transférer le rendez-vous à cette personne. Sans ce champ, le rendez-vous garde son membre du personnel.
Un staff_id qui ne correspond pas à un membre actif du personnel de l’entreprise, ou à une personne qui n’offre pas le service, renvoie 400 avec le code invalid_request. Transférer un rendez-vous à un autre membre du personnel renvoie 409 conflict quand l’une des deux personnes a son propre calendrier connecté. Dans ce cas, annulez-le et réservez-en un nouveau.