Documentation · PMS interface

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?>

This technical documentation is available in French only.

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: []).

Le séjour : statut, chambre, heures réelles

Ajoutez au message où en est le séjour. Les champs sont facultatifs ; un PMS qui ne les envoie pas garde le comportement d'avant.

JSON
{
  "externalRef": "PMS-778812",
  "pmsReference": "PMS-778812",
  "revision": 4,
  "pmsStatus": "CHECKEDOUT",
  "pmsRoomNumber": "204",
  "actualCheckInAt": "2026-10-10T14:32:10+01:00",
  "actualCheckOutAt": "2026-10-13T11:05:42+01:00",
  "…": "le reste de la réservation, inchangé"
}
pmsStatus Effet dans Bridg_
RESERVED réservée ; un check-in annulé efface l'heure d'arrivée
INHOUSE arrivée faite, datée par actualCheckInAt
CHECKEDOUT départ fait, daté par actualCheckOutAt
NOSHOW client non venu
CANCELED annulée (pour une réservation née chez vous)

Envoyez le message à chaque arrivée, départ, no-show et changement de chambre, avec une revision supérieure. Sans heure réelle, Bridg_ date la transition à la réception du message. Une mise à jour sans pmsStatus ne change pas le statut connu.

Réservation émise par Bridg_ : renvoyer cmRef + cmRevision

Une réservation que Bridg_ vous a envoyée (OTA, moteur) vit ensuite chez vous : arrivée, prolongation, changement de chambre, départ. Renvoyez-la sur la même route avec notre numéro (cmRef, reçu dans bookings/add) et la dernière révision Bridg_ que vous avez appliquée (cmRevision).

JSON
{
  "cmRef": "BRG-2026-001240",
  "cmRevision": 2,
  "pmsReference": "R-2026-00413",
  "externalRef": "4471223311",
  "channel": "BOOKING_COM",
  "revision": 3,
  "currency": "DZD",
  "totalAmount": { "gross": 36000, "net": 36000 },
  "paymentType": "PREPAID",
  "booker": { "lastName": "Martin" },
  "pmsStatus": "INHOUSE",
  "pmsRoomNumber": "312",
  "actualCheckInAt": "2026-10-20T13:05:00+01:00",
  "reservations": [
    { "lineCode": "01", "state": "CONFIRMED", "unitTypeCode": "DLX", "ratePlanCode": "BAR1",
      "from": "2026-10-20", "to": "2026-10-24", "occupancy": [ { "bucket": "ADULT", "count": 2 } ], "nights": [] }
  ]
}

Bridg_ ne crée rien : il rattache le message à sa réservation (action: "LINKED") et suit :

  • le statut, la chambre et les heures réelles ;
  • les dates (prolongation, départ anticipé), si cmRevision est à jour — supérieure ou égale à la dernière révision que Bridg_ vous a émise. En retard, vous n'avez pas encore vu notre dernière modification : vos dates sont ignorées, le reste est appliqué ;
  • jamais le prix vendu par l'agence ;
  • jamais l'annulation : un CANCELED est affiché sur la réservation, à trancher par l'opérateur.

pmsReference peut être égal à cmRef si vous avez repris notre numéro. Un cmRef + cmRevision que Bridg_ ne connaît pas est ignoré (IGNORED_UNKNOWN) : il n'est jamais créé comme une réservation de votre comptoir.

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
LINKED réservation émise par Bridg_ : rattachée, séjour suivi (voir ci-dessus)
IGNORED_STALE revision ≤ dernière traitée : ignorée — vaut aussi pour une réservation émise par Bridg_ que vous renvoyez avec cmRef + cmRevision
IGNORED_UNKNOWN annulation d'une réservation que Bridg_ ne connaît pas, ou cmRef + cmRevision inconnus : ignorée (pas une erreur)
IGNORED_CODE toutes ses chambres sont sur des types que l'établissement a choisi d'ignorer : acquittée, rien écrit

Quand le message n'a pas tout fait, la réponse porte aussi note, en clair : cmRef inconnu de l'établissement, révision plus ancienne que la dernière traitée, ou dates d'un LINKED ignorées parce que cmRevision est en retard sur la dernière émission de Bridg_. La même phrase s'affiche dans le journal « Reçus du PMS » de Bridg_.

JSON
{ "accepted": true, "reference": "BK-MV2K3Q-9F1A", "action": "LINKED", "bookingNumber": "BK-MV2K3Q-9F1A",
  "note": "dates du PMS ignorées : il a appliqué la révision 2, Bridg a émis la 3 — il recevra la dernière et renverra la suite" }

202 Accepted — même référence:révision reçue pendant son traitement. La même révision renvoyée après un refus est retraitée (nouveau verdict).

Error Response

400 Bad Request — { "error": "cmRef ou externalRef requis", "code": "VALIDATION_ERROR" } ; aussi reservations[] requis, currency requise, revision requise (entier ≥ 1, incrémenté à chaque envoi de la réservation : c'est la clé de déduplication), Corps JSON invalide.

422 Unprocessable Entity — refus déterministe, ne pas réémettre sans corriger. Une fois corrigé (correspondance faite côté Bridg_), réémettez : la même révision est retraitée, une révision supérieure aussi.

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 Réservation née chez vous : votre référence, enregistrée pms:<référence> (pmsReference prime, puis cmRef). Réservation émise par Bridg_ : cmRef = notre numéro, avec cmRevision.
pmsReference recommandé Votre numéro de réservation.
pmsStatus recommandé RESERVED, INHOUSE, CHECKEDOUT, NOSHOW, CANCELED.
pmsRoomNumber non Chambre(s), séparées par , . Absent = aucune chambre attribuée.
actualCheckInAt, actualCheckOutAt non Heures réelles, ISO 8601 avec fuseau (sans fuseau : heure de l'établissement).
cmRevision réservation émise par Bridg_ Dernière révision Bridg_ appliquée chez vous.
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_.