> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.kitionz.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.kitionz.com/_mcp/server.

# Error codes

Every error answer carries a `code`. These are the codes the Flight API and the platform can return.

| Code                                           | HTTP | What happened                                                                                                 |
| ---------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------- |
| `ALREADY_TICKETED`                             | 422  | This booking is already ticketed.                                                                             |
| `API_KEY_CHECK_BUSY`                           | 503  | Too many API keys are being checked right now. Retry shortly.                                                 |
| `API_VERSION_UNKNOWN`                          | 400  | The Kitionz-Version header names a version that does not exist.                                               |
| `AUTH_PRINCIPAL_MISSING`                       | 401  | Authentication required.                                                                                      |
| `BAD_REQUEST`                                  | 400  | The request could not be understood.                                                                          |
| `BOOK_CONTACT_EMAIL_REQUIRED`                  | 400  | This supplier needs a contact email for the booking.                                                          |
| `BOOK_CONTACT_PHONE_UNSUPPORTED`               | 400  | This supplier cannot accept the contact phone number in this form.                                            |
| `BOOK_PASSENGER_COUNTRY_UNSUPPORTED`           | 400  | One passenger's nationality or passport country is not a country this supplier can use.                       |
| `BOOK_PASSENGER_TITLE_UNSUPPORTED`             | 400  | This supplier does not accept one of the passenger titles.                                                    |
| `BOOK_PAX_COUNT_MISMATCH`                      | 400  | The passenger list does not match the passenger counts of the quote.                                          |
| `BOOK_PAX_SHAPE_UNSUPPORTED`                   | 400  | This supplier cannot book this combination of passengers.                                                     |
| `BOOKING_ALREADY_FULFILLED`                    | 409  | This booking was already fulfilled with a different PNR.                                                      |
| `BOOKING_CONNECTION_MISMATCH`                  | 409  | This booking was made through a supplier connection that has since been replaced.                             |
| `BOOKING_IN_PROGRESS`                          | 409  | A booking for this Idempotency-Key is already in progress. Check its status.                                  |
| `BOOKING_KEY_REUSED_DIFFERENT_OFFER`           | 422  | This Idempotency-Key was already used to book a different offer.                                              |
| `BOOKING_NOT_CANCELLABLE`                      | 422  | This booking cannot be cancelled.                                                                             |
| `BOOKING_NOT_PENDING`                          | 409  | This booking is no longer waiting for fulfilment.                                                             |
| `BOOKING_NOT_REFUNDABLE`                       | 422  | This booking cannot be refunded.                                                                              |
| `BOOKING_NOT_TICKETABLE`                       | 422  | This booking cannot be ticketed in its current state.                                                         |
| `BOOKING_STATE_CHANGED`                        | 409  | The booking changed while this request was running. Read it again.                                            |
| `CAPABILITY_NOT_SUPPORTED`                     | 422  | This supplier does not support this operation.                                                                |
| `CONFIGURATION_CURRENCY_REJECTED`              | 500  | Kitionz refused a supplier answer in an unsupported currency.                                                 |
| `CONFIGURATION_ERROR`                          | 500  | A required server setting is missing.                                                                         |
| `CONFLICT`                                     | 409  | The request conflicts with the current state of the resource.                                                 |
| `CONNECTION_NOT_ADMISSIBLE`                    | 403  | This supplier connection cannot take this traffic yet.                                                        |
| `CONNECTION_NOT_REQUESTABLE`                   | 409  | This connection cannot request go-live in its current state.                                                  |
| `CONNECTOR_NOT_ADMISSIBLE`                     | 403  | This supplier cannot take this traffic yet.                                                                   |
| `CONNECTOR_NOT_CONNECTED`                      | 403  | This supplier is not connected for this environment.                                                          |
| `DUPLICATE_RECORD`                             | 409  | A record with the same unique value already exists.                                                           |
| `ENVIRONMENT_NOT_THIS_ADDRESS`                 | 403  | This credential can only use its own environment.                                                             |
| `FARE_CURRENCY_MISMATCH`                       | 409  | The fare is in a different currency from the quote.                                                           |
| `FARE_HIGHER_THAN_QUOTED`                      | 409  | The supplier now asks more than the quoted fare. Get a new quote.                                             |
| `FARE_QUOTE_UNUSABLE`                          | 422  | The supplier's price for this fare cannot be used. Nothing was booked.                                        |
| `FARE_RECHECK_FAILED`                          | 409  | Kitionz could not confirm this fare as quoted just before booking. Nothing was booked.                        |
| `FEATURE_PRODUCTION_DISABLED`                  | 403  | This feature is turned off in Live for your organization.                                                     |
| `FEATURE_SANDBOX_DISABLED`                     | 403  | This feature is turned off in Test for your organization.                                                     |
| `FORBIDDEN`                                    | 403  | You are not allowed to do this.                                                                               |
| `GO_LIVE_PRODUCTION_ONLY`                      | 422  | Go-live applies to the production connection only.                                                            |
| `HEADERS_TOO_LARGE`                            | 431  | The request headers are too large.                                                                            |
| `HOLD_NOT_SUPPORTED_FOR_THIS_OFFER`            | 422  | This offer cannot be held. Book it directly.                                                                  |
| `IDEMPOTENCY_KEY_MALFORMED`                    | 400  | The Idempotency-Key header is not a valid key.                                                                |
| `IDEMPOTENCY_KEY_REQUIRED`                     | 400  | This write request needs an Idempotency-Key header.                                                           |
| `IDEMPOTENCY_KEY_REUSED_WITH_DIFFERENT_PARAMS` | 422  | This Idempotency-Key was already used with a different request body.                                          |
| `IDEMPOTENCY_OWNER_MISSING`                    | 403  | The request could not be tied to an account, so it was not run.                                               |
| `IDEMPOTENT_REQUEST_IN_PROGRESS`               | 409  | A request with this Idempotency-Key is still running.                                                         |
| `INSUFFICIENT_SCOPE`                           | 403  | This API key does not have the scope this endpoint needs.                                                     |
| `INSUFFICIENT_SEATS`                           | 409  | Not enough seats are left on this fare.                                                                       |
| `INTERNAL_ERROR`                               | 500  | Something went wrong on our side. It is not caused by your request.                                           |
| `INVALID_JSON`                                 | 400  | The request body is not valid JSON.                                                                           |
| `INVALID_REQUEST`                              | 400  | The request is invalid.                                                                                       |
| `IP_NOT_ALLOWED`                               | 403  | This API key is not allowed from your IP address.                                                             |
| `KEY_WRONG_ADDRESS`                            | 403  | This credential belongs to the other address.                                                                 |
| `LENGTH_REQUIRED`                              | 411  | The request needs a Content-Length header.                                                                    |
| `LIVE_ONLY`                                    | 403  | This action needs your Live key.                                                                              |
| `MALFORMED_FLIGHT_DATA`                        | 502  | The booking could not be saved after the supplier accepted it. Do not book again; contact support.            |
| `METHOD_NOT_ALLOWED`                           | 405  | This endpoint does not accept that HTTP method.                                                               |
| `MODULE_NOT_ENABLED`                           | 403  | This product is not enabled for your organization.                                                            |
| `MODULE_PRODUCTION_NOT_ENABLED`                | 403  | This product is not enabled for production use yet.                                                           |
| `MULTIPART_NO_FILE`                            | 400  | The upload has no file part.                                                                                  |
| `NOT_ACCEPTABLE`                               | 406  | The request is not in the format this endpoint accepts.                                                       |
| `NOT_AVAILABLE_IN_TEST`                        | 403  | This part of Kitionz is not available in Test yet.                                                            |
| `NOT_FOUND`                                    | 404  | The requested resource does not exist, or is not visible to your organization.                                |
| `NOT_ON_THIS_ADDRESS`                          | 404  | This endpoint is not available on this address.                                                               |
| `OFFER_EXPIRED`                                | 410  | This offer has expired. Search again.                                                                         |
| `OFFER_SOURCE_MISMATCH`                        | 400  | This offer belongs to a different supplier than the one in the request.                                       |
| `OFFER_TRIP_MISMATCH`                          | 400  | The travel date or trip type in the request does not match the chosen offer.                                  |
| `ORG_SUSPENDED`                                | 401  | Your organization is suspended. Contact support.                                                              |
| `PASSENGER_FIELD_REQUIRED`                     | 422  | A passenger field this itinerary needs is missing. error.details.violations lists each one.                   |
| `PASSPORT_EXPIRY_TOO_SOON`                     | 422  | A passport expires too soon for this itinerary.                                                               |
| `PAX_ADULT_REQUIRED`                           | 400  | At least one adult passenger is required.                                                                     |
| `PAX_COUNT_EXCEEDED`                           | 400  | Too many passengers for one booking.                                                                          |
| `PAX_INFANT_EXCEEDS_ADULT`                     | 400  | There cannot be more infants than adults.                                                                     |
| `PAYLOAD_TOO_LARGE`                            | 413  | The request body is larger than this endpoint accepts.                                                        |
| `QUOTE_TOKEN_ALREADY_USED`                     | 409  | This quote was already used to book.                                                                          |
| `QUOTE_TOKEN_AUDIENCE_MISMATCH`                | 400  | This quote token is not valid for this endpoint.                                                              |
| `QUOTE_TOKEN_ENV_MISMATCH`                     | 403  | This quote token was issued for another environment.                                                          |
| `QUOTE_TOKEN_EXPIRED`                          | 410  | This quote has expired. Get a new quote.                                                                      |
| `QUOTE_TOKEN_FUTURE_IAT`                       | 400  | This quote token has an issue time in the future.                                                             |
| `QUOTE_TOKEN_INVALID`                          | 400  | This quote token is not valid.                                                                                |
| `QUOTE_TOKEN_OFFER_MISMATCH`                   | 409  | This quote token is for a different offer.                                                                    |
| `QUOTE_TOKEN_ORG_MISMATCH`                     | 403  | This quote token belongs to another organization.                                                             |
| `QUOTE_TOKEN_PAX_MISMATCH`                     | 409  | The passengers or dates do not match the quote.                                                               |
| `QUOTE_TOKEN_REQUIRED`                         | 400  | A quote token from fare-quote is required to book.                                                            |
| `QUOTE_TOKEN_SOURCE_MISMATCH`                  | 409  | This quote token is for a different supplier.                                                                 |
| `QUOTE_TOKEN_VERSION_UNSUPPORTED`              | 400  | This quote token version is no longer supported. Get a new quote.                                             |
| `RATE_LIMIT_EXCEEDED`                          | 429  | Too many requests. Slow down and retry after the Retry-After time.                                            |
| `REFUND_EXCEEDS_REMAINING`                     | 400  | The refund is more than the amount left to refund.                                                            |
| `REQUEST_BOOKING_UNAVAILABLE`                  | 503  | Offline (request) bookings are not available in this environment.                                             |
| `REQUEST_NOT_SUPPORTED_FOR_THIS_OFFER`         | 422  | This offer cannot be booked as an offline request.                                                            |
| `REQUEST_TIMEOUT`                              | 408  | The request took too long to arrive.                                                                          |
| `RETURN_DATE_REQUIRED`                         | 400  | This supplier needs a return date for a round-trip search.                                                    |
| `ROUND_TRIP_NOT_SUPPORTED`                     | 422  | This supplier or booking type cannot handle a round trip in one request.                                      |
| `SANDBOX_BOOKING_PREDATES_SIMULATION`          | 409  | This Test booking was made before Test bookings were simulated.                                               |
| `SEARCH_MULTI_CITY_UNSUPPORTED`                | 422  | This supplier cannot search multi-city itineraries.                                                           |
| `SEAT_SELECTION_NOT_SUPPORTED_FOR_THIS_OFFER`  | 422  | This offer does not allow seat selection.                                                                     |
| `SERVICE_UNAVAILABLE`                          | 503  | The service is temporarily unavailable.                                                                       |
| `SIMULATED_REFERENCE_NOT_ALLOWED`              | 400  | A Test supplier reference cannot be recorded on a Live booking.                                               |
| `SOURCE_CODE_NOT_ACCEPTED`                     | 400  | Do not send sourceCode — the offer reference already identifies the supplier.                                 |
| `SSR_NOT_SUPPORTED_FOR_THIS_OFFER`             | 422  | This offer does not allow special service requests.                                                           |
| `SUPPLIER_ACCOUNT_NOT_READY`                   | 409  | This seller's account with the supplier is not set up for booking yet. Nothing was booked.                    |
| `SUPPLIER_API_CHANNEL_FORBIDDEN`               | 403  | This supplier is not available through the API.                                                               |
| `SUPPLIER_AUTH_FAILED`                         | 502  | The supplier rejected the login for this connection.                                                          |
| `SUPPLIER_BOOK_FAILED`                         | 502  | The supplier refused the booking.                                                                             |
| `SUPPLIER_BOOK_MISSING_TOKEN`                  | 502  | The stored offer is missing a value the supplier needs to book. Search again.                                 |
| `SUPPLIER_BOOK_OUTCOME_UNKNOWN`                | 502  | The supplier did not say whether the booking went through. Check the booking status; do not book again.       |
| `SUPPLIER_BOOKING_DETAILS_FAILED`              | 502  | The supplier could not return the booking details right now.                                                  |
| `SUPPLIER_BOOKING_NOT_FOUND`                   | 502  | The supplier has no booking with this reference.                                                              |
| `SUPPLIER_BUSINESS_ERROR`                      | 502  | The supplier refused the request.                                                                             |
| `SUPPLIER_CONSOLE_CHANNEL_FORBIDDEN`           | 403  | This supplier is not available in the console.                                                                |
| `SUPPLIER_DISABLED_BY_TENANT`                  | 403  | This supplier is switched off for your organization.                                                          |
| `SUPPLIER_FARE_CHANGED_AT_BOOK`                | 409  | The supplier changed the fare while booking. Nothing was booked; get a new quote.                             |
| `SUPPLIER_FARE_QUOTE_FAILED`                   | 502  | The supplier could not quote this fare right now.                                                             |
| `SUPPLIER_INSUFFICIENT_BALANCE`                | 402  | Your balance with the supplier is too low to book this fare.                                                  |
| `SUPPLIER_LIST_DATES_FAILED`                   | 502  | The supplier could not list travel dates right now.                                                           |
| `SUPPLIER_LIST_ORIGINS_FAILED`                 | 502  | The supplier could not list origins right now.                                                                |
| `SUPPLIER_LIST_RETURN_DATES_FAILED`            | 502  | The supplier could not list return dates right now.                                                           |
| `SUPPLIER_LIST_SECTORS_FAILED`                 | 502  | The supplier could not list routes right now.                                                                 |
| `SUPPLIER_LOGIN_FAILED`                        | 502  | Signing in to the supplier failed.                                                                            |
| `SUPPLIER_NOT_AVAILABLE_IN_TEST`               | 403  | This supplier is not available in Test.                                                                       |
| `SUPPLIER_NOT_AVAILABLE_TO_TENANT`             | 403  | This supplier is not available to your organization.                                                          |
| `SUPPLIER_OFFER_NOT_FOUND`                     | 502  | The supplier no longer lists this fare. Search again.                                                         |
| `SUPPLIER_OFFER_PAYLOAD_INVALID`               | 502  | The stored offer for this supplier is incomplete. Search again.                                               |
| `SUPPLIER_REPRICE_MISMATCH`                    | 502  | The supplier re-priced for a different set of passengers. Get a new quote.                                    |
| `SUPPLIER_REPRICE_UNPARSEABLE`                 | 502  | The supplier sent a re-price we could not read.                                                               |
| `SUPPLIER_REQUEST_FAILED`                      | 502  | The request to the supplier failed.                                                                           |
| `SUPPLIER_RESPONSE_INVALID`                    | 502  | The supplier sent a response we could not read.                                                               |
| `SUPPLIER_RESPONSE_MISSING_BOOK_REFERENCE`     | 502  | The supplier accepted the booking but sent no booking reference. Check the booking status; do not book again. |
| `SUPPLIER_RESPONSE_MISSING_FARE_AMOUNT`        | 502  | The supplier sent no fare amount.                                                                             |
| `SUPPLIER_RESPONSE_MISSING_QUOTE_ID`           | 502  | The supplier sent no quote reference.                                                                         |
| `SUPPLIER_RESPONSE_MISSING_SALE_DATA`          | 502  | The supplier sent booking details without the sale data.                                                      |
| `SUPPLIER_RESPONSE_MISSING_TMC_ID`             | 502  | The supplier account profile is incomplete.                                                                   |
| `SUPPLIER_RESPONSE_NO_ORIGINS`                 | 502  | The supplier listed no origins.                                                                               |
| `SUPPLIER_RESPONSE_NO_SECTORS`                 | 502  | The supplier listed no routes.                                                                                |
| `SUPPLIER_RESPONSE_PAGE_CHANGED`               | 502  | The supplier portal changed, so its answer could not be read.                                                 |
| `SUPPLIER_RESPONSE_SEARCH_MISMATCH`            | 502  | The supplier answered a different search from the one asked.                                                  |
| `SUPPLIER_RESPONSE_SECTOR_MISMATCH`            | 502  | The supplier answered for a different route.                                                                  |
| `SUPPLIER_RESPONSE_UNREADABLE`                 | 502  | The supplier sent a response we could not read.                                                               |
| `SUPPLIER_RETIRED`                             | 410  | This supplier was retired. The details name its replacement, if any.                                          |
| `SUPPLIER_SEARCH_FAILED`                       | 502  | The supplier search failed.                                                                                   |
| `SUPPLIER_SESSION_BUSY`                        | 502  | The supplier's shared session was busy, so this request could not be answered in time.                        |
| `SUPPLIER_SESSION_EXPIRED`                     | 502  | The supplier session expired. Retry shortly.                                                                  |
| `SUPPLIER_SESSION_UNUSABLE`                    | 502  | The supplier session cannot be used.                                                                          |
| `SUPPLIER_TEST_ONLY`                           | 403  | This supplier exists only in Test.                                                                            |
| `SUPPLIER_TIMEOUT`                             | 504  | The supplier did not answer in time.                                                                          |
| `SUPPLIER_UNAVAILABLE`                         | 503  | The supplier is temporarily unavailable.                                                                      |
| `SUPPLIER_UNKNOWN`                             | 404  | There is no supplier with this code.                                                                          |
| `SUPPLIER_VERSION_UNSUPPORTED`                 | 422  | This supplier API version is not supported.                                                                   |
| `TEST_PNR_REQUIRED`                            | 422  | A Test booking can only be fulfilled with a Test PNR.                                                         |
| `UNAUTHORIZED`                                 | 401  | Authentication is required, or the credentials are not valid.                                                 |
| `UNSUPPORTED_MEDIA_TYPE`                       | 415  | The request body has a content type this endpoint does not accept.                                            |
| `URI_TOO_LONG`                                 | 414  | The request URL is too long.                                                                                  |
| `VALIDATION_ERROR`                             | 400  | The request failed validation. error.details.invalidFields lists each field and why.                          |
| `VIA_TENANT_NOT_SUPPORTED`                     | 403  | Using another organization’s supplier account is not supported.                                               |
| `WRONG_AUTH_KIND`                              | 401  | This endpoint needs a different kind of credential.                                                           |