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

Commit order

Finalise an upsell — add ancillaries and seats and settle payment on an existing order.

POST/v1/orders/{orderID}/commitRequires X-API-Key
The OrderChange variant that closes out an upsell: ancillaries, seats and a payment in one call. **This is the closest thing to a "pay" endpoint — there is no POST /v1/orders/{orderID}/pay.**> Ticketing is inhibited on this account, so this call cannot currently succeed. A full card payload reaches the airline and comes back 502 americanairlines: orderchange (complete_payment) failed: [240000002] Document issuance failed. Root cause: IATA Ticketing Authority webservice error 200 (ticket rejected) - All Ticket related transactions have been inhibited for IATA number 00125576. The order is left untouched — still confirmed, zero tickets, zero payments — so the call is safe to attempt. The request path is verified end to end: the body decodes, routes and reaches the carrier; only the ticketing authority refuses.Seats added here are subject to the paid-seat limitation described on PUT /v1/orders/{orderID}. ?airline= is required.

Request example

curl --request POST \
  --url https://api.norba.io/v1/orders/{orderID}/commit \
  --header "X-API-Key: $NORBA_KEY" \
  --header "Content-Type: application/json" \
  --data '{ "payment": { "method": "CARD", "currency": "EUR", "amount": 380.62 } }'

Response example

Response example
{
  "order_id": "AA001Y1XD7ZA6",
  "pnr": "JBQGEY",
  "status": "ticketed",
  "total_amount": 380.62,
  "tickets": [
    {
      "ticket_number": "001-1234567890",
      "passenger_id": "PAX96101",
      "status": "issued"
    }
  ]
}

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

paymentobject
method (CARD, TRANSFER, WALLET), currency, amount, and optional card (number, holder, expiry_month, expiry_year, cvv, brand).
ancillariesarray<Ancillary>
Ancillaries to add.
seatsarray<Seat>
Seats to assign — see the paid-seat limitation.

Error codes

400
invalid json, or unknown airline.
502
The airline rejected the commit.
503
coming_soon — order writes disabled.
POST /v1/orders/{orderID}/commit — Commit order | Norba API