Error codes
JSON and NDC/XML share the same ERR-* catalog. JSON returns them in the response envelope
(error.code); XML returns IATA Error elements with the same code text.
Endpoint pages list the codes that endpoint can return. This page is the cross-cutting reference plus the failures partners hit most often when integrating.
Common create / pay failures
Section titled “Common create / pay failures”| Symptom | Likely code | Fix |
|---|---|---|
| Missing or bad booking contact | ERR-1005 (JSON) / ERR-7004 (XML) | Send contact with at least an email address (JSON) or an unreferenced ContactInfo (XML). See contacts. |
Unsupported ContactPurposeText | ERR-1004 | Only the primary booking contact can be set; leave it untagged, or tag it Primary. |
| Phone rejected | ERR-1004 | Send a number that normalizes to E.164 (+1…, 00…, or 10-digit US/Canada). |
| Malformed email | ERR-1004 | Fix the address format. |
| Field value too long | ERR-1004 | Check passenger name and document limits. Common: name.surname max 32 characters, documentNumber max 35 characters, remarks max 1 024 characters each. |
placeOfBirth or placeOfIssue contains digits or punctuation | ERR-1004 | Letters and spaces only (e.g. send Los Angeles, not L.A. or St. Louis). |
loyaltyProgram.programCode contains | | ERR-1004 | Remove the | character from the program code. |
gender: "F" or "female" on JSON create | ERR-1005 | Use Male / Female, spelled exactly. See passengers. |
| Duplicate passenger IDs or infants > adults | ERR-1005 / ERR-7003 | Unique IDs; at most one infant per adult. |
| Unsupported currency | ERR-1004 | USD only. See payments. |
| Offer not found / expired | ERR-3000 / ERR-3001 | Re-shop and re-price; offer IDs are short-lived. |
| Same passenger name already on that flight (sandbox) | ERR-4001 | Change the test passenger name or travel date. |
| Payment amount ≠ live balance (XML) | ERR-3006 | Set PaymentProcessingDetails > Amount to the current amount due. |
| Metro return leg returns to a different airport than the outbound departed from | ERR-3003 | Re-select: the return must mirror the outbound’s airports (HPN out → HPN back). |
| Shopped offer repriced at a different total | ERR-3006 | Send expectedTotal (JSON) / TotalOfferPriceAmount (XML) with the accepted amount, or re-shop and retry. |
| Unsupported card brand | ERR-6001 | Use VI, CA, AX, or DS. |
| Payment declined / rejected | ERR-6002 | Check card details; in test use 4111111111111111. |
| Token expired | ERR-8000 / 401 | Fetch a new bearer token (≈30-minute lifetime). |
| Read-only API key on book | ERR-8001 | Need full transaction (book) permissions. |
| Idempotency-Key reused with a different request body | ERR-1011 | Each key is bound to the first request body it was sent with. Use a different key for a new order attempt. |
| Flight change on a No Flex fare | ERR-4003 | No Flex allows no flight changes. Cancel instead. |
| Order create still in progress on this key | ERR-4011 | The first request is still processing. Retry with the same Idempotency-Key after a moment. |
Catalog
Section titled “Catalog”| Code | Typical HTTP | Meaning |
|---|---|---|
ERR-1000 | 400 | Malformed XML. |
ERR-1001 | 400 | Malformed JSON: the body could not be parsed or is not a JSON object. |
ERR-1002 | 404 | Unsupported version segment in the path. |
ERR-1003 | 400 | Missing required XML element. |
ERR-1004 | 400 | Invalid field value (currency, contact type, phone, email, cabin, ancillary ID, …). |
ERR-1005 | 422 | Request validation failed (schema / business rules on the body). |
ERR-1006 | 422 | Origin or destination is not a valid market. |
ERR-1007 | 404 | Resource not found. |
ERR-1008 | 409 | The request conflicts with an existing record. |
ERR-1009 | 413 | Request body larger than 1 MiB. |
ERR-1010 | 415 | Unsupported Content-Type (NDC/XML takes application/xml or text/xml). |
ERR-1011 | 422 | Idempotency-Key reused: same key sent with a different request body. |
ERR-2002 | 500 | Availability could not be processed upstream. |
ERR-3000 | 404 | Referenced offer could not be found. |
ERR-3001 | 404 | Referenced offer has expired. |
ERR-3002 | 400 | One or more offer items not found on the offer. |
ERR-3003 | 400 | Invalid / partial selection (including package reshop item selection, or a metro round trip whose return uses different airports than the outbound). |
ERR-3004 | 400 | Reshop offer sent to OfferPrice / price offer; use quote instead. |
ERR-3005 | 400 | Shop offer sent to OrderQuote / quote order; use price / OfferPrice instead. |
ERR-3006 | 409 | Stated payment amount does not match the live amount due, or (on short sell) the repriced total differs from the shopped total and no stated total was sent. |
ERR-3007 | 422 | The requested flight is not available in the tour-operator inventory. |
ERR-3008 | 409 | Your negotiated contract applies to this journey, but its pricing has not been verified yet. |
ERR-4000 | 404 | Order not found. |
ERR-4001 | 400 | Order could not be created from the selected offer. |
ERR-4002 | 400 | Requested change could not be applied or quoted. |
ERR-4003 | 400 | The fare rules on this journey do not permit a flight change (for example, No Flex). |
ERR-4004 | 400 | The fare rules on this journey do not permit a partial cancellation; cancel the whole order. |
ERR-4006 | 400 | Referenced journey not found on the order. |
ERR-4007 | 400 | Journey has already flown, or a passenger on it boarded or no-showed; the journey can no longer be changed or cancelled. |
ERR-4008 | 404 | The order has been fully cancelled and has no order items left. |
ERR-4009 | 422 | An international itinerary cannot be sold this close to its first departure. |
ERR-4010 | 400 | Bundle change not permitted: a bundled journey cannot move to a lower bundle on the same flight, or to an unbundled fare on any flight. |
ERR-4011 | 409 | Order create with this Idempotency-Key is still being processed. Retry with the same key to receive its result. |
ERR-5000 | 501 | Operation not currently supported (e.g. standalone OrderCancel). |
ERR-6000 | 422 | Payment method not supported. |
ERR-6001 | 422 | Card brand not supported. |
ERR-6002 | 400 | Payment rejected. |
ERR-6003 | 501 | The refund cannot be completed automatically for this payment method. Contact Breeze. |
ERR-6004 | 501 | The refund cannot be completed automatically because a loyalty points refund is owed. Contact Breeze. |
ERR-6005 | 503 | Payment processing timed out. |
ERR-6006 | 422 | This change would leave a balance due, which this booking cannot pay. Changes that cost nothing or leave a credit are accepted. (JSON only.) |
ERR-7003 | 422 | Infants exceed adults. |
ERR-7004 | 422 | Missing order contact information (XML). |
ERR-7006 | 422 | One or more passenger dates of birth are invalid. |
ERR-7007 | 400 | Passenger update rejected. |
ERR-7008 | 422 | Loyalty number unrecognized or does not match the passenger name. |
ERR-7009 | 422 | Split would leave a child passenger without an adult on one of the resulting orders. |
ERR-8000 | 401 | Missing or invalid API key or bearer token. |
ERR-8001 | 403 | API key not authorized for this request (permissions / agency mismatch). |
ERR-8002 | 503 | Authentication store unavailable. |
ERR-9000 | 503 | A required service is unavailable. |
ERR-9001 | 500 | Unexpected upstream response. |
ERR-9002 | 503 | Offer cache unavailable. |
ERR-9003 | 500 | Upstream booking / change / lookup failure. |
ERR-9005 | 500 | Internal error. Retry; contact Breeze if it persists. |
JSON error bodies may also include error.fields naming the invalid property; check that map before retrying.