Skip to main content

Add bags & extras (JSON)

Ancillary services (a checked bag here) can be bought at two moments, with the same mechanics — list priced service offer items, then reference the chosen one:

  • On an existing order — service list for the order, then a change-order accept (below).
  • During the initial booking — service list for the priced offer, then include the item in create order (further down).

The order flow continues from Make a test booking — you need a confirmed order and a valid token. Every request and response was captured live against the test environment.

Step 1 — List the available services

POST /json/v2/orders/MX7NDN465E71/services

The body is an empty object:

Request
{}

The response lists every purchasable service — bags, Wi-Fi, priority boarding, and special-service requests — with per-passenger pricing per journey or segment. The offerItemId (prefixed OFI-SR-) is what you accept in step 2.

Response — 201 Created (trimmed to two services)
{
"data": {
"services": [
{
"ssrCode": "WIFI",
"name": "Wifi",
"type": "Other",
"feeCode": "WIFI",
"segmentAvailability": [
{
"scope": "journey",
"journeyRefId": "JOU-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA",
"passengerPricing": [
{
"paxRefId": "ADT-1",
"passengerType": "ADT",
"amount": 8,
"currency": "USD",
"offerItemId": "OFI-SR-SnwxfFBWVVNOQXwyMDI2MDkxNXxNWDE2NDR8T3RoZXJ8QURULTF8V0lGSQ"
}
]
}
]
},
{
"ssrCode": "CB1",
"name": "Checked Bag 1",
"type": "Baggage",
"feeCode": "CB1",
"segmentAvailability": [
{
"scope": "journey",
"journeyRefId": "JOU-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA",
"passengerPricing": [
{
"paxRefId": "ADT-1",
"passengerType": "ADT",
"amount": 35,
"currency": "USD",
"offerItemId": "OFI-SR-SnwxfFBWVVNOQXwyMDI2MDkxNXxNWDE2NDR8QmFnZ2FnZXxBRFQtMXxDQjE"
}
]
}
]
}
// … CB2, CB3, COB (carry-on), priority boarding, wheelchair SSRs, … elided …
]
},
"error": null
}

We'll buy the first checked bag, CB1 at $35.

Bags are a ladder

Checked bags are tiered per passenger per journey: CB1 is the first bag, CB2 the second, CB3 the third. Buy them in order — accepting CB2 while the passenger holds no CB1 on that journey is rejected.

Step 2 — Accept the service offer

PATCH /json/v2/orders/MX7NDN465E71

Same AcceptOffer change as adding a seat, without the seat block. The offerId field is required by the schema but not resolved for a-la-carte items — pass the constant OF-ANC.

Request
{
"changes": [
{
"type": "AcceptOffer",
"offerItems": [
{
"offerId": "OF-ANC",
"offerItemId": "OFI-SR-SnwxfFBWVVNOQXwyMDI2MDkxNXxNWDE2NDR8QmFnZ2FnZXxBRFQtMXxDQjE",
"passengerIds": ["ADT-1"]
}
]
}
],
"payment": {
"type": "CreditCard",
"cardType": "VI",
"cardNumber": "4111111111111111",
"expiryDate": "1227",
"securityCode": "123",
"payer": {
"name": { "givenName": "Jane", "surname": "Doe" },
"postalAddress": {
"line1": "123 Main St",
"city": "Los Angeles",
"stateProvince": "California",
"postalCode": "90210",
"countryCode": "US"
}
}
}
}

The bag joins services as a confirmed item; the order (which already had a $14 seat from the previous walkthrough) totals $108 with a third payment:

