EDIFACT PAXLST Passenger List Last updated: 2026-09-29
PAXLST is the UN/EDIFACT passenger list message used for advance passenger information (API). Airlines and vessel operators send it to border authorities with passenger and crew details. This sample follows the US CBP APIS implementation of D03B.
The message identifies the carrier and the flight or voyage in TDT groups, then repeats a NAD group per traveller with name, nationality, date of birth and travel document details.
At a glance
- Standard
- EDIFACT
- Version
D03B (US CBP APIS)- Sent by
- Carrier to border authority
- Responses
- CUSRES or country-specific response
- ediFabric .NET template
TSPAXLSTinEdiFabric.Templates.Edifact- OpenEDI definition
- View PAXLST in the spec library
PAXLST structure
The full EDIFACT PAXLST layout from its OpenEDI definition, the same model ediFabric uses to parse, validate and generate it: 7 loops and 37 segment positions, in file order. Loops are shaded and their segments indented; Max use is how many times a segment or loop may repeat.
| Segment / loop | Name | Usage | Max use |
|---|---|---|---|
UNH | Message header | Mandatory | 1 |
BGM | Beginning of message | Optional | 1 |
RFF | Reference | Optional | 1 |
DTM | Date/time/period | Optional | >1 |
| NAD loop | Name and address | Optional | >1 |
NAD | Name and address | Optional | 1 |
CTA | Contact information | Optional | 1 |
COM | Communication contact | Optional | >1 |
| TDT loop | Details of transport | Optional | >1 |
TDT | Details of transport | Optional | 1 |
DTM | Date/time/period | Optional | 1 |
| LOC loop | Place/location identification | Optional | >1 |
LOC | Place/location identification | Optional | 1 |
DTM | Date/time/period | Optional | >1 |
| NAD loop | Name and address | Optional | >1 |
NAD | Name and address | Optional | 1 |
ATT | Attribute | Optional | >1 |
DTM | Date/time/period | Optional | >1 |
MEA | Measurements | Optional | >1 |
GEI | Processing information | Optional | >1 |
FTX | Free text | Optional | >1 |
LOC | Place/location identification | Optional | >1 |
COM | Communication contact | Optional | 1 |
EMP | Employment details | Optional | >1 |
NAT | Nationality | Optional | >1 |
RFF | Reference | Optional | 1 |
| DOC loop | Document/message details | Optional | >1 |
DOC | Document/message details | Optional | 1 |
DTM | Date/time/period | Optional | >1 |
GEI | Processing information | Optional | >1 |
RFF | Reference | Optional | >1 |
LOC | Place/location identification | Optional | >1 |
CPI | Charge payment instructions | Optional | 1 |
QTY | Quantity | Optional | >1 |
| GID loop | Goods item details | Optional | >1 |
GID | Goods item details | Optional | 1 |
FTX | Free text | Optional | >1 |
QTY | Quantity | Optional | >1 |
| TDT loop | Details of transport | Optional | 1 |
TDT | Details of transport | Optional | 1 |
FTX | Free text | Optional | 1 |
CNT | Control total | Optional | 1 |
AUT | Authentication result | Optional | 1 |
UNT | Message trailer | Mandatory | 1 |
Sample PAXLST file
A PAXLST passenger manifest for one flight. Paste it into EdiNation to see every element named and validated.
UNB+UNOA:4+LOCK:02+CBP-ACE-TEST:02+041013:1901+16++ACE' UNG+PAXLST+LOCK:02+CBP-ACE-TEST:02+041013:1901+16+UN+D:03B:' UNH+PAXLST16+PAXLST:D:03B:UN' BGM+10+LOCKKH04103101+4' RFF+RFA:03' TDT+11++++LOCK:172' DTM+132:20041230:102' NAD+VW+0000041153:109++AOMAD:CHRIS::::1+11107 SUNSET HILLS ROAD+RESTON+VA:163:5+20190' ATT+2++M*M*M*M*M' DTM+329:19350919:102' EMP+4+++1++8' NAT+2+US::5' DOC+5K+P100971204141' LOC+91+VA:163' LOC+91+US:162' DOC+39+15504141' LOC+91+US:162' UNT+16+PAXLST16' UNE+1+16' UNZ+1+16'
The same PAXLST as JSON
ediFabric turns every loop, segment and element into a named field. This is the transaction from the sample, in the JSON that ediFabric Native and Cloud return and accept.
{
"UNH": {
"MessageReferenceNumber_01": "PAXLST16",
"MessageIdentifier_02": {
"MessageType_01": "PAXLST",
"MessageVersionNumber_02": "D",
"MessageReleaseNumber_03": "03B",
"ControllingAgencyCoded_04": "UN"
}
},
"BGM": {
"DOCUMENTMESSAGENAME_01": {
"Documentnamecode_01": "10"
},
"DOCUMENTMESSAGEIDENTIFICATION_02": {
"Documentidentifier_01": "LOCKKH04103101"
},
"Messagefunctioncode_03": "4"
},
"RFF": {
"REFERENCE_01": {
"Referencecodequalifier_01": "RFA",
"Referenceidentifier_02": "03"
}
},
"TDTLoop": [
{
"TDT": {
"Transportstagecodequalifier_01": "11",
"CARRIER_05": {
"Carrieridentifier_01": "LOCK",
"Codelistidentificationcode_02": "172"
}
},
"DTM": {
"DATETIMEPERIOD_01": {
"Dateortimeorperiodfunctioncodequalifier_01": "132",
"Dateortimeorperiodtext_02": "20041230",
"Dateortimeorperiodformatcode_03": "102"
}
}
}
],
"NADLoop2": [
{
"NAD": {
"Partyfunctioncodequalifier_01": "VW",
"PARTYIDENTIFICATIONDETAILS_02": {
"Partyidentifier_01": "0000041153",
"Codelistidentificationcode_02": "109"
},
"PARTYNAME_04": {
"Partyname_01": "AOMAD",
"Partyname_02": "CHRIS",
"Partynameformatcode_06": "1"
},
"STREET_05": {
"Streetandnumberorpostofficeboxidentifier_01": "11107 SUNSET HILLS ROAD"
},
"Cityname_06": "RESTON",
"COUNTRYSUBENTITYDETAILS_07": {
"Countrysubentitynamecode_01": "VA",
"Codelistidentificationcode_02": "163",
"Codelistresponsibleagencycode_03": "5"
},
"Postalidentificationcode_08": "20190"
},
"ATT": [
{
"Attributefunctioncodequalifier_01": "2",
"ATTRIBUTEDETAIL_03": {
"Attributedescriptioncode_01": "M*M*M*M*M"
}
}
],
"DTM": [
{
"DATETIMEPERIOD_01": {
"Dateortimeorperiodfunctioncodequalifier_01": "329",
"Dateortimeorperiodtext_02": "19350919",
"Dateortimeorperiodformatcode_03": "102"
}
}
],
"EMP": [
{
"Employmentdetailscodequalifier_01": "4",
"QUALIFICATIONCLASSIFICATION_04": {
"Qualificationclassificationdescriptioncode_01": "1"
},
"Qualificationapplicationareacode_06": "8"
}
],
"NAT": [
{
"Nationalitycodequalifier_01": "2",
"NATIONALITYDETAILS_02": {
"Nationalitynamecode_01": "US",
"Codelistresponsibleagencycode_03": "5"
}
}
],
"DOCLoop": [
{
"DOC": {
"DOCUMENTMESSAGENAME_01": {
"Documentnamecode_01": "5K"
},
"DOCUMENTMESSAGEDETAILS_02": {
"Documentidentifier_01": "P100971204141"
}
},
"LOC": [
{
"Locationfunctioncodequalifier_01": "91",
"LOCATIONIDENTIFICATION_02": {
"Locationnamecode_01": "VA",
"Codelistidentificationcode_02": "163"
}
},
{
"Locationfunctioncodequalifier_01": "91",
"LOCATIONIDENTIFICATION_02": {
"Locationnamecode_01": "US",
"Codelistidentificationcode_02": "162"
}
}
]
},
{
"DOC": {
"DOCUMENTMESSAGENAME_01": {
"Documentnamecode_01": "39"
},
"DOCUMENTMESSAGEDETAILS_02": {
"Documentidentifier_01": "15504141"
}
},
"LOC": [
{
"Locationfunctioncodequalifier_01": "91",
"LOCATIONIDENTIFICATION_02": {
"Locationnamecode_01": "US",
"Codelistidentificationcode_02": "162"
}
}
]
}
]
}
],
"UNT": {
"NumberofSegmentsinaMessage_01": "16",
"MessageReferenceNumber_02": "PAXLST16"
}
}Parse and validate a PAXLST file
Read the file into typed objects with ediFabric .NET, or post it to the ediFabric Cloud REST API from any language and get JSON back.
using EdiFabric.Templates.EdifactD03B; License.SetSerial("YOUR_SERIAL_KEY"); using (var stream = File.OpenRead(@"C:\edi\PassengerList.txt")) using (var reader = new EdifactReader(stream, (unb, ung, unh) => typeof(TSPAXLST).GetTypeInfo())) { var items = await reader.ReadToEndAsync(); foreach (var transaction in items.OfType<TSPAXLST>()) { if (transaction.IsValid(out MessageErrorContext errors)) Console.WriteLine($"{transaction.UNH.MessageReferenceNumber_01} is valid"); else Console.WriteLine(string.Join(Environment.NewLine, errors.Flatten())); } }
curl -X POST 'https://api.edination.com/v2/edifact/read' \ -H 'Ocp-Apim-Subscription-Key: YOUR_SERIAL_KEY' \ -H 'Content-Type: application/octet-stream' \ --data-binary '@PassengerList.txt'
Generate a PAXLST file
Populate a TSPAXLST object in .NET, or post JSON in the shape shown above to ediFabric Cloud, and get a valid PAXLST file back.
using EdiFabric.Templates.EdifactD03B; License.SetSerial("YOUR_SERIAL_KEY"); var transaction = new TSPAXLST(); // Message header transaction.UNH = new UNH(); transaction.UNH.MessageReferenceNumber_01 = "0001"; transaction.UNH.MessageIdentifier_02 = new S009(); transaction.UNH.MessageIdentifier_02.MessageType_01 = "PAXLST"; transaction.UNH.MessageIdentifier_02.MessageVersionNumber_02 = "D"; transaction.UNH.MessageIdentifier_02.MessageReleaseNumber_03 = "03B"; transaction.UNH.MessageIdentifier_02.ControllingAgencyCoded_04 = "UN"; transaction.BGM = new BGM(); transaction.BGM.DOCUMENTMESSAGENAME_01 = new C002(); transaction.BGM.DOCUMENTMESSAGENAME_01.Documentnamecode_01 = "10"; transaction.BGM.DOCUMENTMESSAGEIDENTIFICATION_02 = new C106(); transaction.BGM.DOCUMENTMESSAGEIDENTIFICATION_02.Documentidentifier_01 = "LOCKKH04103101"; transaction.BGM.Messagefunctioncode_03 = "4"; transaction.RFF = new RFF(); transaction.RFF.REFERENCE_01 = new C506(); transaction.RFF.REFERENCE_01.Referencecodequalifier_01 = "RFA"; transaction.RFF.REFERENCE_01.Referenceidentifier_02 = "03"; // ... set the remaining loops and segments the same way // SegmentBuilders is in the Common project of the example repository using (var stream = new MemoryStream()) { using (var writer = new EdifactWriter(stream)) { writer.Write(SegmentBuilders.BuildUnb("1")); writer.Write(transaction); } Console.WriteLine(Encoding.UTF8.GetString(stream.ToArray())); }
# the JSON returned by /read, edited or produced by your application curl -X POST 'https://api.edination.com/v2/edifact/write' \ -H 'Ocp-Apim-Subscription-Key: YOUR_SERIAL_KEY' \ -H 'Content-Type: application/json' \ --data-binary '@PassengerList.json' \ -o 'PassengerList.txt'
Complete ediFabric .NET example
A complete C# program for the EDIFACT PAXLST, built on TSPAXLST in EdiFabric.Templates.Edifact. The same code is in the ediFabric .NET examples on GitHub.
using EdiFabric.Core.Model.Edi;
using EdiFabric.Framework.Readers;
using EdiFabric.Framework.Writers;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using EdiFabric.Core.Model.Edi.Edifact;
using EdiFabric.Templates.EdifactD03B;
using EdiFabric.Examples.EDIFACT.Common;
namespace EdiFabric.Examples.EDIFACT.PAXLST
{
class Program
{
static void Main(string[] args)
{
SerialKey.Set(Common.SerialKey.Get());
Read();
Write();
}
///
/// Read Passenger List
///
static void Read()
{
var ediStream = File.OpenRead(Directory.GetCurrentDirectory() + @"\..\..\..\Files\Edifact\PassengerList.txt");
List ediItems;
using (var ediReader = new EdifactReader(ediStream, "EdiFabric.Templates.Edifact"))
ediItems = ediReader.ReadToEnd().ToList();
var transactions = ediItems.OfType();
foreach (var transaction in transactions)
{
if (transaction.HasErrors)
{
// partially parsed
var errors = transaction.ErrorContext.Flatten();
}
}
}
///
/// Write Passenger List
///
static void Write()
{
var transaction = BuildPassengerList("PAXLST16");
using (var stream = new MemoryStream())
{
using (var writer = new EdifactWriter(stream))
{
writer.Write(SegmentBuilders.BuildUnb("1"));
writer.Write(SegmentBuilders.BuildUng("16", "PAXLST"));
writer.Write(transaction);
}
var ediString = stream.LoadToString();
}
}
///
/// Build passenger list.
/// Original from https://www.cbp.gov/sites/default/files/documents/paxlst_012_36_3.txt
///
static TSPAXLST BuildPassengerList(string controlNumber)
{
var result = new TSPAXLST();
// Message header
result.UNH = new UNH();
result.UNH.MessageReferenceNumber_01 = controlNumber.PadLeft(14, '0');
result.UNH.MessageIdentifier_02 = new S009();
result.UNH.MessageIdentifier_02.MessageType_01 = "PAXLST";
result.UNH.MessageIdentifier_02.MessageVersionNumber_02 = "D";
result.UNH.MessageIdentifier_02.MessageReleaseNumber_03 = "03B";
result.UNH.MessageIdentifier_02.ControllingAgencyCoded_04 = "UN";
result.BGM = new BGM();
result.BGM.DOCUMENTMESSAGENAME_01 = new C002();
result.BGM.DOCUMENTMESSAGENAME_01.Documentnamecode_01 = "10";
result.BGM.DOCUMENTMESSAGEIDENTIFICATION_02 = new C106();
result.BGM.DOCUMENTMESSAGEIDENTIFICATION_02.Documentidentifier_01 = "LOCKKH04103101";
result.BGM.Messagefunctioncode_03 = "4";
result.RFF = new RFF();
result.RFF.REFERENCE_01 = new C506();
result.RFF.REFERENCE_01.Referencecodequalifier_01 = "RFA";
result.RFF.REFERENCE_01.Referenceidentifier_02 = "03";
// Repeating TDT Groups
result.TDTLoop = new List();
// Begin TDT Group
var tdtLoop1 = new Loop_TDT_PAXLST();
tdtLoop1.TDT = new TDT();
tdtLoop1.TDT.Transportstagecodequalifier_01 = "11";
tdtLoop1.TDT.CARRIER_05 = new C040();
tdtLoop1.TDT.CARRIER_05.Carrieridentifier_01 = "LOCK";
tdtLoop1.TDT.CARRIER_05.Codelistidentificationcode_02 = "172";
tdtLoop1.DTM = new DTM();
tdtLoop1.DTM.DATETIMEPERIOD_01 = new C507();
tdtLoop1.DTM.DATETIMEPERIOD_01.Dateortimeorperiodfunctioncodequalifier_01 = "132";
tdtLoop1.DTM.DATETIMEPERIOD_01.Dateortimeorperiodtext_02 = "20041230";
tdtLoop1.DTM.DATETIMEPERIOD_01.Dateortimeorperiodformatcode_03 = "102";
// End TDT Group
result.TDTLoop.Add(tdtLoop1);
// Repeating RFF Groups
result.NADLoop2 = new List();
// Begin NAD Group 1
var nadLoop1 = new Loop_NAD_PAXLST_2();
nadLoop1.NAD = new NAD();
nadLoop1.NAD.Partyfunctioncodequalifier_01 = "VW";
nadLoop1.NAD.PARTYIDENTIFICATIONDETAILS_02 = new C082();
nadLoop1.NAD.PARTYIDENTIFICATIONDETAILS_02.Partyidentifier_01 = "0000041153";
nadLoop1.NAD.PARTYIDENTIFICATIONDETAILS_02.Codelistidentificationcode_02 = "109";
nadLoop1.NAD.PARTYNAME_04 = new C080();
nadLoop1.NAD.PARTYNAME_04.Partyname_01 = "AOMAD";
nadLoop1.NAD.PARTYNAME_04.Partyname_02 = "CHRIS";
nadLoop1.NAD.PARTYNAME_04.Partynameformatcode_06 = "1";
nadLoop1.NAD.STREET_05 = new C059();
nadLoop1.NAD.STREET_05.Streetandnumberorpostofficeboxidentifier_01 = "11107 SUNSET HILLS ROAD";
nadLoop1.NAD.Cityname_06 = "RESTON";
nadLoop1.NAD.COUNTRYSUBENTITYDETAILS_07 = new C819();
nadLoop1.NAD.COUNTRYSUBENTITYDETAILS_07.Countrysubentitynamecode_01 = "VA";
nadLoop1.NAD.COUNTRYSUBENTITYDETAILS_07.Codelistidentificationcode_02 = "163";
nadLoop1.NAD.COUNTRYSUBENTITYDETAILS_07.Codelistresponsibleagencycode_03 = "5";
nadLoop1.NAD.Postalidentificationcode_08 = "20190";
// Repeating ATT
nadLoop1.ATT = new List();
var attNad1 = new ATT();
attNad1.Attributefunctioncodequalifier_01 = "2";
attNad1.ATTRIBUTEDETAIL_03 = new List();
var c9561 = new C956();
c9561.Attributedescriptioncode_01 = "M";
attNad1.ATTRIBUTEDETAIL_03.Add(c9561);
var c9562 = new C956();
c9562.Attributedescriptioncode_01 = "M";
attNad1.ATTRIBUTEDETAIL_03.Add(c9562);
var c9563 = new C956();
c9563.Attributedescriptioncode_01 = "M";
attNad1.ATTRIBUTEDETAIL_03.Add(c9563);
var c9564 = new C956();
c9564.Attributedescriptioncode_01 = "M";
attNad1.ATTRIBUTEDETAIL_03.Add(c9564);
var c9565 = new C956();
c9565.Attributedescriptioncode_01 = "M";
attNad1.ATTRIBUTEDETAIL_03.Add(c9565);
nadLoop1.ATT.Add(attNad1);
// Repeating DTM
nadLoop1.DTM = new List();
var dtmNad1 = new DTM();
dtmNad1.DATETIMEPERIOD_01 = new C507();
dtmNad1.DATETIMEPERIOD_01.Dateortimeorperiodfunctioncodequalifier_01 = "329";
dtmNad1.DATETIMEPERIOD_01.Dateortimeorperiodtext_02 = "19350919";
dtmNad1.DATETIMEPERIOD_01.Dateortimeorperiodformatcode_03 = "102";
nadLoop1.DTM.Add(dtmNad1);
// Repeating EMP
nadLoop1.EMP = new List();
var empNad1 = new EMP();
empNad1.Employmentdetailscodequalifier_01 = "4";
empNad1.QUALIFICATIONCLASSIFICATION_04 = new C950();
empNad1.QUALIFICATIONCLASSIFICATION_04.Qualificationclassificationdescriptioncode_01 = "1";
empNad1.Qualificationapplicationareacode_06 = "8";
nadLoop1.EMP.Add(empNad1);
// Repeating NAT
nadLoop1.NAT = new List();
var natNad1 = new NAT();
natNad1.Nationalitycodequalifier_01 = "2";
natNad1.NATIONALITYDETAILS_02 = new C042();
natNad1.NATIONALITYDETAILS_02.Nationalitynamecode_01 = "US";
natNad1.NATIONALITYDETAILS_02.Codelistresponsibleagencycode_03 = "5";
nadLoop1.NAT.Add(natNad1);
// Repeating DOC NAD Groups
nadLoop1.DOCLoop = new List();
// Begin DOC NAD Group 1
var docNad1 = new Loop_DOC_PAXLST();
docNad1.DOC = new DOC();
docNad1.DOC.DOCUMENTMESSAGENAME_01 = new C002();
docNad1.DOC.DOCUMENTMESSAGENAME_01.Documentnamecode_01 = "5K";
docNad1.DOC.DOCUMENTMESSAGEDETAILS_02 = new C503();
docNad1.DOC.DOCUMENTMESSAGEDETAILS_02.Documentidentifier_01 = "P100971204141";
docNad1.LOC = new List();
var locDoc1 = new LOC();
locDoc1.Locationfunctioncodequalifier_01 = "91";
locDoc1.LOCATIONIDENTIFICATION_02 = new C517();
locDoc1.LOCATIONIDENTIFICATION_02.Locationnamecode_01 = "VA";
locDoc1.LOCATIONIDENTIFICATION_02.Codelistidentificationcode_02 = "163";
docNad1.LOC.Add(locDoc1);
var locDoc2 = new LOC();
locDoc2.Locationfunctioncodequalifier_01 = "91";
locDoc2.LOCATIONIDENTIFICATION_02 = new C517();
locDoc2.LOCATIONIDENTIFICATION_02.Locationnamecode_01 = "US";
locDoc2.LOCATIONIDENTIFICATION_02.Codelistidentificationcode_02 = "162";
docNad1.LOC.Add(locDoc2);
// End DOC NAD Group 1
nadLoop1.DOCLoop.Add(docNad1);
// Begin DOC NAD Group 2
var docNad2 = new Loop_DOC_PAXLST();
docNad2.DOC = new DOC();
docNad2.DOC.DOCUMENTMESSAGENAME_01 = new C002();
docNad2.DOC.DOCUMENTMESSAGENAME_01.Documentnamecode_01 = "39";
docNad2.DOC.DOCUMENTMESSAGEDETAILS_02 = new C503();
docNad2.DOC.DOCUMENTMESSAGEDETAILS_02.Documentidentifier_01 = "15504141";
docNad2.LOC = new List();
var locDoc3 = new LOC();
locDoc3.Locationfunctioncodequalifier_01 = "91";
locDoc3.LOCATIONIDENTIFICATION_02 = new C517();
locDoc3.LOCATIONIDENTIFICATION_02.Locationnamecode_01 = "US";
locDoc3.LOCATIONIDENTIFICATION_02.Codelistidentificationcode_02 = "162";
docNad2.LOC.Add(locDoc3);
// End DOC NAD Group 2
nadLoop1.DOCLoop.Add(docNad2);
// End NAD Group 1
result.NADLoop2.Add(nadLoop1);
return result;
}
}
}More operations in ediFabric .NET
- Parse EDIFACT files
- Generate EDIFACT files
- Validate EDIFACT messages
- Generate EDIFACT acknowledgments
- Save EDIFACT files to DB
- Convert between EDIFACT and JSON
- Convert between EDIFACT and XML
Template and sample downloads
ediFabric .NET parses, validates and generates the EDIFACT PAXLST with TSPAXLST in EdiFabric.Templates.Edifact. The template ships in the NuGet package; download the source to adapt it to a trading partner's implementation guide.
- EF_EDIFACT_D03B_Codes.cs 288 bytes
- EF_EDIFACT_D03B_ComplexElements.cs 51.2 KB
- EF_EDIFACT_D03B_PAXLST.cs 7.9 KB
- EF_EDIFACT_D03B_Segments.cs 27.8 KB
PAXLST questions
What is API?
Advance passenger information: identity and travel document data collected at check-in and sent to the destination country before arrival.
Is PAXLST used for crew lists too?
Yes. The same message carries crew manifests, identified by the BGM document code.
How is PAXLST different from PNRGOV?
PAXLST carries identity and document data. PNRGOV carries reservation data from the airline's system.
How do I parse and generate EDIFACT PAXLST files in .NET?
In .NET, install EdiFabric and EdiFabric.Templates.Edifact, read the file with EdifactReader into TSPAXLST objects and write them back with EdifactWriter. From any other language, post the file to the ediFabric Cloud REST API, which returns the same structure as JSON and converts JSON back to EDIFACT.
Resources
Parse your first EDIFACT PAXLST in five minutes
The Community plan is free forever and needs no credit card. It includes ediFabric .NET, Native and Cloud with one serial key.
Sign up free Validate EDI files free