Documentation · Interface PMS

Availability and Rates

POST …/ari : disponibilité, prix et restrictions en un message, accusé par item.

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

Un seul endpoint porte les trois natures d'ARI. Un message contient une liste d'items indépendants ; chaque item porte une nature (availability, prices ou restrictions) sur une plage de nuits. Regroupez autant d'items que possible par message (plafond 5 Mo).

Update ARI

Request

POST{base}/api/pms/v1/connections/{connectionId}/ari
Authorization: Bearer {clientToken}
X-Bridg-Signature: sha256={hmac}
Content-Type: application/json
Idempotency-Key: {optionnel}
JSON
{
  "messageId": "ari-2026-09-11T10:15:00Z-000412",
  "items": [
    {
      "unitTypeCode": "DLX",
      "from": "2026-10-10",
      "to": "2026-10-13",
      "availability": 12,
      "overbookingAllowance": 2
    },
    {
      "unitTypeCode": "DLX",
      "ratePlanCode": "BAR1",
      "from": "2026-10-10",
      "to": "2026-10-13",
      "prices": {
        "currency": "DZD",
        "byOccupancy": [
          { "guests": 1, "gross": 10000, "net": 10000 },
          { "guests": 2, "gross": 12000, "net": 12000 },
          { "guests": 3, "gross": 14000, "net": 14000 }
        ]
      }
    },
    {
      "ratePlanCode": "BAR1",
      "from": "2026-12-24",
      "to": "2027-01-01",
      "restrictions": { "minLos": 3, "closedToArrival": false }
    },
    {
      "unitTypeCode": "SUP",
      "ratePlanCode": "BAR1",
      "from": "2026-12-31",
      "to": "2027-01-01",
      "restrictions": { "closed": true }
    }
  ]
}

Success Response

200 OK — accusé par item, dans l'ordre du message :

JSON
{
  "accepted": true,
  "messageId": "ari-2026-09-11T10:15:00Z-000412",
  "results": [
    { "index": 0, "ok": true },
    { "index": 1, "ok": true },
    { "index": 2, "ok": true },
    { "index": 3, "ok": false, "error": { "code": "UNMAPPED_UNIT_TYPE", "message": "Type d'unité \"SUP\" non mappé sur cette connexion" } }
  ]
}
Champ de results[] Type Description
index integer Position de l'item dans le message (à partir de 0).
ok boolean true : item accepté. false : item refusé, rien n'est écrit pour lui.
error object Si ok: false : { code, message }.
note string Item accepté mais pas appliqué en entier — aujourd'hui, ramené à l'horizon de la connexion.
ignoredCode string Item accepté sans être appliqué : il porte un code que l'établissement a choisi d'ignorer (non vendu en ligne).

202 Accepted — même messageId reçu pendant son traitement :

JSON
{ "accepted": true, "messageId": "ari-2026-09-11T10:15:00Z-000412", "pending": true }

Error Response

400 Bad Request

JSON
{ "error": "messageId et items[] requis", "code": "VALIDATION_ERROR" }

401 Unauthorized

JSON
{ "error": "Signature invalide", "code": "UNAUTHORIZED" }

403 Forbidden — { "error": "Connexion paused", "code": "CONNECTION_INACTIVE" }

429 Too Many Requests — { "error": "Too many requests", "code": "RATE_LIMIT_EXCEEDED" }

500 Internal Server Error — échec transitoire, message conservé, réémettre :

JSON
{ "error": "Message reçu mais non appliqué — reprise programmée", "code": "INGEST_FAILED" }

Returns

