Sandbox: real offers, real PNRs, test tickets

In the sandbox these endpoints work against real carrier test inventory: a search returns real offers and you can create a real booking with a carrier PNR. Two things are worth knowing before you build against them.

  • Sandbox orders are test reservations. Nobody flies on them, and they raise no fee. Cancel what you create; anything left over expires on its own payment time limit.
  • Sandbox tickets are test documents. A paid order comes back ticketed with test ticket and EMD numbers in tickets[]; a hold comes back confirmed with none. Read status and tickets[], not the HTTP code — that is the check production relies on too.
Servicing

Refund eligibility

Is this order refundable, and for how much?

GET/v1/orders/{orderID}/refund-eligibilityRequires X-API-Key

Returns a RefundEligibility: whether a refund is possible, the amount, the penalty and a deadline.

**A GET, so it is not blocked by the booking feature gate** — this works even in environments where order writes return coming_soon.

Derived, not authoritative. eligible is computed as penalty < original fare; refund_amount is original fare − penalty; deadline is a flat 24 hours from now, not a date the airline supplied. All of it comes from the airline's order reprice rather than a refund quote, so use it as guidance and confirm the real figure before promising money back.

?airline= is optional: the airline comes from your stored order, not from this parameter. A value that disagrees with the persisted carrier is refused with 400 airline does not match the order.

Request example

curl --request GET \
  --url https://api.norba.io/v1/orders/{orderID}/refund-eligibility \
  --header "X-API-Key: $NORBA_KEY"

Response example

Response example
{
  "order_id": "AA001Y1XD7ZA6",
  "eligible": true,
  "refund_amount": 380.62,
  "refund_currency": "EUR",
  "penalty_amount": 0,
  "penalty_currency": "EUR",
  "deadline": "2026-08-15T09:15:00Z"
}

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

airlinestring

IATA code. Optional — inferred from your stored order. A value that disagrees with the persisted carrier is refused with 400 airline does not match the order.

Example: AA

Response fields

order_idstringRequired

The order assessed.

eligiblebooleanRequired

true when the penalty is smaller than the original fare.

refund_amountnumber

Original fare minus penalty.

refund_currencystring

ISO 4217 code.

penalty_amountnumber

Fee the airline retains.

penalty_currencystring

ISO 4217 code.

deadlinestring (RFC 3339)

Currently always 24 hours from the request — not an airline-supplied date.

reasonsarray<string>

Restrictions, when known.

Error codes

400

airline does not match the order — only returned when a supplied ?airline= disagrees with the persisted carrier; omitting it is fine.

502

The airline rejected the reprice.

GET /v1/orders/{orderID}/refund-eligibility | Norba API