Skip to content
BreezePro docs

Certification

Certification is automatic. Run your own client against the test environment and Breeze scores every request you send against the catalog below. There is nothing to trigger and no test window. When every case that applies to you has passed, your integration is certified for that API version.

  1. Your Breeze contact sets your partner profile: the fare products, passenger types, ancillaries, payment methods and functions you plan to support, plus the API surface and version you are certifying on.
  2. You exercise your integration in the test environment as you normally would. Each request that matches a case is scored as it arrives. A case needs the response to contain what the table says, or, for the negative paths, to carry the expected error code.
  3. You read your progress at any time:
GET /json/v1/certification
GET /json/v1/certification/status/{surface}/{apiVersion}

The same status, with each run’s request and response, is in the sandbox Pro Booking under Account → Certification. Your Breeze contact sends the sign-in invite.

The first scores the target on your profile, the second any surface (ndc or json) and version you also exercise. Each case reports:

ResultMeaning
passSome request on this version passed the case. A later failure does not take it away.
failOnly failures so far. failed names the criteria that did not hold.
untestedNothing scored yet. An inventory case may carry a hint: a market and date where we last saw that product, seat or connection.
n/aYour profile does not declare what the case requires, so it is not asked of you.
blockedDeclared, but seller configuration prevents it. blocked[] says what to fix with your contact.

latestResult shows your most recent run of a case beside the kept pass, so a regression is visible without losing the certificate. Every scored case carries a runId; fetch the request and response Breeze saw with:

GET /json/v1/certification/runs/{runId}

Card numbers and security codes are redacted. The catalog itself is at GET /json/v1/certification/catalog/{surface}/{apiVersion}.

A 404 with “No certification target is set” means your partner profile is not finished yet. Ask your Breeze contact.

Certification happens only in staging. Staging and production are separate environments with separate API keys; staging keys do not work in production.

  1. When certified is true, tell your Breeze contact.
  2. Breeze copies your profile, sellers, limits and results to production, then issues production API keys and, if you take notifications, registers your production webhook.
  3. Breeze switches you to live. Point your production deployment at https://api.flybreeze.com/zephyr/breeze-offer-order with the production keys.

Keep testing in staging, and never send test traffic to production. Production records no runs: its status shows the results copied from staging, with "source": "imported" and asOf from staging. To add a fare product, payment method or function later, certify the new cases in staging first.

  • Start from Make a test booking (JSON) or its NDC twin.
  • Product, seat, bag and connection cases record only when the test environment offers that inventory. Follow the hint on an untested case rather than guessing a market.
  • Negative-path cases (errors) ask you to provoke a rejection on purpose: search with an unknown passenger type, retrieve a locator that does not exist, book the same passenger twice on one flight, reshop a No Flex order.
  • Each API version certifies separately. Moving to a newer version starts a new score.
