PNR Expert Plus - Now with Terminal Data

API Documentation

PNR Expert API

Join the growing community of 100+ companies building innovative travel solutions with PNR Expert.

Our API

The PNR Expert Conversion API is the most comprehensive PNR Conversion API on the market, transforming raw PNRs from all major GDS (Amadeus, Sabre, Galileo, Travelport and more) into structured JSON. One simple request returns flight details, terminal data, carbon emissions, codeshares, and more. Everything you need for accurate travel experiences for your clients.

Transform Your Travel Software

Convert PNR's from within your own app or web service. Turn messy PNRs into clean, structured data your apps can rely on.

The Most Comprehensive Data Response

Get flight info, airport info, terminals, carbon emissions, transit times, codeshare carriers, logos, and so much more in one fast, reliable API call.

Easy Integration

Get up and running in minutes with our quick start guide, or explore our full documentation for advanced integrations.

Trusted by 100+ Travel Companies

Join the 100+ companies already building their apps on the backbone of PNR Expert. Give your platform the power to deliver seamless, accurate travel data every time.

See Our Quick Start Guide Here

What's returned in our API?

Departure & Arrival Airports
Provides full airport details including name, city, country, and IATA code for each flight segment.
Flight details
Includes flight number, airline, departure/arrival times, and duration for each segment.
Timezones
Returns departure and arrival airport timezones in IANA format for accurate local time conversion.
Terminals
Where applicable, specifies which terminal each flight departs from and arrives at.
Codeshares
Identifies codeshare partners and shows the operating airline versus the marketing airline.
Status
Provides flight status such as confirmed, waitlisted, or cancelled directly from the PNR.
Duration & Distance
Includes scheduled flight duration and distance in miles and kilometers.
Layovers
Shows details of each layover including location and duration for multi-segment journeys.
Pax Names
Returns a list of passenger names exactly as stored in the PNR, including title and order.
Ticket Numbers
Includes all issued ticket numbers for each passenger where available in the booking.
Seats
Lists seat assignments for each passenger and flight segment where available.
Airline Reference
Returns the airline booking reference (PNR locator) used by the carrier.
Flight Numbers
Provides the full flight number including airline code and numeric identifier.
Cabin (Beta)
Shows cabin type such as Economy, Premium Economy, Business, or First (beta feature).
Booking Class
Includes booking class codes like Y, J, F, used for fares and loyalty calculations.
Carbon Emissions
Estimates CO₂ emissions per passenger per segment based on flight distance and aircraft type.
Aircraft Type
Returns the scheduled aircraft type (e.g., A320, B777) where provided by the airline.
Airline Logos
Delivers direct links to airline logos for use in your UI or travel documentation.
Coming Soon: FF Numbers && Meals
Soon to be added: Returns frequent flyer numbers associated with each passenger where available.
Coming Soon: APIS Data
Soon to be added: Returns APIS data such as passport numbers and nationalities where available.

See our API in Action:

Curious how it works? Click the fetch button below to grab this request and watch the API return real flight data. This lets you instantly access details like flight status, routes, and times, all powered by PNR Expert.

Terminal — curl
user@macbook:~$
curl -X POST https://www.pnrexpert.com/api/v1/pnr \
  -H "Content-Type: application/json" \
  -H "Authorization: bearer my-secret-token" \
  -d '{ "pnr": "RP/LON1A2345/LON1A2345            OM/SU  30MAR25/1430Z   9XZABC\n  1.SMITH/JOHNMR   2.BROWN/ANNAMS\n  3  BA 282 J 16SEP *LAXLHR SS1  340P 1005A 16SEP  E  BA/9XZABC\n  4  BA 283 J 23SEP *LHRLAX SS1 1010A  125P 23SEP  E  BA/9XZABC\n  5 AP LON020 7946 1234\n  6 AP LONTRAVEL@EXAMPLE.COM\n  7 APE J.SMITH@MAIL.COM\n  8 TK OK30MAR/LON1A2345//ETBA\n  9 SSR NSST BA HK2 LAXLHR/12A,P1/12B,P2/RS/RS/S3   SEE RTSTR\n  10 SSR NSST BA HK2 LHRLAX/14C,P1/14D,P2/RS/RS/S4   SEE RTSTR\n  11 FA PAX 125-9876543210/ETBA/30MAR25/LON1A2345/11110284/P1\n  12 FA PAX 125-9876543211/ETBA/30MAR25/LON1A2345/11110285/P2"}'
