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.
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"}'
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,500API requests/month
2,500 API Calls a month. Credit card required. Cancel anytime.
£40/mo
Value
10,000API requests/month
10,000 API Calls a month. Credit card required. Cancel anytime.
£100/mo
Professional
50,000API requests/month
50,000 API Calls a month. Credit card required. Cancel anytime.
£250/mo
Advanced
100,000API requests/month
100,000 API Calls a month. Credit card required. Cancel anytime.
£1,000/mo
Premium
500,000API requests/month
500,000 API Calls a month. Credit card required. Cancel anytime.
£1,750/mo
Ultimate
1,000,000API 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