Cas HTTP results[i].ok
Item appliqué et relayé vers les OTA 200 true
Code non mappé 200 false, UNMAPPED_UNIT_TYPE / UNMAPPED_RATE_PLAN
Plage invalide (to ≤ from) 200 false, INVALID_DATE_RANGE
Forme invalide (deux natures, champ requis absent, byOccupancy vide, prix ≤ 0) 200 false, VALIDATION_ERROR
Baisse de prix > 50 % sur une date (sauf Bridg HMS, maître de ses prix) 200 false, PRICE_DROP_REJECTED (item entier rejeté)
Prix dans une autre devise que celle du tarif Bridg_ 200 false, CURRENCY_MISMATCH (rien n'est écrit)
Plage au-delà de l'horizon de la connexion (365 jours par défaut) 200 true + note : nuits au-delà écartées, ou aucune nuit appliquée si toute la plage est au-delà
Code que l'établissement a choisi d'ignorer 200 true + ignoredCode : acquitté, rien n'est appliqué
messageId déjà traité 200 accusé mémorisé, rien de réappliqué
Corps illisible 400 —
Échec transitoire 500 — (réémettre)

Fields

Message

Champ Type Requis Description
messageId string oui Identifiant unique du message sur la connexion. Clé de déduplication.
items array oui, non vide Les items.

Item

Champ Type Requis Description
unitTypeCode string pour availability et prices Code PMS du type de chambre. Optionnel pour restrictions (sans lui : portée tarif).
ratePlanCode string pour prices et restrictions Code PMS du plan tarifaire.
from string AAAA-MM-JJ oui Première nuit, incluse.
to string AAAA-MM-JJ oui Borne de fin, exclue. Doit être > from.
availability integer ≥ 0 une des trois Chambres vendables sur chaque nuit de la plage.
overbookingAllowance integer ≥ 0 non (avec availability) Marge de survente, stockée à part.
prices object une des trois Voir ci-dessous.
restrictions object une des trois Voir ci-dessous.

Prices

Champ Type Requis Description
currency string ISO 4217 oui Devise du tarif Bridg_, c'est-à-dire de l'établissement (XOF, DZD, EUR…). Aucune conversion : une autre devise est refusée (CURRENCY_MISMATCH).
byOccupancy[] array oui Un élément par occupation.
byOccupancy[].guests integer oui Nombre d'occupants. 2 doit être présent.
byOccupancy[].gross number > 0 selon tarif Prix TTC. Retenu si le tarif Bridg_ est paramétré TTC.
byOccupancy[].net number > 0 selon tarif Prix HT. Retenu si le tarif Bridg_ est paramétré HT. Envoyer les deux quand le PMS les connaît.

Restrictions — seuls les champs fournis sont écrits.

Champ Type Description
closed boolean Stop-sell (true = fermé à la vente).
closedToArrival boolean Fermé à l'arrivée.
closedToDeparture boolean Fermé au départ.
minLos integer ≥ 1 ou null Durée minimale de séjour ; null efface.
maxLos integer ≥ 1 ou null Durée maximale de séjour ; null efface.

Note

  • Les items sont traités séquentiellement dans l'ordre du message ; en cas de doublon sur une même (clé, date), le dernier gagne.
  • Avec unitTypeCode, une restriction est stockée par tarif × type ; la vue par tarif (celle que lit le moteur de réservation) est recalculée comme l'agrégat des types : fermée seulement si tous les types le sont, LOS la moins restrictive.
  • Bridg_ retient le prix à l'occupation 2 comme référence de distribution ; à défaut, il se replie sur l'occupation la plus basse fournie. Envoyez néanmoins toutes les occupations connues.
  • La disponibilité est absolue (nombre de chambres vendables), jamais un delta.
  • Horizon : Bridg_ n'écrit rien au-delà de l'horizon de la connexion (365 jours à partir d'aujourd'hui par défaut, réglable dans l'écran Interface PMS). Un item qui le dépasse est ramené à l'horizon et l'accusé le signale par note ; inutile d'envoyer plus loin.
  • Un closed: true ferme la vente du tarif sur tous les canaux de l'établissement, pour chaque nuit de la plage : sur une longue plage, ne l'envoyez que si c'est l'état voulu.