PNR Expert API Response Example

Code Example

See how to send a PNR to the PNR Expert API and receive a structured JSON response. Use the tabs on the left to view language-specific examples.

cURL

Languages

curl -X POST https://www.pnrexpert.com/api/v1/pnr \
  -H "Content-Type: application/json" \
  -H "Authorization: bearer my-secret-token" \
  -d '{ "pnr": "RP/LON1A2345/LON1A2345            OM/SU  30MAR25/1430Z   9XZABC\n  1.SMITH/JOHNMR   2.BROWN/ANNAMS\n  3  BA 282 J 16SEP *LAXLHR SS1  340P 1005A 16SEP  E  BA/9XZABC\n  4  BA 283 J 23SEP *LHRLAX SS1 1010A  125P 23SEP  E  BA/9XZABC\n  5 AP LON020 7946 1234\n  6 AP LONTRAVEL@EXAMPLE.COM\n  7 APE J.SMITH@MAIL.COM\n  8 TK OK30MAR/LON1A2345//ETBA\n  9 SSR NSST BA HK2 LAXLHR/12A,P1/12B,P2/RS/RS/S3   SEE RTSTR\n  10 SSR NSST BA HK2 LHRLAX/14C,P1/14D,P2/RS/RS/S4   SEE RTSTR\n  11 FA PAX 125-9876543210/ETBA/30MAR25/LON1A2345/11110284/P1\n  12 FA PAX 125-9876543211/ETBA/30MAR25/LON1A2345/11110285/P2"}'

Request

Use this endpoint to submit a raw PNR for processing. The API accepts a JSON payload containing a single pnr field and returns a normalized response with decoded flight segments, passenger names, terminals, and other enriched data points. Authentication is handled via a bearer token in the request header.

Endpoint
https://www.pnrexpert.com/api/v1/pnr
Method
POST
Request Headers
Authorizationstring

Bearer token for authentication

Content-Typestring

application/json

Request Body
pnrstring

The Passenger Name Record to be processed

Response

After submitting a valid request, The PNR expert conversion API returns the following structured JSON object containing flight segments and passenger information. A full breakdown is below.

200Root Responseapplication/json
successstring

Authorization status

flightsarray

Array of flight segments in the booking

passengersarray

Array of passenger information

statusnumber

HTTP status code

errorboolean

Error flag

remainingnumber

Remaining API quota

flights[] Object
departingFromobject
idnumber

Airport identifier

airportNamestring

Full airport name

cityNamestring

City name

countryNamestring

Country name

airportCodestring

IATA airport code

latitudestring

Airport latitude coordinate

longitudestring

Airport longitude coordinate

timezonestring

IANA timezone identifier

typestring

Location type (e.g., airport)

multi_terminalstring | null

Multi-terminal indicator

timestring

ISO 8601 departure time with timezone

terminalstring

Departure terminal designation

arrivingAtobject
idnumber

Airport identifier

airportNamestring

Full airport name

cityNamestring

City name

countryNamestring

Country name

airportCodestring

IATA airport code

latitudestring

Airport latitude coordinate

longitudestring

Airport longitude coordinate

timezonestring

IANA timezone identifier

typestring

Location type (e.g., airport)

multi_terminalstring | null

Multi-terminal indicator

timestring

ISO 8601 arrival time with timezone

dayOffsetnumber

Number of days after departure date

terminalstring

Arrival terminal designation

aircraftTypeobject
namestring

Aircraft model name

codestring | null

Aircraft type code

distanceobject
milesnumber

Flight distance in miles

kmnumber

Flight distance in kilometers

flightDurationobject
yearsnumber

Years component of flight duration

monthsnumber

Months component of flight duration

daysnumber

Days component of flight duration

hoursnumber

Hours component of flight duration

minutesnumber

Minutes component of flight duration

secondsnumber

Seconds component of flight duration

statusobject
codestring

Booking status code (e.g., SS for Seat Sold)

namestring

Booking status name

operatedByobject
airlineNamestring | null

Operating airline name (if different from marketing carrier)

iataCodestring | null

Operating airline IATA code

flightNostring | null

Operating flight number

techStopstring | null

Technical stop information