FunctionCaseWhat to sendThroughMust holdRequires
searchone_waySearch one origin-destination and receive offers
POST /json/{version}/offers
POST /json/{version}/offers/byJourney
at least one offer
always
searchround_tripSearch an outbound and its return and receive offers
POST /json/{version}/offers
POST /json/{version}/offers/byJourney
at least one offer
always
searchopen_jawSearch two or more origin-destinations that are not a round trip and receive offers
POST /json/{version}/offers
POST /json/{version}/offers/byJourney
at least one offer
always
searchconnectionSearch a market where a connecting (two-segment) itinerary is offered
POST /json/{version}/offers
POST /json/{version}/offers/byJourney
response presentitinerary:connection
pricingpricedPrice a shopped offer
POST /json/{version}/offers/price
priced offer present
always
booking_creationpax_1Create an order for one passenger
POST /json/{version}/orders
order id present
function:booking_creation
booking_creationpax_2_to_4Create an order for two to four passengers
POST /json/{version}/orders
order id present
pax:multi
booking_creationchildCreate an order that includes a child (CHD) and read the passenger back on the order
POST /json/{version}/orders
order id present
CHD passenger present on order
pax:CHD
booking_creationinfantCreate an order that includes a lap infant (INF) and read the passenger back on the order
POST /json/{version}/orders
order id present
INF passenger present on order
pax:INF
booking_creationconnectionCreate an order on a connecting (two-segment) itinerary
POST /json/{version}/orders
order id present
itinerary:connection
cancellationreshop_quoteQuote a cancellation (NDC: OrderReshop DeleteOrderItem; JSON: reshop CancelOrder)
POST /json/{version}/orders/{orderId}/reshop
cancellation quote present
function:cancellation
cancellationcommitCommit a cancellation (NDC: AcceptCancelledOffer; JSON: POST cancel, AcceptCancelledOffer or CancelJourney)
POST /json/{version}/orders/{orderId}/cancel
PATCH /json/{version}/orders/{orderId}
order id present
function:cancellation
voluntary_changereshopShop replacement flights for an order (NDC: OrderReshop AddOfferItems; JSON: reshop ReshopItinerary)
POST /json/{version}/orders/{orderId}/reshop
reshop offer present
function:voluntary_change
voluntary_changecommitAccept the repriced change (NDC: AcceptRepricedOrder; JSON: AcceptReshopOffer)
PATCH /json/{version}/orders/{orderId}
order id present
function:voluntary_change
holdcreateCreate an order without payment (NDC: no PaymentFunctions; JSON: payment type Hold)
POST /json/{version}/orders
order id present
function:hold
holdpayPay a held order (NDC: OrderChange with PaymentFunctions; JSON: PATCH with payment or ConfirmHold)
PATCH /json/{version}/orders/{orderId}
order id present
function:hold
holdcancel_unpaidCancel a held order before payment (CancelUnpaidOrder)
PATCH /json/{version}/orders/{orderId}
order id present
function:hold
errorsvalidationSend a search that fails validation (e.g. an unknown passenger type) and receive the structured error
POST /json/{version}/offers
POST /json/{version}/offers/byJourney
error ERR-1004
error ERR-1005
always
errorsunknown_orderRetrieve an order that does not exist and receive the not-found error
GET /json/{version}/orders/{orderId}
error ERR-1007
error ERR-1008
always
errorscancelled_orderRetrieve a fully cancelled order and receive the order-cancelled error
GET /json/{version}/orders/{orderId}
error ERR-4008
function:cancellation
errorscreation_rejectedHave an order creation rejected (e.g. the same passenger twice on one flight) and receive the rejection
POST /json/{version}/orders
error ERR-4001
function:booking_creation
errorschange_not_permittedReshop a No Flex order and receive the flight-change-not-permitted error
POST /json/{version}/orders/{orderId}/reshop
error ERR-4003
product:NO + function:voluntary_change
productno_flexSearch a market and date where a No Flex offer is returned
POST /json/{version}/offers
POST /json/{version}/offers/byJourney
response presentproduct:NO
productniceSearch a market and date where a Nice offer is returned
POST /json/{version}/offers
POST /json/{version}/offers/byJourney
response presentproduct:EZ:EZU
productnicerSearch a market and date where a Nicer offer is returned
POST /json/{version}/offers
POST /json/{version}/offers/byJourney
response presentproduct:EZ:BZU
productnicestSearch a market and date where a Nicest offer is returned
POST /json/{version}/offers
POST /json/{version}/offers/byJourney
response presentproduct:EZ:AZU
seatfree_quoteRequest the seat map for a priced offer that returns free seats
POST /json/{version}/offers/{offerId}/seats
response presentseat:free
seatpaid_quoteRequest the seat map for a priced offer that returns paid seats
POST /json/{version}/offers/{offerId}/seats
response presentseat:paid
seatselectionCreate an order (or AcceptOffer) that selects a seat and shows it on the order
POST /json/{version}/orders
PATCH /json/{version}/orders/{orderId}
order id present
assigned seat present on order
seat:selection
bagquoteRequest the service list for a priced offer; a priced bag tier is returned
POST /json/{version}/offers/{offerId}/services
response presentbag
bagselectionCreate an order (or AcceptOffer) that adds a bag tier and shows it on the order
POST /json/{version}/orders
PATCH /json/{version}/orders/{orderId}
order id present
bag service present on order
bag
assistancequoteRequest the service list for a priced offer; a special-assistance SSR (e.g. WCHR) is returned
POST /json/{version}/offers/{offerId}/services
response presentassistance
assistanceselectionCreate an order (or AcceptOffer) that adds a special-assistance SSR and shows it on the order
POST /json/{version}/orders
PATCH /json/{version}/orders/{orderId}
order id present
assistance service present on order
assistance
paymentvisaPay an order (on create, or paying a hold) with a Visa card (brand VI)
POST /json/{version}/orders
PATCH /json/{version}/orders/{orderId}
order id present
payment:VI
paymentmastercardPay an order (on create, or paying a hold) with a Mastercard card (brand CA)
POST /json/{version}/orders
PATCH /json/{version}/orders/{orderId}
order id present
payment:CA
paymentdiscoverPay an order (on create, or paying a hold) with a Discover card (brand DS)
POST /json/{version}/orders
PATCH /json/{version}/orders/{orderId}
order id present
payment:DS
paymentamexPay an order (on create, or paying a hold) with a American Express card (brand AX)
POST /json/{version}/orders
PATCH /json/{version}/orders/{orderId}
order id present
payment:AX
paymentuatpPay an order (on create, or paying a hold) with a UATP card (brand TP)
POST /json/{version}/orders
PATCH /json/{version}/orders/{orderId}
order id present
payment:TP
contactagencySend a named, emailed Agency contact (on create or as a contact update) and read it back on the order
POST /json/{version}/orders
PATCH /json/{version}/orders/{orderId}
order id present
agency email returned on order
contact:agency
notificationwebhookReceive a schedule-change webhook delivery (any notifiable order change in staging produces one)
latest delivery answered 2xx
notification:webhook
FunctionCaseWhat to sendThroughMust holdRequires
searchone_waySearch one origin-destination and receive offers
AirShopping
at least one offer
always
searchround_tripSearch an outbound and its return and receive offers
AirShopping
at least one offer
always
searchopen_jawSearch two or more origin-destinations that are not a round trip and receive offers
AirShopping
at least one offer
always
searchconnectionSearch a market where a connecting (two-segment) itinerary is offered
AirShopping
response presentitinerary:connection
pricingpricedPrice a shopped offer
OfferPrice
priced offer present
always
booking_creationpax_1Create an order for one passenger
OrderCreate
order id present
function:booking_creation
booking_creationpax_2_to_4Create an order for two to four passengers
OrderCreate
order id present
pax:multi
booking_creationchildCreate an order that includes a child (CHD) and read the passenger back on the order
OrderCreate
order id present
CHD passenger present on order
pax:CHD
booking_creationinfantCreate an order that includes a lap infant (INF) and read the passenger back on the order
OrderCreate
order id present
INF passenger present on order
pax:INF
booking_creationconnectionCreate an order on a connecting (two-segment) itinerary
OrderCreate
order id present
itinerary:connection
cancellationreshop_quoteQuote a cancellation (NDC: OrderReshop DeleteOrderItem; JSON: reshop CancelOrder)
OrderReshop
cancellation quote present
function:cancellation
cancellationcommitCommit a cancellation (NDC: AcceptCancelledOffer; JSON: POST cancel, AcceptCancelledOffer or CancelJourney)
OrderChange
order id present
function:cancellation
voluntary_changereshopShop replacement flights for an order (NDC: OrderReshop AddOfferItems; JSON: reshop ReshopItinerary)
OrderReshop
reshop offer present
function:voluntary_change
voluntary_changecommitAccept the repriced change (NDC: AcceptRepricedOrder; JSON: AcceptReshopOffer)
OrderChange
order id present
function:voluntary_change
holdcreateCreate an order without payment (NDC: no PaymentFunctions; JSON: payment type Hold)
OrderCreate
order id present
function:hold
holdpayPay a held order (NDC: OrderChange with PaymentFunctions; JSON: PATCH with payment or ConfirmHold)
OrderChange
order id present
function:hold
holdcancel_unpaidCancel a held order before payment (CancelUnpaidOrder)
OrderChange
order id present
function:hold
errorsvalidationSend a search that fails validation (e.g. an unknown passenger type) and receive the structured error
AirShopping
error ERR-1004
error ERR-1005
always
errorsunknown_orderRetrieve an order that does not exist and receive the not-found error
OrderRetrieve
error ERR-1007
error ERR-1008
always
errorscancelled_orderRetrieve a fully cancelled order and receive the order-cancelled error
OrderRetrieve
error ERR-4008
function:cancellation
errorscreation_rejectedHave an order creation rejected (e.g. the same passenger twice on one flight) and receive the rejection
OrderCreate
error ERR-4001
function:booking_creation
errorschange_not_permittedReshop a No Flex order and receive the flight-change-not-permitted error
OrderReshop
error ERR-4003
product:NO + function:voluntary_change
productno_flexSearch a market and date where a No Flex offer is returned
AirShopping
response presentproduct:NO
productniceSearch a market and date where a Nice offer is returned
AirShopping
response presentproduct:EZ:EZU
productnicerSearch a market and date where a Nicer offer is returned
AirShopping
response presentproduct:EZ:BZU
productnicestSearch a market and date where a Nicest offer is returned
AirShopping
response presentproduct:EZ:AZU
seatfree_quoteRequest the seat map for a priced offer that returns free seats
SeatAvailability
response presentseat:free
seatpaid_quoteRequest the seat map for a priced offer that returns paid seats
SeatAvailability
response presentseat:paid
seatselectionCreate an order (or AcceptOffer) that selects a seat and shows it on the order
OrderCreate
order id present
assigned seat present on order
seat:selection
bagquoteRequest the service list for a priced offer; a priced bag tier is returned
ServiceList
response presentbag
bagselectionCreate an order (or AcceptOffer) that adds a bag tier and shows it on the order
OrderCreate
order id present
bag service present on order
bag
assistancequoteRequest the service list for a priced offer; a special-assistance SSR (e.g. WCHR) is returned
ServiceList
response presentassistance
assistanceselectionCreate an order (or AcceptOffer) that adds a special-assistance SSR and shows it on the order
OrderCreate
order id present
assistance service present on order
assistance
paymentvisaPay an order (on create, or paying a hold) with a Visa card (brand VI)
OrderCreate
OrderChange
order id present
payment:VI
paymentmastercardPay an order (on create, or paying a hold) with a Mastercard card (brand CA)
OrderCreate
OrderChange
order id present
payment:CA
paymentdiscoverPay an order (on create, or paying a hold) with a Discover card (brand DS)
OrderCreate
OrderChange
order id present
payment:DS
paymentamexPay an order (on create, or paying a hold) with a American Express card (brand AX)
OrderCreate
OrderChange
order id present
payment:AX
paymentuatpPay an order (on create, or paying a hold) with a UATP card (brand TP)
OrderCreate
OrderChange
order id present
payment:TP
contactagencySend a named, emailed Agency contact (on create or as a contact update) and read it back on the order
OrderCreate
OrderChange
order id present
agency email returned on order
contact:agency
notificationwebhookReceive a schedule-change webhook delivery (any notifiable order change in staging produces one)
latest delivery answered 2xx
notification:webhook