Response — 200 OK (trimmed)
{
"data": {
"order": {
"orderId": "MX7NDN465E71",
"statusCode": "CONFIRMED",
"balanceDue": { "amount": 0, "currency": "USD" },
"totalPrice": {
"total": { "amount": 108, "currency": "USD" }
// … base and taxes elided …
}
},
"services": [
{ "code": "SEAT", "name": "24D", "statusCode": "CONFIRMED" /* … */ },
{
"itemId": "OOI-SR-U3xQVlVTTkF8MjAyNjA5MTV8TVgxNjQ0fFBBWC1RVVJVTFRFfENCMQ",
"code": "CB1",
"name": "CB1",
"category": "service",
"statusCode": "CONFIRMED",
"totalPrice": {
"total": { "amount": 35, "currency": "USD" },
"base": { "amount": 0, "currency": "USD" },
"taxes": [],
"fees": [
{ "type": "ServiceFee", "code": "CB1", "amount": { "amount": 35, "currency": "USD" } }
]
},
"paxRefId": "ADT-1",
"segmentRefIds": ["SEG-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA"]
}
],
"payments": [
{ "amount": { "amount": 59, "currency": "USD" }, "statusCode": "SUCCESSFUL" },
{ "amount": { "amount": 14, "currency": "USD" }, "statusCode": "SUCCESSFUL" },
{ "amount": { "amount": 35, "currency": "USD" }, "statusCode": "PENDING" }
]
// … pax, contacts, journeys elided …
},
"error": null
}

A payment may read PENDING right after the change; retrieve the order and it flips to SUCCESSFUL.

Adding a bag during the initial booking

The same service list exists for a priced offer, before any order — so a booking can be created with its bags in one shot.

1. List services for the priced offer (after price offer, before create):

POST /json/v2/offers/OF-3f2f49c5-e560-4f0e-b37c-b80cb8c8cd27/services
Request
{
"offerItemIds": ["OFI-3f2f49c5-e560-4f0e-b37c-b80cb8c8cd27-0"],
"passengers": [
{ "paxId": "ADT-1", "type": "ADT" }
]
}
Pass passengers with stable paxIds

Service offer item IDs are scoped to a passenger, so the passengers here need paxId values. If the offer was priced with anonymous passengers ({"type": "ADT"} only) and you omit passengers in this call, the request fails with ERR-1005 ("Service price is missing stable PaxID"). Use ADT-1, ADT-2, … and keep the same IDs in create order.

The response is the same services shape as the order-scoped call above — capture the chosen offerItemId (OFI-SR-…).

2. Include the service item in create order. Add it to offerItemIds and offerItemSelections next to the fare item, and pay the combined total ($59 fare + $35 bag):

Request — POST /json/v2/orders (trimmed)
{
"offerId": "OF-3f2f49c5-e560-4f0e-b37c-b80cb8c8cd27",
"offerItemIds": [
"OFI-3f2f49c5-e560-4f0e-b37c-b80cb8c8cd27-0",
"OFI-SR-SnwxfFBWVVNOQXwyMDI2MDkxNXxNWDE2NDR8QmFnZ2FnZXxBRFQtMXxDQjE"
],
"offerItemSelections": [
{ "offerItemId": "OFI-3f2f49c5-e560-4f0e-b37c-b80cb8c8cd27-0", "passengerIds": ["ADT-1"] },
{ "offerItemId": "OFI-SR-SnwxfFBWVVNOQXwyMDI2MDkxNXxNWDE2NDR8QmFnZ2FnZXxBRFQtMXxDQjE", "passengerIds": ["ADT-1"] }
],
"passengers": [
{
"passengerId": "ADT-1",
"type": "ADT",
"name": { "givenName": "Sara", "surname": "Doe" },
"dateOfBirth": "1980-01-01",
"gender": "Female"
}
]
// … contacts and payment exactly as in Make a test booking …
}

The passengerId on a service selection must match the paxRefId the service was priced for. Seat and service items combine freely in one create — this capture booked fare + seat + bag together for a $108 order, everything CONFIRMED from the start.

Notes

  • You can accept several offer items atn once. Put multiple entries in offerItems and pay the combined balance.
  • Duplicate services are rejected by the reservation system (one WIFI per passenger per journey, one CB1, and so on). The failed change will surface; re-query the service list before retrying.

Full schema reference: order ancillaries and change order.