En mode webhook, Bridg_ appelle l'API HTTPS du PMS pour lui transmettre les réservations OTA et directes, et pour lire son catalogue. Le PMS expose quatre endpoints sous une URL de base qu'il communique à Bridg_ ; Bridg_ s'y authentifie avec les jetons que le PMS lui a remis.
Ce dialecte est de style Connector API (PascalCase, jetons dans le corps, RPC en POST).
Configuration
Le propriétaire (ou Bridg_) enregistre dans l'écran Interface PMS → Voie sortante :
| Champ | Description |
|---|---|
pmsBaseUrl |
URL de base de l'API du PMS, HTTPS, sans slash final (ex. https://api.monpms.com) |
clientToken |
jeton identifiant Bridg_ auprès du PMS |
accessToken |
jeton d'accès de l'établissement (secret, stocké chiffré) |
Tant que la voie sortante n'est pas configurée, chaque émission est mise en échec avec le code
NO_OUTBOUND_CONFIG (visible dans le journal, rejouable après configuration).
Endpoints à exposer par le PMS
| Méthode | Chemin (relatif à pmsBaseUrl) |
Rôle |
|---|---|---|
POST |
/api/connector/v1/configurations/get |
catalogue : types de chambre et plans tarifaires |
POST |
/api/connector/v1/bookings/add |
création d'une réservation |
POST |
/api/connector/v1/bookings/update |
modification (état complet) |
POST |
/api/connector/v1/bookings/cancel |
annulation |
Tous les corps portent l'authentification, à côté des champs propres à chaque appel :
{ "ClientToken": "…", "AccessToken": "…", "Client": "Bridg Channel Manager" }| Champ | Description |
|---|---|
ClientToken |
le clientToken configuré |
AccessToken |
l'accessToken configuré |
Client |
nom de l'appelant : Bridg Channel Manager |
Le PMS doit refuser 401 tout appel dont les jetons sont inconnus.
Get configuration
Appelé par l'écran Interface PMS pour pré-remplir la correspondance des codes.
Request (envoyée par Bridg_)
{pmsBaseUrl}/api/connector/v1/configurations/getContent-Type: application/json
{ "ClientToken": "ct_…", "AccessToken": "at_…", "Client": "Bridg Channel Manager" }Expected Response
200 OK
{
"UnitTypes": [
{ "Code": "DLX", "Label": { "fr": "Chambre Deluxe", "en": "Deluxe Room" }, "Capacity": 2 },
{ "Code": "SUP", "Label": "Chambre Supérieure", "Capacity": 3 }
],
"RatePlans": [
{ "Code": "BAR1", "Label": { "fr": "Meilleur tarif", "en": "Best Available Rate" } },
{ "Code": "NRF", "Label": "Non remboursable" }
]
}| Champ | Type | Requis | Description |
|---|---|---|---|
UnitTypes[].Code |
string | oui | Code stable du type de chambre (celui des messages ARI). |
UnitTypes[].Label |
string ou { lang: string } |
oui | Libellé ; fr est préféré, puis en, puis le premier. |
UnitTypes[].Capacity |
integer | non | Occupation maximale. |
RatePlans[].Code |
string | oui | Code stable du plan tarifaire. |
RatePlans[].Label |
string ou map | oui | Libellé. |
Toute réponse non 2xx ou sans UnitTypes[] / RatePlans[] est présentée à l'opérateur comme
PMS_UNREACHABLE.
Add booking
Request (envoyée par Bridg_)
{pmsBaseUrl}/api/connector/v1/bookings/addContent-Type: application/json Idempotency-Key: BRG-2026-001234:r1
{
"ClientToken": "ct_…",
"AccessToken": "at_…",
"Client": "Bridg Channel Manager",
"Booking": {
"ExternalRef": "4412345678",
"CmRef": "BRG-2026-001234",
"Channel": "BOOKING_COM",
"Revision": 1,
"Currency": "DZD",
"TotalAmount": { "Gross": 36000, "Net": 36000 },
"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": 12000, "Net": 12000 }
]
}
]
}
}Expected Response
200 OK (ou tout 2xx)
{
"BookingId": "pms-booking-889",
"Reference": "1543299",
"Reservations": [
{ "LineCode": "01", "ReservationId": "pms-res-1201", "Reference": "1543299-1", "State": "CONFIRMED" }
]
}| Champ | Type | Requis | Description |
|---|---|---|---|
BookingId |
string | oui | Identifiant du groupe côté PMS. |
Reference |
string | oui | Numéro de confirmation côté PMS (affiché dans le journal). |
Reservations[] |
array | oui | Une entrée par ligne, appariée par LineCode. |
Reservations[].ReservationId, .Reference, .State |
string | oui | Identifiants et état de la ligne côté PMS. |
Error Response (renvoyée par le PMS)
| HTTP | Sens | Réaction de Bridg_ |
|---|---|---|
403 |
règle métier violée (code non mappé côté PMS, écart de total…) | dead-letter (FAILED), visible et rejouable à la main |
409 |
conflit : révision périmée, réservation déjà annulée | dead-letter |
autre 4xx |
rejet déterministe | dead-letter |
429, 5xx, timeout, erreur réseau, corps de réponse invalide |
transitoire | rejeu avec backoff |
Corps d'erreur attendu (facultatif mais journalisé) :
{ "Message": "Unit type DLX is not mapped", "Details": { "code": "UNMAPPED_UNIT_TYPE" } }Update booking
Même corps que add, avec Revision incrémentée et l'en-tête X-Bridg-Update-Mode.
{pmsBaseUrl}/api/connector/v1/bookings/updateContent-Type: application/json Idempotency-Key: BRG-2026-001234:r2 X-Bridg-Update-Mode: REPLACE
| Mode | Sens |
|---|---|
REPLACE |
Booking.Reservations porte toutes les lignes ; toute ligne absente est annulée. C'est le seul mode émis aujourd'hui. |
DIFF |
réservé : seules les lignes modifiées seraient envoyées. |
Le PMS doit ignorer (409) une Revision inférieure ou égale à la dernière appliquée, et
apparier les lignes sur LineCode.
Réponse attendue : identique à add.
Cancel booking
{pmsBaseUrl}/api/connector/v1/bookings/cancelContent-Type: application/json Idempotency-Key: BRG-2026-001234:r3
{
"ClientToken": "ct_…",
"AccessToken": "at_…",
"Client": "Bridg Channel Manager",
"CmRef": "BRG-2026-001234",
"Revision": 3,
"CancelAll": true
}| Champ | Description |
|---|---|
CmRef |
numéro de réservation Bridg_ |
Revision |
révision de l'annulation |
CancelAll: true |
annule tout le groupe. Variante Cancel: ["01"] (liste de LineCode) réservée. |
Réponse attendue : identique à add, les lignes en State: "CANCELLED".
Livraison et rejeu
| Paramètre | Valeur |
|---|---|
| Déclenchement | à chaque création, modification, annulation dans Bridg_ (OTA et direct), connexion ACTIVE |
| Ordre | FIFO par connexion, garanti par réservation |
| Timeout d'appel | 30 s |
| Rejeu (transitoire) | backoff exponentiel : 30 s, 1 min, 2 min, 4 min… plafonné à 30 min ; 8 tentatives puis dead-letter |
Refus déterministe (4xx) |
dead-letter immédiat, rejouable à la main depuis l'écran Interface PMS |
| Idempotence | en-tête Idempotency-Key = <CmRef>:r<Revision> — le PMS doit renvoyer la même réponse à une clé déjà vue |
Sécurité
- HTTPS obligatoire côté PMS ; certificat valide (pas d'auto-signé).
- Les jetons voyagent dans le corps ; le PMS doit les comparer en temps constant.
- Le PMS peut restreindre l'accès aux adresses IP sortantes de Bridg_ (communiquées sur demande).
- Aucune donnée de carte n'est transmise ;
PaymentCardToken, s'il est présent, est un jeton PSP.