Compared to v26.2, the older versions omit the product, seat, bag, assistance, card-brand, and agency-contact cases, and use payment/card in place of the card brands.

FunctionCaseWhat to sendThroughMust holdRequires
searchone_waySearch one origin-destination and receive offers
AirShopping
at least one offer
always
searchround_tripSearch an outbound and its return and receive offers
AirShopping
at least one offer
always
searchopen_jawSearch two or more origin-destinations that are not a round trip and receive offers
AirShopping
at least one offer
always
searchconnectionSearch a market where a connecting (two-segment) itinerary is offered
AirShopping
response presentitinerary:connection
pricingpricedPrice a shopped offer
OfferPrice
priced offer present
always
booking_creationpax_1Create an order for one passenger
OrderCreate
order id present
function:booking_creation
booking_creationpax_2_to_4Create an order for two to four passengers
OrderCreate
order id present
pax:multi
booking_creationchildCreate an order that includes a child (CHD) and read the passenger back on the order
OrderCreate
order id present
CHD passenger present on order
pax:CHD
booking_creationinfantCreate an order that includes a lap infant (INF) and read the passenger back on the order
OrderCreate
order id present
INF passenger present on order
pax:INF
booking_creationconnectionCreate an order on a connecting (two-segment) itinerary
OrderCreate
order id present
itinerary:connection
paymentcardCreate an order paid by card
OrderCreate
order id present
function:booking_creation
cancellationreshop_quoteQuote a cancellation (NDC: OrderReshop DeleteOrderItem; JSON: reshop CancelOrder)
OrderReshop
cancellation quote present
function:cancellation
cancellationcommitCommit a cancellation (NDC: AcceptCancelledOffer; JSON: POST cancel, AcceptCancelledOffer or CancelJourney)
OrderChange
order id present
function:cancellation
voluntary_changereshopShop replacement flights for an order (NDC: OrderReshop AddOfferItems; JSON: reshop ReshopItinerary)
OrderReshop
reshop offer present
function:voluntary_change
voluntary_changecommitAccept the repriced change (NDC: AcceptRepricedOrder; JSON: AcceptReshopOffer)
OrderChange
order id present
function:voluntary_change
holdcreateCreate an order without payment (NDC: no PaymentFunctions; JSON: payment type Hold)
OrderCreate
order id present
function:hold
holdpayPay a held order (NDC: OrderChange with PaymentFunctions; JSON: PATCH with payment or ConfirmHold)
OrderChange
order id present
function:hold
holdcancel_unpaidCancel a held order before payment (CancelUnpaidOrder)
OrderChange
order id present
function:hold
errorsvalidationSend a search that fails validation (e.g. an unknown passenger type) and receive the structured error
AirShopping
error ERR-1004
error ERR-1005
always
errorsunknown_orderRetrieve an order that does not exist and receive the not-found error
OrderRetrieve
error ERR-1007
error ERR-1008
always
errorscancelled_orderRetrieve a fully cancelled order and receive the order-cancelled error
OrderRetrieve
error ERR-4008
function:cancellation
errorscreation_rejectedHave an order creation rejected (e.g. the same passenger twice on one flight) and receive the rejection
OrderCreate
error ERR-4001
function:booking_creation
errorschange_not_permittedReshop a No Flex order and receive the flight-change-not-permitted error
OrderReshop
error ERR-4003
product:NO + function:voluntary_change
notificationwebhookReceive a schedule-change webhook delivery (any notifiable order change in staging produces one)
latest delivery answered 2xx
notification:webhook