Error codes

Look up every error code travel.tech can return, its HTTP status, and what to do next.

What this covers

Every non-2xx response from travel.tech uses the error envelope described in
Errors: a
code, a human-readable message, and (for most codes) a recoveryAction
your integration can branch on. This page is the lookup table for every
code a partner-facing endpoint can return, its HTTP status, and what each
one means.

How it works

The code field always rides inside the error object:

{
  "error": {
    "code": "OFFER_EXPIRED",
    "message": "Human-readable description of what went wrong.",
    "details": [],
    "recoveryAction": "CHANGE_SELECTION",
    "retryAfterSeconds": null
  }
}

Branch your integration on code, not on message — message is
human-readable prose and may change between releases. code is a stable,
machine-readable contract.

What you need to handle

CodeHTTP statusMeaningRecovery action
API_ERROR500A generic failure with no more specific code.CONTACT_SUPPORT
APPROVAL_MESSAGE_REQUIRED422Your company requires a message for its approver on bookings that need approval; add one and book again.FIX_INPUT
APPROVAL_OUT_OF_TURN409An earlier approval level has not decided yet, so this level cannot act.BLOCKED
APPROVAL_REQUEST_CLOSED409This booking's approval request was rejected or expired; search again to request a new one.CHANGE_SELECTION
BAD_GATEWAY502An upstream dependency rejected the request or returned an unusable response.RETRY_NOW
BAD_REQUEST400The request is malformed in a way other codes do not describe more specifically.FIX_INPUT
BILLING_ADDRESS_ELECTRONIC_INVOICE_REQUIRED422An SDI code or a PEC address is needed for an Italian business billing address; add one and try again.FIX_INPUT
BILLING_ADDRESS_REGION_REQUIRED422A region or province is needed for this billing address; add one and try again.FIX_INPUT
BILLING_ADDRESS_REQUIRED422A billing address is needed to complete this booking; add one and book again.FIX_INPUT
BILLING_CONTEXT_FARE_MISMATCH422This fare is tied to a different billing context than the one the request named; search again to book under another.CHANGE_SELECTION
BILLING_CONTEXT_INVOICE_PROFILE_CONFLICT422The invoice profile named does not match the one the billing context bills to.FIX_INPUT
BILLING_CONTEXT_NOT_AVAILABLE422The billing context named in this request cannot be used for it; choose a different one.CHANGE_SELECTION
BIZAWAY_SESSION_UNAVAILABLE503Your session could not be established; retry the exchange.RETRY_LATER
BOOKING_ALREADY_ASSIGNED409This booking is already assigned to a trip.CONTACT_SUPPORT
BOOKING_COMMIT_FAILED502The booking could not be confirmed. The response's reason and retryable fields describe why, and whether retrying helps.Varies by reason
BOOKING_CONFLICT409The booking cannot be modified because it is in a conflicting state.CONTACT_SUPPORT
BOOKING_DESTINATION_EXTRACTION_FAILED422The destination for this trip could not be determined automatically.CONTACT_SUPPORT
BOOKING_FARE_SUPERSEDED409Confirm was refused because the booking was created on a fare a later price change moved away from; no charge was made.RETRY_NOW
BOOKING_NOT_FOUND404The referenced booking does not exist, or is not visible to you.CONTACT_SUPPORT
BOOKING_UNSUPPORTED_VERTICAL422This booking's vertical cannot be attached to a trip.BLOCKED
CANCELLATION_FEE_CHANGED409The cancellation fee you quoted no longer matches the current fee; the booking was not cancelled.FIX_INPUT
CARDHOLDER_STOP_CC400This card was stopped by its holder; try a different card.CHANGE_PAYMENT
CAR_DRIVER_ADDRESS_INCOMPLETE502The rental company refused this booking over the driver details we sent. Contact support to complete it.CONTACT_SUPPORT
CAR_OFFER_REJECTED_BY_SUPPLIER410The rental company could not confirm this car. Choose another car or search again.CHANGE_SELECTION
CHANGE_PRICE_CHANGED409The change total you quoted no longer matches the current total; the booking was not changed.FIX_INPUT
CHECKOUT_DETAILS_LOCKED409These account-bearer details can no longer be edited at this stage of checkout.BLOCKED
CHECKOUT_SESSION_ALREADY_CLAIMED409This guest checkout session is already claimed by a different account.CONTACT_SUPPORT
CHECKOUT_SESSION_CLAIM_IN_PROGRESS409Another claim on this session is in progress; it resolves within a few seconds.RETRY_LATER
CHECKOUT_SESSION_NOT_CLAIMABLE409This guest checkout session's current status rules out claiming it.BLOCKED
CLOSED_CC400This card's account is closed.CHANGE_PAYMENT
COLLEAGUE_CREATION_UNAVAILABLE422A new person cannot be added to this booking; it only accepts people matching its existing invoice profiles.FIX_INPUT
COMPROMISED_CC400Your bank blocked this card as compromised; this card cannot be retried.CONTACT_SUPPORT
CONFLICT409The request conflicts with the resource's current state.CONTACT_SUPPORT
CONSUMER_AUTH_REQUIRED401Your consumer identity is unknown or revoked, or your request signature is invalid, missing, or stale.CONTACT_SUPPORT
CONTACT_TO_THE_BANK400Your bank declined this charge; contact your bank.CHANGE_PAYMENT
CONTACT_TO_THE_BANK_HIGH_RISK400Your bank declined this charge as high-risk; contact your bank, or try a different card.CHANGE_PAYMENT
DATABASE_UNAVAILABLE503A required data store is temporarily unavailable.RETRY_LATER
EMAIL_DELIVERY_NOT_CONFIGURED503Email delivery is not configured for this deployment; nothing was sent.CONTACT_SUPPORT
ERROR_SEAT_SELECTION400The selected seats could not be booked; pick other seats or fare.CHANGE_SELECTION
EXPIRED_CARD_CC400This card has expired.CHANGE_PAYMENT
FARE_CONTEXT_REQUIRED422This request needs a fareId or bookingId to resolve payment methods, and neither was supplied.FIX_INPUT
FORBIDDEN403You are authenticated, but you do not have permission to access this resource.BLOCKED
FRAUD_CC400Your bank blocked this card over a suspected fraud attempt; this card cannot be retried.CONTACT_SUPPORT
GATEWAY_TIMEOUT504An upstream dependency did not respond in time.RETRY_NOW
GUEST_BIRTHDAY_REQUIRED422This fare requires a birthday for every guest, and one is missing.FIX_INPUT
HANDOFF_RESOLVED404This support conversation is finished and is now read-only.BLOCKED
INSUFFICIENT_CREDIT_LINE409The company's credit line cannot cover the new total for this change.CONTACT_SUPPORT
INSUFFICIENT_FOUNDS_CC400This card does not have sufficient funds available for this amount.CHANGE_PAYMENT
INTERNAL_SERVER_ERROR500An unexpected server error occurred.RETRY_NOW
INVALID_CARDHOLDER_CC400The cardholder name is invalid.CHANGE_PAYMENT
INVALID_CARD_CC400This card is invalid or unsupported.CHANGE_PAYMENT
INVALID_CHANGE_SELECTION422The legs, journeys, or fare you selected do not fit this booking or its change rules.FIX_INPUT
INVALID_CURSOR400The pagination cursor you supplied is malformed.BLOCKED
INVALID_CVV_CC400The card's security code (CVV) is invalid.CHANGE_PAYMENT
INVALID_EXPIRATION_DATE_CC400The card's expiration date is invalid.CHANGE_PAYMENT
INVALID_NUMBER_CC400The card number is invalid.CHANGE_PAYMENT
INVALID_POSTAL_CODE_CC400The card's postal code is incorrect or missing.CHANGE_PAYMENT
INVALID_REQUEST400The request body is not valid for this endpoint.FIX_INPUT
INVALID_VALUE422A field holds a value that is not valid for its type or constraints.FIX_INPUT
LIMIT_EXCEEDED_CC400This charge exceeds the card's limit.CHANGE_PAYMENT
LOST_CC400Your bank blocked this card; this card cannot be retried.CONTACT_SUPPORT
METHOD_NOT_ALLOWED405This HTTP method is not supported on this endpoint.BLOCKED
NOT_ACTIVATED_CC400This card has not been activated yet.CHANGE_PAYMENT
NOT_ENOUGH_SEATS410There are not enough seats left for this request; pick another fare.CHANGE_SELECTION
NO_INVOICE_PROFILE422The booking needs an invoice profile, and none is set.FIX_INPUT
NO_PASSENGER_PROFILE422The booking needs a passenger profile, and none is set.FIX_INPUT
OFFER_EXPIRED410The fare or search result you selected has expired; search again.CHANGE_SELECTION
OFFER_LOCK_IN_PROGRESS409Another request to lock this offer with the same key is still running; retry shortly.RETRY_LATER
PASSENGER_COUNT_MISMATCH422The passenger count does not match the one on the locked fare.FIX_INPUT
PASSENGER_DOCUMENT_EXPIRES_DURING_TRIP422A passenger's identity document expires before the trip ends.FIX_INPUT
PASSENGER_DOCUMENT_REQUIRED422A passenger is missing a required identity document.FIX_INPUT
PERMISSION_DENIED403You do not have the capability required for this action on this booking.BLOCKED
POSTPAY_LIMIT_EXHAUSTED422The company's postpay spending limit is used up; this booking cannot be paid on postpay.CHANGE_PAYMENT
POSTPAY_UNAVAILABLE422Postpay is not available as a payment method for this booking.CHANGE_PAYMENT
PRICE_ACCEPTANCE_REQUIRED409Confirm was refused because the checkout session has a new price that has not been accepted yet; no charge was made.RETRY_NOW
PRICE_ACCEPTANCE_STALE409The total you accepted is no longer the checkout session's current total; re-read it and accept again.FIX_INPUT
PROVIDER_DRIVER_AGE_RESTRICTION422The driver's age is outside the range this fare allows.FIX_INPUT
PROVIDER_DUPLICATE_BOOKING409This looks like a duplicate of an existing booking.CONTACT_SUPPORT
PROVIDER_ERROR503An upstream system returned an internal error.RETRY_LATER
PROVIDER_FORBIDDEN403An upstream system denied authorization for this request.BLOCKED
PROVIDER_MISSING_USER_INFO422The traveler profile is missing a field required to book, for example gender, birthday, or nationality.FIX_INPUT
PROVIDER_NOT_FOUND404The upstream resource this request refers to does not exist.CONTACT_SUPPORT
PROVIDER_POLICY_NOT_RESPECTED400This booking violates the account's corporate travel policy.BLOCKED
PROVIDER_UNAUTHORIZED401Authentication with an upstream system failed.—
PROVIDER_VALIDATION_FAILED422The upstream system rejected this request as invalid.FIX_INPUT
QUOTE_EXPIRED410The protection or insurance quote you referenced is stale or unknown; request a new one.CHANGE_SELECTION
RATE_LIMITER_UNAVAILABLE503The safeguard that throttles this action is temporarily unavailable, so the action was refused rather than sent unthrottled.RETRY_LATER
RATE_LIMIT_EXCEEDED429You exceeded the rate limit for this endpoint.RETRY_LATER
RENEWED_FARE_ID_UNAVAILABLE409This renewal predates the information needed to identify the re-locked fare; renew again.RETRY_NOW
RESOURCE_NOT_FOUND404The requested resource does not exist, or is not visible to you.CONTACT_SUPPORT
SEARCH_NOT_AVAILABLE503Search is not available for this vertical right now.CONTACT_SUPPORT
SEAT_BOOKING_FAILED400The selected seat could not be booked; pick another seat or fare.CHANGE_SELECTION
SEAT_NO_LONGER_AVAILABLE410The seat you selected is no longer available; pick another seat or fare.CHANGE_SELECTION
SEAT_REQUIRED422This fare requires a seat selection before booking; choose seats and book again.FIX_INPUT
SECURITY_VIOLATION_CC400Your bank blocked this card for a security violation; this card cannot be retried.CONTACT_SUPPORT
SELECTION_HOLD_EXPIRED409Your hold on this selection lapsed before you confirmed; renew it and retry.RETRY_NOW
SERVICE_UNAVAILABLE503A dependency this request needs is temporarily unavailable.RETRY_LATER
STAY_CHILD_AGE_MISMATCH422A child's age does not match the age searched for that room, or was not supplied.FIX_INPUT
STAY_GUEST_TYPE_UNSUPPORTED422A guest type in the request is not supported for this booking.FIX_INPUT
STAY_ROOM_COUNT_MISMATCH422The room count does not match the locked fare's room split.FIX_INPUT
STAY_ROOM_OCCUPANCY_MISMATCH422A room's guest count does not match the locked fare's per-room split.FIX_INPUT
STOLEN_CC400Your bank blocked this card; this card cannot be retried.CONTACT_SUPPORT
TEMPORARY_ISSUE_CC400Your bank will not authorize this card right now; try a different card.CHANGE_PAYMENT
TRIP_NOT_EMPTY409This trip still has bookings attached; detach them before deleting it.BLOCKED
TRIP_NOT_FOUND404The referenced trip does not exist, or is not visible to you.CONTACT_SUPPORT
UNAUTHORIZED401Your bearer token is missing, invalid, or expired.—
VALIDATION_ERROR422One or more request fields failed validation; see details[] for which ones.FIX_INPUT

