errorCode are the contract. Messages are for humans and may change. “Retry” means an automatic retry after a short back-off may succeed. The envelope itself is described in Conventions.
errorCode | HTTP | Category | Retry | Meaning |
|---|---|---|---|---|
INVALID_REQUEST_FORMAT | 400 | Validation | No | Request failed validation. See errorDetails. |
INVALID_COUNTRY_CODE | 400 | Validation | No | Unknown country code in contact or passengers (errorDetails.unknownCountryCodes) |
HOLD_NOT_SUPPORTED | 400 | Validation | No | holdOnly sent for an offer that can’t be held |
INVALID_CREDENTIALS | 401 | Authentication | No | Wrong username or password |
AUTHENTICATION_FAILED | 401 | Authentication | No | Identity provider rejected the login |
USER_TOKEN_NOT_FOUND | 401 | Authentication | No | Missing or unreadable bearer token |
WALLET_INSUFFICIENT_BALANCE | 402 | Payment | No | Fund the wallet and call issue again |
WALLET_OPERATION_FAILED | 402 | Payment | No | Payment couldn’t be confirmed |
PAYMENT_CONFIRMATION_FAILED | 402 | Payment | No | The wallet refused the payment after the seats were booked (errorDetails.walletMessage says why). Check the order status and contact support. |
ACCOUNT_DISABLED | 403 | Authentication | No | API user disabled |
UNAUTHORIZED_ACCESS | 403 | Authentication | No | API user not linked to an agency, or lacks permission |
FLIGHT_PROPOSAL_NOT_FOUND | 404 | NotFound | No | Offer or search expired or unknown. Search again. |
FARE_BRANDS_NOT_AVAILABLE | 404 | NotFound | No | No fare families for this offer |
ORDER_NOT_FOUND | 404 | NotFound | No | Unknown order, or not owned by your agency |
FLIGHT_NO_LONGER_AVAILABLE | 409 | Conflict | No | Offer couldn’t be submitted. Search again. |
FLIGHT_PRICE_CHANGED | 409 | Conflict | No | Price changed at hold or issue time; nothing charged. Search again and confirm the new price. |
CHANGE_PROPOSAL_OPTIONS_FAILED | 409 | Conflict | No | Fare brand couldn’t be applied; the offer expired |
HOLD_EXPIRED | 409 | Conflict | No | The hold ended (expired or released). Search and book again. |
ORDER_NOT_ON_HOLD | 409 | Conflict | No | cancel-hold on an order that isn’t on hold |
BOOKING_CONFLICT | 409 | Conflict | No | Generic conflict from a provider |
RATE_LIMIT_EXCEEDED | 429 | RateLimit | Yes | Slow down. See Rate limits. |
INTERNAL_SERVER_ERROR | 500 | System | No | Unexpected failure. Contact support with the correlation id. |
CONFIGURATION_ERROR | 500 | System | No | Platform misconfiguration. Contact support. |
SUBMIT_ORDER_FAILED, RESERVATION_FAILED | 502 | Provider | No | Provider refused the booking. The message says why. |
HOLD_FAILED | 502 | Provider | No | The airline refused to hold the booking; no PNR exists |
HOLD_CANCEL_FAILED | 502 | Provider | Yes | The airline didn’t confirm the release of the hold |
FLIGHT_SEARCH_SERVICE_UNAVAILABLE, FLIGHT_DETAILS_SERVICE_UNAVAILABLE, FARE_BRANDS_SERVICE_UNAVAILABLE, CONFIGURATION_SERVICE_UNAVAILABLE | 502 | Provider | Yes | A platform service failed the call |
SERVICE_UNAVAILABLE | 503 / 502 | System | Yes | A platform service is temporarily unavailable |
FLIGHT_SEARCH_TIMEOUT, PROVIDER_TIMEOUT | 504 | Timeout | Yes | The operation timed out |
ISSUANCE_TIMEOUT | 504 | Timeout | Yes | Payment confirmed, ticketing still running. Call issue again. |
Never retry create order automatically, even for retryable codes: each call makes a new order. Check the order status first. See Booking and ticketing.

