Rendez-vous
Base path: /api/bookings
GET /bookings
Obtenir tous les rendez-vous. Les employés voient uniquement les leurs quand staff_personal_agenda_enabled est actif. Les annulés sont exclus.
Auth: Connecté
Query parameters: page, limit
GET /bookings/:id
Obtenir un rendez-vous spécifique.
Auth: Connecté
Erreurs: 404 — Rendez-vous non trouvé
POST /bookings
Créer un nouveau rendez-vous.
Auth: Connecté
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
client_id | integer | Oui | ID du client |
staff_id | integer | Oui | ID de l'employé |
service_id | integer | Oui | ID du service |
start_at | datetime | Oui | Heure de début |
end_at | datetime | Oui | Heure de fin |
notes | string | Non | Notes (visibles au client) |
internal_notes | string | Non | Notes internes |
provisional | boolean | Non | Si true : statut=provisional, email de confirmation/refus envoyé au client |
waitlist_id | integer | Non | Lien avec une entrée de liste d'attente |
base_url | string | Non | URL de base pour les liens de confirmation/refus |
remarque
Les rendez-vous les jours fériés sont refusés avec une erreur 400.
Response (200): Objet Booking
PUT /bookings/:id
Mettre à jour un rendez-vous. Les changements d'horaire créent un job email avec 30 minutes de délai. À l'achèvement, des séquences de suivi sont démarrées.
DELETE /bookings/:id
Annuler un rendez-vous (passe le statut à cancelled).
Statuts des rendez-vous
| Statut | Description |
|---|---|
scheduled | Rendez-vous confirmé |
provisional | En attente de confirmation du client |
completed | Rendez-vous terminé |
cancelled | Rendez-vous annulé |
no-show | Client absent |
Objet Booking
{
"id": 1,
"client_id": 5,
"staff_id": 2,
"service_id": 3,
"start_at": "2026-03-24 10:00:00",
"end_at": "2026-03-24 10:30:00",
"status": "scheduled",
"notes": "",
"internal_notes": "",
"provisional_token": null,
"feedback_token": null,
"waitlist_id": null,
"client_name": "Marie Dupont"
}