Gérer les rendez-vous d'un modèle de réservation
Retrouver un modèle de réservation et sa page publique, lister ses rendez-vous, puis les déplacer ou les annuler.
Un modèle de réservation est une offre de rendez-vous : sa durée, ses créneaux, les calendriers qu'il occupe, sa page publique. Chaque rendez-vous pris est une réservation, une instance du modèle. La personne réserve elle-même, sur la page publique du modèle ; l'API retrouve et gère ensuite les rendez-vous pris.
1Le modèle et sa page publique
GET https://staging-api.docage.com/Bookings/TemplatesIdAndName
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…curl "https://staging-api.docage.com/Bookings/TemplatesIdAndName" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…"using HttpClient client = new();
using HttpRequestMessage request = new(HttpMethod.Get, "https://staging-api.docage.com/Bookings/TemplatesIdAndName");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
using HttpResponseMessage response = await client.SendAsync(request);
string result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException(result);const response = await fetch("https://staging-api.docage.com/Bookings/TemplatesIdAndName", {
headers: {
Authorization: `Bearer ${token}`
}
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;GET https://staging-api.docage.com/Bookings/{id} lit l'offre : sa durée (DurationMinutes), son pas (SlotIncrementMinutes), son préavis
(MinNoticeMinutes), son horizon (MaxDaysAhead), son lieu (LocationKind) et son adresse courte, Slug. La page où l'on
réserve est https://staging-app.docage.com/Booking/ suivi de cette adresse : c'est elle que vous partagez ou intégrez.
Si GET https://staging-api.docage.com/Bookings/{id}/DynamicEntries rend des entrées, la personne choisit d'abord ce qu'elle réserve (un véhicule, une
salle…), sur la page.
2Les rendez-vous pris
QUERY https://staging-api.docage.com/Bookings
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…
Content-Type: application/json
{ "TemplateId": "11111111-0000-4000-8000-000000000001", "Skip": 0, "Take": 50, "SortOrder": "StartUtc_Desc" }curl -X QUERY "https://staging-api.docage.com/Bookings" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"TemplateId": "11111111-0000-4000-8000-000000000001",
"Skip": 0,
"Take": 50,
"SortOrder": "StartUtc_Desc"
}'using HttpClient client = new();
using HttpRequestMessage request = new(new HttpMethod("QUERY"), "https://staging-api.docage.com/Bookings");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
request.Content = new StringContent("""
{
"TemplateId": "11111111-0000-4000-8000-000000000001",
"Skip": 0,
"Take": 50,
"SortOrder": "StartUtc_Desc"
}
""", Encoding.UTF8, "application/json");
using HttpResponseMessage response = await client.SendAsync(request);
string result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException(result);const response = await fetch("https://staging-api.docage.com/Bookings", {
method: "QUERY",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"TemplateId": "11111111-0000-4000-8000-000000000001",
"Skip": 0,
"Take": 50,
"SortOrder": "StartUtc_Desc"
})
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;Chaque réservation dit son créneau (StartUtc, EndUtc), la personne (BookerName, BookerEmail, BookerPhone), ses réponses
au formulaire de réservation (BookingFormAnswers), et son statut :
Status |
Statut |
|---|---|
1 |
En attente |
2 |
Confirmée |
3 |
Annulée |
4 |
Déplacée |
5 |
Absent |
GET https://staging-api.docage.com/Bookings/{id}/Allocations dit les calendriers qu'elle occupe (qui reçoit, quelle salle).
3Déplacer, annuler, constater une absence
- Déplacer un rendez-vous confirmé : les créneaux possibles, puis le nouveau créneau.
GET https://staging-api.docage.com/Bookings/22222222-0000-4000-8000-000000000002/RescheduleSlots?from=2026-11-16T00:00:00Z&to=2026-11-21T00:00:00Z
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…curl "https://staging-api.docage.com/Bookings/22222222-0000-4000-8000-000000000002/RescheduleSlots?from=2026-11-16T00:00:00Z&to=2026-11-21T00:00:00Z" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…"using HttpClient client = new();
using HttpRequestMessage request = new(HttpMethod.Get, "https://staging-api.docage.com/Bookings/22222222-0000-4000-8000-000000000002/RescheduleSlots?from=2026-11-16T00:00:00Z&to=2026-11-21T00:00:00Z");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
using HttpResponseMessage response = await client.SendAsync(request);
string result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException(result);const response = await fetch("https://staging-api.docage.com/Bookings/22222222-0000-4000-8000-000000000002/RescheduleSlots?from=2026-11-16T00:00:00Z&to=2026-11-21T00:00:00Z", {
headers: {
Authorization: `Bearer ${token}`
}
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;POST https://staging-api.docage.com/Bookings/22222222-0000-4000-8000-000000000002/Reschedule
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…
Content-Type: application/json
{ "StartUtc": "2026-11-18T13:30:00Z" }curl -X POST "https://staging-api.docage.com/Bookings/22222222-0000-4000-8000-000000000002/Reschedule" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{"StartUtc": "2026-11-18T13:30:00Z"}'using HttpClient client = new();
using HttpRequestMessage request = new(HttpMethod.Post, "https://staging-api.docage.com/Bookings/22222222-0000-4000-8000-000000000002/Reschedule");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
request.Content = new StringContent("""
{
"StartUtc": "2026-11-18T13:30:00Z"
}
""", Encoding.UTF8, "application/json");
using HttpResponseMessage response = await client.SendAsync(request);
string result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException(result);const response = await fetch("https://staging-api.docage.com/Bookings/22222222-0000-4000-8000-000000000002/Reschedule", {
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({"StartUtc": "2026-11-18T13:30:00Z"})
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;La réponse est l'identifiant de la nouvelle réservation ; l'ancienne passe « Déplacée », et la personne reçoit une invitation à jour.
- Annuler :
POST https://staging-api.docage.com/Bookings/{id}/Cancel, avec un motif ({ "Reason": "Empêchement" }). La personne est prévenue si le rendez-vous était confirmé. - Constater une absence :
POST https://staging-api.docage.com/Bookings/{id}/NoShow, une fois le rendez-vous commencé.
Les pièges
- Une réservation ne se crée pas par
POST https://staging-api.docage.com/Bookings: elle naît de son modèle, quand la personne choisit un créneau sur la page publique. - Un rendez-vous pris depuis un parcours ne se déplace pas : il s'annule, puis se reprend depuis le parcours.
- Le statut d'une réservation ne s'écrit pas : seuls ces gestes le font changer.