recoveryAction is omitted from a response when no recovery action applies
(for example, an authentication failure your integration resolves by
re-authenticating rather than retrying or correcting the request). The table
above shows "—" for those codes. A few codes choose their recovery action per
failure reason; the table shows "Varies by reason" and the response
carries the action to follow. A RETRY_NOW or RETRY_LATER action says a
retry can help, not that it is free of side effects: before you retry an
operation that charges or books, read
Idempotency and retries so a retry never
duplicates the booking or the charge. Here is what each published
recoveryAction value means:

recoveryActionWhat you should do
RETRY_NOWRetry the request. Follow the code's meaning for any step to take first.
RETRY_LATERWait, then retry the request (see retryAfterSeconds when present).
CHANGE_PAYMENTAsk the traveler for a different payment method before retrying.
CHANGE_SELECTIONThe chosen option is gone; make a new selection.
REFRESHWhat was shown is out of date; run the search again.
CONTACT_SUPPORTRoute the traveler to support; this is not self-serviceable.
BLOCKEDThe action is not permitted; no client-side recovery is possible.
FIX_INPUTCorrect the request input before retrying.

Related guides

  • Errors — the error envelope shape and
    validation details.
  • Pagination — how paged lists work.
  • Authentication — how UNAUTHORIZED and
    CONSUMER_AUTH_REQUIRED relate to your credentials.

Did this page help you?