Seat Maps

Seat maps are used to build a rich experience for your customers so they can select a seat as part of an order.

A seat map includes the data for rendering seats in the relevant cabins, along with their total cost and other information such as disclosures.

A seat is a special kind of service in that they're not shown when getting an individual offer with return_available_services set to true. They're only available through this endpoint.

So far we support selecting seats when you create an order. This means we do not support selecting a seat after an order has already been created or cancelling a booked seat.

Display recommendations

Widths

Each seat, empty, and bassinet element should be displayed with the same static width, while other elements should ideally fill or shrink in the available space in the section. However, displaying them with a static width could also be appropriate.

If these elements don't fill the whole section, they should be displayed as middle-aligned by default.

Seat identifiers

We recommend showing seat letters on each seat, instead of creating a header row with letters for each column.

Seat maps themselves don't have columns per se.

There won't always be aligned columns of seats with the same letter in the seat map when seat rows have different numbers of seats.

For example, if there is one less seat in a row, the remaining seats may be shifted by half a seat and not aligning with any regular "column":

A B
A

In addition, if there is less seats in a section, the letters of the window and aisle seats will always be preserved throughout the cabin. This can lead to the following seat map:

A B C
A C
cabins
list
required

The list of cabins in this seat map.

Cabins are ordered by deck from lowest to highest, and then within each deck from the front to back of the aircraft.

id
string
required

Duffel's unique identifier for the seat map

Example: "sea_00003hthlsHZ8W4LxXjkzo"
segment_id
string
required

Duffel's unique identifier for the segment. It identifies the segment of an offer (i.e. the same segment across offers will have different ids).

Example: "seg_00009htYpSCXrwaB9Dn456"
slice_id
string
required

Duffel's unique identifier for the slice. It identifies the slice of an offer (i.e. the same slice across offers will have different ids.)

Example: "sli_00009htYpSCXrwaB9Dn123"

Gets seat maps by specific parameters. At the moment we only support querying by an offer ID.

A list of seat maps, one per segment, will be returned, which you can use to build a seat selection UI for your customers. This is not available for all airlines or flights, so seat maps will not always be returned.

If there are one or more passengers, you do not have to select a seat for each one. Each passenger can only select one seat per segment. Two passengers cannot select the same seat.

As with other services when creating an order, the total amount charged will be the cost of the offer and any selected services.

Query Parameters

offer_id
string
required

Duffel's unique identifier for the offer

Example: "off_00009htYpSCXrwaB9DnUm0"

Endpoint

GET https://api.duffel.com/air/seat_maps

Request

curl -X GET --compressed "https://api.duffel.com/air/seat_maps?offer_id=off_00009htYpSCXrwaB9DnUm0" \
-H "Accept-Encoding: gzip" \
-H "Accept: application/json" \
-H "Duffel-Version: beta" \
-H "Authorization: Bearer <YOUR_ACCESS_TOKEN>"

Response

