Getting started · Authentication

Authentication

Send your API key in the `X-API-Key` header on every `/v1/*` request. Only `GET /v1/health` needs no key.

D-201
api.norba.ioSANDBOXnbr_test_…PRODUCTIONnbr_live_…X-API-KeyOne hostBoth environmentsProductionReal tickets, after go-liveRestrictionsIP, endpoints, scopes, expiryYour API keySent on every /v1 callSandboxAirlines' test systems

How to authenticate

Create a key in the dashboard under API keys. One host serves both environments; the key decides which one a request runs in.

export NORBA_KEY="nbr_test_3f9c…"

curl --request POST \
  --url https://api.norba.io/v1/shopping/offers \
  --header "X-API-Key: $NORBA_KEY" \
  --header "Content-Type: application/json" \
  --data '{ "origin": "LHR", "destination": "JFK", "departure_date": "2027-06-15", "adults": 1 }'

API key details

PropertyDetails
Acts asThe member who created it. If that member loses the permission a call needs, the key is refused with 403.
Formatnbr_test_ (sandbox) or nbr_live_ (production), then 32 hex characters. Treat it as opaque.
ProductionProduction keys can be created once your agency is approved to go live. A key only sees orders from its own environment.
Restrictions (optional)IP allowlist (addresses or CIDR blocks) and endpoint allowlist (path prefixes such as /v1/shopping), up to 20 entries each; scopes; an expiry up to 2 years ahead. Changes apply at once.
RotationRotate creates a new key and revokes the old one at once. Restrictions are not copied.
SandboxReaches the airlines' test systems. Orders are test bookings, never real tickets.
Scopessearch.execute: /v1/shopping/* and /v1/offers/*. order.read: every GET under /v1/orders. order.create: POST /v1/orders. order.service: every other write on an order. A key with no scopes may call everything; other endpoints need no scope.
Viewing the secretShown once on creation. Reveal it later with your password or a fresh second factor.
Where to get itDashboard → API keys. Needs a verified email and, for a member who is not the owner, the permission to manage API keys.

Common auth errors

The body is `{ "error": "…" }`. 401: the key is not usable. 403: the key is valid but may not make this call.

HTTPerrorMeaning
401api key has expiredPast its expiry date. Create a new key.
401invalid api keyUnknown, revoked or deleted key, or a suspended agency.
401missing X-API-KeyNo header sent.
403api key is not permitted from this addressOutside the key's IP allowlist.
403api key is not permitted on this endpointOutside the key's endpoint allowlist.
403api key lacks the <scope> scopeThe key's scopes do not cover this call.
403the account behind this api key … permission …The key's creator lacks a permission this call needs. Ask an owner or admin.
403the agency behind this api key is suspendedContact support.
429too many requests without a valid API key from this address …Too many invalid keys from one address. Fix the key; retry after Retry-After.
503could not verify the api key's restrictions, retry shortlyNothing ran. Retry.

Billing refusals (402) and every other code: Errors & rate limits.

API Authentication: API Keys & Environments | Norba Docs