airlineLocatorstring

Airline booking reference code

carbonEmissionsnumber

Carbon emissions in metric tons per passenger

paxNonumber

Number of passengers

bookingClassstring

Booking class code

flightNumberstring

Flight number

airlineLogostring

Path to airline logo image

iataCodestring

Two-letter IATA airline code

airlineNamestring

Name of the airline

jstring

Cabin class description

cabinstring

Cabin class (Economy, Business, First)

transitTimestring | null

Time between connecting flights

passengers[] Object
namestring

Passenger name in LASTNAME/FIRSTNAMEMR format

typestring

Passenger type (ADT=Adult, CHD=Child, INF=Infant)

dobstring | null

Date of birth

ticketNostring

Ticket number

meals (coming soon)string | null

Special meal requests

ff (coming soon)string | null

Frequent flyer information

phoneNo (coming soon)string | null

Contact phone number

email (coming soon)string | null

Contact email address

seatNumbersarray
segmentstring

Flight segment code (e.g., LAXLHR)

seatstring

Assigned seat number

Error Responses

The API uses standard HTTP status codes to indicate success or failure. When a request fails, a JSON object is returned with an error field describing the issue.

Unauthorized

401Code: PE433

Message: Unauthorized PE433

When: Returned before reading the body if Authorization header is not present or invalid.

Cause: Missing or invalid Bearer token in the Authorization header, or a malformed header.

Fix: Include a valid JWT as a Bearer token: Authorization: Bearer <token>.

Sample Response
{
  "error": "Unauthorized PE433"
}

Request Limit Reached

401

Message: Request Limit Reached

When: Returned after a successful token verification and PNR processing attempt when quota is exceeded.

Cause: The API key’s monthly request quota has been exceeded (requestsUsed > requestsLimit).

Fix: Wait for the quota to reset or upgrade your plan. Reduce request volume or implement caching.

Sample Response
{
  "error": "Request Limit Reached"
}

Invalid JSON

400

Message: Invalid JSON in request body. Make sure your PNR is inside quotes and uses \n for newlines.

When: Returned when JSON.parse fails on the incoming body.

Cause: Request body could not be parsed as JSON (e.g., unquoted strings, stray characters, or raw newlines).

Fix: Send a valid JSON object like { "pnr": "LINE1\nLINE2" } and set Content-Type: application/json.

Sample Response
{
  "error": "Invalid JSON in request body. Make sure your PNR is inside quotes and uses \\n for newlines."
}

No PNR Provided

422

Message: No PNR Provided

When: Returned after token verification if pnr is falsy.

Cause: The JSON body is valid but the "pnr" field is missing or empty.

Fix: Include a non-empty "pnr" string in the request body: { "pnr": "…" }.

Sample Response
{
  "error": "No PNR Provided"
}

Unprocessable Entry

422Code: PE398

Message: Unprocessable Entry PE398

When: Returned from the catch block when jwt.verify or processing throws.

Cause: An error occurred while verifying the token or processing the PNR (e.g., parsing failure or internal error).

Fix: Verify your token and request body. If the issue persists, contact support with the errorMessage value.

Sample Response
{
  "error": "Unprocessable Entry PE398"
}

API Pricing

Prices are based on the number of monthly API uses. Users can cancel at any time.

£22/mo

Starter

2,500 API requests/month

2,500 API Calls a month. Credit card required. Cancel anytime.

£40/mo

Value

10,000 API requests/month

10,000 API Calls a month. Credit card required. Cancel anytime.

£100/mo

Professional

50,000 API requests/month

50,000 API Calls a month. Credit card required. Cancel anytime.

£250/mo

Advanced

100,000 API requests/month

100,000 API Calls a month. Credit card required. Cancel anytime.

£1,000/mo

Premium

500,000 API requests/month

500,000 API Calls a month. Credit card required. Cancel anytime.

£1,750/mo

Ultimate

1,000,000 API requests/month

1,000,000 API Calls a month. Credit card required. Cancel anytime.

FAQs

How do I access the API?

To access the API, sign up and generate an API key. You’ll find it in your account area.

I get a 308 redirecting status

Ensure your endpoint includes www.

Can’t find what you need? Check the docs or contact support.
PNR Expert | Convert and decode PNRs from Galileo, Sabre, Amadeus & Smartpoint