Appliquer un changement d'unité avec écriture folio atomique (ADR-00D97)
const url = 'https://example.com/v1/reservations/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/unit-change';const options = { method: 'POST', headers: { 'idempotency-key': 'example', 'X-API-Key': '<X-API-Key>', 'Content-Type': 'application/json' }, body: '{"targetUnitId":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","targetRatePlanId":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","decision":"charge","reason":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/v1/reservations/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/unit-change \ --header 'Content-Type: application/json' \ --header 'X-API-Key: <X-API-Key>' \ --header 'idempotency-key: example' \ --data '{ "targetUnitId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "targetRatePlanId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "decision": "charge", "reason": "example" }'Authorizations
Section intitulée « Authorizations »Parameters
Section intitulée « Parameters »Path Parameters
Section intitulée « Path Parameters »Header Parameters
Section intitulée « Header Parameters »Clé d’idempotence (8-200 car.) — REQUISE pour éviter le double-posting folio sur réseau flaky.
Request Body required
Section intitulée « Request Body required »Changement d’unité assisté. targetRatePlanId requis (le prix vit sur le plan, pas sur le type d’unité). decision : charge (supplément) / offer (geste commercial) / refund (crédit manuel V1).
object
Rate plan à appliquer sur l’unité cible (doit correspondre au targetRatePlanId de la preview)
Charge = facture le supplément ; offer = geste commercial (charge + void immédiat) ; refund = move + creditDueCents info (avoir manuel V1)
Motif audité (NF203 append-only, tracé dans origin_reference et description de la charge)
Responses
Section intitulée « Responses »Changement d’unité réalisé (move + écriture folio atomiques)
object
object
Delta TTC signé en centimes (string bigint-safe)
ID de la ligne de charge postée (null si delta=0 ou refund)
ID de la contre-écriture (null si decision≠offer)
Crédit dû en centimes (string bigint-safe) — LIMITE V1 : remboursement reste manuel. “0” si decision≠refund.
True si la réservation est Confirmed sans folio de dépôt et que le delta est non nul — l’ajustement n’a pas pu être posté automatiquement.
Example
{ "data": { "decision": "charge", "currency": "EUR" }}Corps invalide ou Idempotency-Key absente/invalide
object
Code machine de l’erreur
Message lisible
Origine domaine de l’erreur (optionnel)
object
Identifiant de corrélation pour le support
Example
{ "code": "RESERVATION_NOT_FOUND", "message": "Réservation introuvable", "status": 404}Non authentifié
object
Code machine de l’erreur
Message lisible
Origine domaine de l’erreur (optionnel)
object
Identifiant de corrélation pour le support
Example
{ "code": "RESERVATION_NOT_FOUND", "message": "Réservation introuvable", "status": 404}Permission refusée (stay.room_move) ou scope IDOR
object
Code machine de l’erreur
Message lisible
Origine domaine de l’erreur (optionnel)
object
Identifiant de corrélation pour le support
Example
{ "code": "RESERVATION_NOT_FOUND", "message": "Réservation introuvable", "status": 404}Réservation, séjour ou unité cible introuvable
object
Code machine de l’erreur
Message lisible
Origine domaine de l’erreur (optionnel)
object
Identifiant de corrélation pour le support
Example
{ "code": "RESERVATION_NOT_FOUND", "message": "Réservation introuvable", "status": 404}Statut incompatible, même unité, ou unité indisponible
object
Code machine de l’erreur
Message lisible
Origine domaine de l’erreur (optionnel)
object
Identifiant de corrélation pour le support
Example
{ "code": "RESERVATION_NOT_FOUND", "message": "Réservation introuvable", "status": 404}