التوثيق · واجهة PMS

Bookings

POST …/reservations : les réservations prises dans le PMS, créées ou mises à jour dans Bridg_.

Staginghttps://staging.bridgchannel.appv1.0 · 2026-09-11<?Label BRIDG|DOC|1.0|NEW?>

هذا التوثيق التقني متاح باللغة الفرنسية فقط.

Endpoint Sens Rôle
POST …/reservations PMS → Bridg_ réservation créée, modifiée ou annulée dans le PMS

Les réservations Bridg_ → PMS (OTA et moteur direct) passent par l'API du PMS : voir Webhooks. L'objet réservation est décrit dans l'API Reference commune.

Create or update a PMS reservation

Une réservation prise dans le PMS. Bridg_ la crée ou la met à jour dans le tableau de bord avec la source PMS, et la décompte de la disponibilité si elle porte bookedAt — voir Disponibilité ci-dessous.

Request

POST{base}/api/pms/v1/connections/{connectionId}/reservations
Authorization: Bearer {clientToken}
X-Bridg-Signature: sha256={hmac}
Content-Type: application/json
JSON
{
  "externalRef": "PMS-778812",
  "cmRef": "",
  "channel": "PMS",
  "revision": 1,
  "bookedAt": "2026-10-01T15:05:12+01:00",
  "currency": "DZD",
  "totalAmount": { "gross": 39000, "net": 39000 },
  "paymentType": "ON_SITE",
  "booker": { "lastName": "Benali", "firstName": "Samir", "email": "samir.benali@example.com", "phone": "+213550000000" },
  "reservations": [
    {
      "lineCode": "01",
      "state": "CONFIRMED",
      "unitTypeCode": "DLX",
      "ratePlanCode": "BAR1",
      "from": "2026-10-10",
      "to": "2026-10-13",
      "occupancy": [ { "bucket": "ADULT", "count": 2 } ],
      "nights": [
        { "date": "2026-10-10", "gross": 12000, "net": 12000 },
        { "date": "2026-10-11", "gross": 12000, "net": 12000 },
        { "date": "2026-10-12", "gross": 15000, "net": 15000 }
      ]
    }
  ]
}

Annulation : même message avec revision incrémentée et toutes les lignes en CANCELLED (ou reservations: []).

Success Response

200 OK

JSON
{ "accepted": true, "reference": "PMS-778812", "action": "CREATED", "bookingId": "cm…", "bookingNumber": "BRG-2026-001240" }
action Signification
CREATED réservation créée dans Bridg_
UPDATED lignes remplacées par celles du message
CANCELLED passée en annulée
IGNORED_STALE revision ≤ dernière traitée : ignorée
IGNORED_UNKNOWN annulation d'une réservation que Bridg_ ne connaît pas : ignorée (pas une erreur)

202 Accepted — même référence:révision reçue pendant son traitement.

Error Response

400 Bad Request — { "error": "cmRef ou externalRef requis", "code": "VALIDATION_ERROR" } ; aussi reservations[] requis, currency requise, Corps JSON invalide.

422 Unprocessable Entity — refus déterministe, ne pas réémettre sans corriger :

JSON
{ "error": "Type d'unité \"SUP\" non mappé sur cette connexion", "code": "UNMAPPED_UNIT_TYPE" }

Autres codes : NO_LINES (aucune ligne active exploitable), MISSING_REFERENCE.

500 — échec transitoire, réémettre.

Fields

Voir Réservation (booking). Particularités du sens entrant :

Champ Requis Remarque
externalRef ou cmRef l'un des deux La référence du PMS. cmRef prime si les deux sont fournis. Enregistrée pms:<référence>.
revision recommandé Défaut 0 (pas de contrôle de révision). Croissant pour une même référence.
bookedAt recommandé Date et heure de création de la réservation dans le PMS, ISO 8601 avec fuseau. Sans fuseau, lue comme l'heure locale de l'établissement. Elle ne change pas d'une révision à l'autre. Sans elle, la réservation ne décompte pas la disponibilité (voir ci-dessous).
currency oui
reservations[] oui Peut être vide pour une annulation.
reservations[].ratePlanCode non Non bloquant s'il n'est pas mappé.
paymentType non PREPAID → réservation marquée payée ; sinon en attente de paiement.
customer non Prime sur booker pour le nom et le contact du client.

Disponibilité

Votre message ARI fait foi : chaque instantané de disponibilité remplace le chiffre de Bridg_ pour les nuits qu'il couvre. Entre deux instantanés, Bridg_ décompte lui-même les réservations reçues — celles des OTA comme les vôtres — à condition de savoir si votre dernier instantané les comptait déjà. C'est bookedAt qui le dit :

  • créée après le dernier instantané de la nuit → décomptée dès réception (une modification déplace le décompte, une annulation le rend) ;
  • créée avant → déjà comprise dans l'instantané, rien n'est fait ;
  • sans bookedAt → Bridg_ ne peut pas trancher et ne décompte rien : la chambre reste en vente sur les OTA jusqu'à votre prochain message ARI.

Envoyez donc bookedAt, et poussez la disponibilité des nuits touchées après chaque réservation : l'un couvre l'autre, sans double décompte.

Note

  • Idempotence : clé <référence>:r<revision>. Rejouer le même message renvoie le résultat mémorisé.
  • Modification = remplacement de toutes les lignes.
  • Deux lignes du même type de chambre sont regroupées en quantité 2 côté Bridg_.