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. |