Add Seats and Ancillaries
Open airline seat maps, queue and commit seat assignments, auto-select by fare and position, and add bags, services, SSRs, and loyalty numbers.
Seat maps
The seat map is the airline's live map for your itinerary — real occupancy, exact prices per seat, and the carrier's own product names for paid zones and seat products:
$MAP # Seat map for the current segment
$MAP1 # Seat map for segment 1

$MAP: the carrier's live seat map — free, priced, and occupied seats as the airline reports them.Assign and remove seats
$P1/12A # Seat 12A for passenger 1
$P2/14C # Seat 14C for passenger 2
$P1/X # Remove passenger 1's seat
The habit to build: seat selections queue — they don't fire. Each $P1/12A is local until you commit with ER, which sends every queued assignment to the airline in one change. Queue all the seats, then one ER. If you change your mind before committing, IR abandons the queue and re-retrieves the order untouched.
Auto-selection: the $AUTO family
$AUTO picks seats from the currently loaded seat map instead of you naming a seat number — it survives occupancy changes and cabins that differ per aircraft:
$AUTO # Front-most free seat for every passenger
$P1/AUTO # Front-most free seat, passenger 1 only
$AUTO/PAID # Cheapest priced seat, every passenger
$P1/AUTO/EXIT/AISLE # Exit-row aisle seat for passenger 1
$AUTO/PAID/S2 # Paid seats from segment 2's already-loaded map
Qualifiers narrow the pick along four independent axes, and you may use at most one qualifier per axis (WINDOW plus AISLE together is a parse error):
- Fare —
PAID(any priced seat, cheapest first, ranked by price) orFREE(the default) - Column —
WINDOW,AISLE, orMIDDLE - Zone —
FRONT,CENTER, orBACK - Flag —
EXITto restrict to exit rows
Across axes they compose freely: $AUTO/PAID/WINDOW is the cheapest priced window seat. If nothing matches, the error names the qualifiers it couldn't satisfy and points you back to $MAP — a bare $AUTO in an all-paid cabin reports the cheapest paid option rather than silently attaching a charge.
If you knew $PREF: it's been removed, with no replacement — it keyed on a carrier "preferred" code that means different things on different airlines. PAID, which ranks by actual price, is the reliable substitute.
Bags and services
The + prefix adds ancillaries directly:
+BAG1/25KG # One 25kg bag, last passenger added
+P1/BAG1/25KG # One 25kg bag for passenger 1
+P1/LOUNGE # Lounge access for passenger 1
For everything the airline actually sells on your itinerary, ask for the catalog:
SERVICES # The airline's full service catalog, numbered rows
SERVICES/3 # Purchase catalog row 3 — one row is one pax/segment item
SERVICES/P1/3 # Row 3 of passenger 1's scoped list
SERVICES/12/48/60 # Several rows in one command, by the unscoped numbers
Rows are numbered per passenger and per segment — buying "the same bag" for three passengers is three rows. The multi-index form batches them in one command using the numbers from the unscoped list; a scope prefix with multiple numbers is rejected as ambiguous. Batch support varies by airline — where the carrier can't take a batch, the command fails cleanly and you add rows one at a time. The catalog is single-use: after a purchase (or a partial batch failure), re-run SERVICES before buying more.
SSRs
SSRs use the ! prefix, and the passenger target is always required — an SSR never defaults to anyone:
!P1/VGML # Vegetarian meal, passenger 1
!P2/WCHR # Wheelchair, passenger 2
!P1/S2/WCHR # Wheelchair for P1, segment 2 only
The codes are the IATA codes you already know. System-managed codes (ticket numbers, infant associations) are set by NDCTerm itself and rejected as manual entries.
Loyalty numbers
The % prefix files frequent-flyer numbers against a passenger:
%P1/UA/123456789 # P1's United loyalty number
%AA/987654321 # Last passenger's American loyalty number
Enter loyalty before pricing whenever it can affect eligibility or price. On a direct booking it travels with the same passenger through shopping, pricing, and order creation. If you add or replace a number after offers already exist, NDCTerm keeps the selected flights but clears the stale offers and tells you to run WP again.
Loyalty belongs to the passenger's whole itinerary. Older carrier, segment, and alliance suffixes are accepted for compatibility, but they do not create a narrower airline-side scope; the confirmation message says that explicitly. Use one correct account per passenger and program rather than relying on a suffix to limit where it is filed.
Paying for what you added
Free items confirm at commit. Anything priced — paid seats, bags, catalog services — becomes a pending EMD on the order when you commit with ER, and an EMD is a document: it must be issued and paid before it's settled. The pending items land in the same numbered cart as flight tickets, and the same ISSUE command settles them — see Issue and Verify Tickets for the cart, forms of payment, and how to verify the EMD numbers landed on the order.