{
"data": [
{
"cabins": [
{
"aisles": 2,
"cabin_class": "economy",
"deck": 0,
"rows": [
{
"sections": [
{
"elements": [
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA1A",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "30.00",
"total_currency": "GBP"
}
],
"designator": "1A",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA1B",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "30.00",
"total_currency": "GBP"
}
],
"designator": "1B",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA1C",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "30.00",
"total_currency": "GBP"
}
],
"designator": "1C",
"disclosures": [],
"name": "",
"type": "seat"
}
]
},
{
"elements": [
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA1D",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "30.00",
"total_currency": "GBP"
}
],
"designator": "1D",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA1E",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "30.00",
"total_currency": "GBP"
}
],
"designator": "1E",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [],
"designator": "1F",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [],
"designator": "1G",
"disclosures": [],
"name": "",
"type": "seat"
}
]
},
{
"elements": [
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA1J",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "30.00",
"total_currency": "GBP"
}
],
"designator": "1H",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA1K",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "30.00",
"total_currency": "GBP"
}
],
"designator": "1J",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA1K",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "30.00",
"total_currency": "GBP"
}
],
"designator": "1K",
"disclosures": [],
"name": "",
"type": "seat"
}
]
}
]
},
{
"sections": [
{
"elements": [
{
"type": "exit_row"
}
]
},
{
"elements": []
},
{
"elements": [
{
"type": "exit_row"
}
]
}
]
},
{
"sections": [
{
"elements": [
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA2A",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "20.00",
"total_currency": "GBP"
}
],
"designator": "2A",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA2B",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "20.00",
"total_currency": "GBP"
}
],
"designator": "2B",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA2C",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "20.00",
"total_currency": "GBP"
}
],
"designator": "2C",
"disclosures": [],
"name": "",
"type": "seat"
}
]
},
{
"elements": [
{
"available_services": [],
"designator": "2D",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [],
"designator": "2E",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA2F",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "20.00",
"total_currency": "GBP"
}
],
"designator": "2F",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA2G",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "20.00",
"total_currency": "GBP"
}
],
"designator": "2G",
"disclosures": [],
"name": "",
"type": "seat"
}
]
},
{
"elements": [
{
"available_services": [],
"designator": "2H",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA2J",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "20.00",
"total_currency": "GBP"
}
],
"designator": "2J",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA2K",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "20.00",
"total_currency": "GBP"
}
],
"designator": "2K",
"disclosures": [],
"name": "",
"type": "seat"
}
]
}
]
},
{
"sections": [
{
"elements": [
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA3A",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "10.00",
"total_currency": "GBP"
}
],
"designator": "3A",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [],
"designator": "3B",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA3C",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "10.00",
"total_currency": "GBP"
}
],
"designator": "3C",
"disclosures": [],
"name": "",
"type": "seat"
}
]
},
{
"elements": [
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA3D",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "10.00",
"total_currency": "GBP"
}
],
"designator": "3D",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA3E",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "10.00",
"total_currency": "GBP"
}
],
"designator": "3E",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA3F",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "10.00",
"total_currency": "GBP"
}
],
"designator": "3F",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [],
"designator": "3G",
"disclosures": [],
"name": "",
"type": "seat"
}
]
},
{
"elements": [
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA3H",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "10.00",
"total_currency": "GBP"
}
],
"designator": "3H",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA3J",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "10.00",
"total_currency": "GBP"
}
],
"designator": "3J",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA3K",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "10.00",
"total_currency": "GBP"
}
],
"designator": "3K",
"disclosures": [],
"name": "",
"type": "seat"
}
]
}
]
},
{
"sections": [
{
"elements": [
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA4A",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "10.00",
"total_currency": "GBP"
}
],
"designator": "4A",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA4B",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "10.00",
"total_currency": "GBP"
}
],
"designator": "4B",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA4C",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "10.00",
"total_currency": "GBP"
}
],
"designator": "4C",
"disclosures": [],
"name": "",
"type": "seat"
}
]
},
{
"elements": [
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA4D",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "10.00",
"total_currency": "GBP"
}
],
"designator": "4D",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA4E",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "10.00",
"total_currency": "GBP"
}
],
"designator": "4E",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA4F",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "10.00",
"total_currency": "GBP"
}
],
"designator": "4F",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA4G",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "10.00",
"total_currency": "GBP"
}
],
"designator": "4G",
"disclosures": [],
"name": "",
"type": "seat"
}
]
},
{
"elements": [
{
"available_services": [],
"designator": "4H",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [],
"designator": "4J",
"disclosures": [],
"name": "",
"type": "seat"
},
{
"available_services": [
{
"id": "ase_00009UhD4ongolulWAAA4K",
"passenger_id": "pas_00009hj8USM7Ncg31cAAA",
"total_amount": "10.00",
"total_currency": "GBP"
}
],
"designator": "4K",
"disclosures": [],
"name": "",
"type": "seat"
}
]
}
]
},
{
"sections": [
{
"elements": [
{
"type": "lavatory"
}
]
},
{
"elements": []
},
{
"elements": [
{
"type": "lavatory"
}
]
}
]
},
{
"sections": [
{
"elements": [
{
"type": "galley"
}
]
},
{
"elements": [
{
"type": "galley"
}
]
},
{
"elements": [
{
"type": "galley"
}
]
}
]
}
],
"wings": {
"first_row_index": 1,
"last_row_index": 2
}
}
],
"id": "sea_00003hthlsHZ8W4LxXjkzo",
"segment_id": "seg_00009htYpSCXrwaB9Dn456",
"slice_id": "sli_00009htYpSCXrwaB9Dn123"
}
]
}