Erreurs
La porte Brave utilise les codes HTTP classiques. Les portes compatibles OS-Travel et Cyberesa répondent toujours HTTP 200 et transportent l'erreur dans le corps — lisez bien les trois sections.
Porte Brave — codes HTTP
| Code | error.code typique | Signification |
|---|---|---|
400 | validation_failed | Corps ou paramètres invalides (détail dans error.fields) |
401 | invalid_signature, stale_timestamp, missing_credentials | Authentification refusée — voir Signature |
403 | ip_not_allowed, key_revoked, gateway_not_enabled | IP non autorisée, clé révoquée, porte ou format non activé |
404 | not_found | Hôtel, réservation ou référentiel inconnu |
409 | invalid_state | Conflit d'état (ex. annulation d'une réservation déjà annulée) |
422 | rate_expired, stop_sales, on_request_only | Offre expirée, arrêt des ventes, ou offre « sur demande » non réservable |
429 | rate_limited | Quota dépassé — l'en-tête Retry-After indique quand réessayer |
500 | internal_error | Erreur interne — réessayable en lecture seule uniquement |
Porte Brave — enveloppe d'erreur
JSON (Accept: application/json) :
{
"error": {
"code": "rate_expired",
"message": "Le tarif a expiré. Relancez une recherche.",
"fields": { "rateKey": "expiré le 2026-11-13T10:22:00+01:00" }
}
}
XML (Accept: application/xml) :
<ErrorResponse>
<Code>rate_expired</Code>
<Message>Le tarif a expiré. Relancez une recherche.</Message>
</ErrorResponse>
Porte OS-Travel — ErrorMessage
Toujours HTTP 200, même en erreur : le client V1/V2 ne parse que le 200.
{
"ErrorMessage": {
"Code": 401,
"Description": "Invalid credentials."
}
}
- En succès,
ErrorMessageest toujours présent avecCode: nulletDescription: null(V2). - Quota dépassé :
Descriptioncontient"Too many requests ... Retry after YYYY-MM-DD HH:MM:SS.". - Pour
BookingCancellation, l'erreur se lit dansBookingCancellation.ErrorMessage(Code ≠ 200).
Porte Cyberesa — ErrorResult
Toujours HTTP 200 + XML valide, sans CDATA. L'erreur métier apparaît sous l'une de ces formes :
<ErrorResult>
<Message>Invalid credentials</Message>
</ErrorResult>
ou <Error><Message>…</Message></Error>, ou <Error>…</Error>. Testez la présence de ces nœuds avant de parser la réponse métier.
Conduite à tenir
- 429 — respectez
Retry-Afteret réduisez votre rythme ; voir Quotas. - 401 — vérifiez le calcul de signature et la synchronisation d'horloge (NTP).
- 422
rate_expired— lerateKeyn'est plus valable : nouvelle recherche, nouveaucheckrate. - Réservations — jamais de retry aveugle : rejouez avec la même
clientReference(voir Idempotence). - Lectures — un nouvel essai unique est accepté (
GET, recherche) en cas d'erreur500ou de timeout.