Live and bookable — pre-production, and no payment

These endpoints work against real American Airlines inventory: a search returns real offers and you can create a real booking with a carrier PNR. Two limits are worth knowing before you build against them.

  • Orders are pre-production. They are genuine reservations in the airline's pre-production system, not commercial tickets — nobody flies on them. Cancel what you create; anything left over expires on its own payment time limit.
  • Payment and ticketing cannot complete. An order is created as an unpaid hold, which is the normal agency flow, but ticketing is inhibited on this IATA number, so POST /v1/orders/{orderID}/commit returns 502. Everything up to and including the reservation works.
Servicing

Confirm a change

Apply the quoted change and return the updated order.

POST/v1/orders/{orderID}/change/confirmRequires X-API-Key
Accepts a reshop offer and reissues the order against it, returning the updated canonical Order, which is also persisted.This is step 2 of 2. Call POST /v1/orders/{orderID}/reshop first, pick an option, and pass its offer_id here:```
POST /v1/orders/{orderID}/reshop → offers[], each with an offer_id

POST /v1/orders/{orderID}/change/confirm

{"offer_id": "<the option you are accepting>"}

```
NDC does not edit an order in place — it replaces it with a specific offer, which is why the offer reference is required. Omitting offer_id returns 400 naming …/reshop as the source.> change_quote_id is accepted but advisory: the airline reprices at acceptance regardless of what the earlier quote said. Re-read the order afterwards to see what actually changed.> Verified working against a live order: reshop returned offer AA-RF2B458E9-F866-4C61-BEC2-1, and posting it here returned 200 with the reissued order. A made-up id is rejected by the airline ([230000002] Invalid or Expired Offer), not by us.> Upstream limitation: on the AA sandbox POST …/reshop only produces cancellation offers, so that is the only kind of change you can commit today. Rebooking to a different itinerary is blocked at reshop (see that endpoint), not here.?airline= is required.

Request example

curl --request POST \
  --url https://api.norba.io/v1/orders/{orderID}/change/confirm \
  --header "X-API-Key: $NORBA_KEY" \
  --header "Content-Type: application/json" \
  --data '{ "offer_id": "OFFER-AA-RESHOP-1" }'

Response example

Response example
{
  "order_id": "AA001Y1XD7ZA6",
  "pnr": "JBQGEY",
  "status": "confirmed",
  "currency": "EUR",
  "total_amount": 380.62
}

Authorization

X-API-KeystringRequired
Opaque API key issued from the Norba dashboard. Sent on every request as the X-API-Key HTTP header. Missing or invalid keys are rejected with 401 Unauthorized.

Path parameters

orderIDstringRequired
Canonical order ID.
Example: AA001Y1XD7ZA6

Query parameters

airlinestringRequired
IATA code. Required.
Example: AA

Request body

offer_idstringRequired
Required. The offer_id of the reshop offer being accepted.
offer_idsarray<string>
Additional reshop offers, when the change spans more than one.
change_quote_idstring
Advisory. Accepted, but the airline reprices at acceptance.

Error codes

400
invalid json, unknown airline, or offer_id is required when no reshop offer was supplied.
502
The airline rejected the change.
503
coming_soon — order writes disabled.
POST /v1/orders/{orderID}/change/confirm — Confirm a change