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
{base}/api/pms/v1/connections/{connectionId}/ariAuthorization: Bearer {clientToken}
X-Bridg-Signature: sha256={hmac}
Content-Type: application/json
Idempotency-Key: {optionnel}{
"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 :
{
"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 :
{ "accepted": true, "messageId": "ari-2026-09-11T10:15:00Z-000412", "pending": true }Error Response
400 Bad Request
{ "error": "messageId et items[] requis", "code": "VALIDATION_ERROR" }401 Unauthorized
{ "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 :
{ "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 | 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.