التوثيق · واجهة 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" } }
  ]
}

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 (tofrom) 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 200 false, PRICE_DROP_REJECTED (item entier rejeté)
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 de l'établissement (aucune conversion).
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.