Карта мест (Seat Map)#
Получение карты мест воздушного судна для одного или нескольких сегментов рейса.
Описание#
Эндпоинт: POST /api/avia/seat_map
Возвращает схему салона: компоновку рядов и мест по сегментам, статус каждого места (свободно/занято), его характеристики (окно, проход, аварийный выход и т. п.) и — если место платное — цену по типам пассажиров.
Запрос должен содержать ровно один из двух контекстов:
offer— карта мест по предложению из поиска, до создания бронирования;booking— карта мест по уже существующему PNR, послеpnr_create.
Валидатор отклоняет запрос, если передать оба контекста одновременно либо не передать ни одного. Внутри offer поля segRefId и pax не могут быть пустыми массивами; внутри booking поле segRefId также не может быть пустым.
Результат запроса кэшируется на стороне API примерно на 5 минут и используется последующим вызовом /api/avia/seat_book для определения цены выбранного места.
Использование#
Сценарий до бронирования#
- Выполните поиск через
/api/avia/searchи получитеsearchIdиofferItemId - Соберите список пассажиров (
pax[].id,pax[].type) — те же идентификаторы, что позже пойдут вpassengers[].idзапросаpnr_create - Запросите карту мест, передав
offer: {segRefId, searchId, offerItemId, pax} - Покажите пользователю схему салона и статусы мест
- Передайте выбранные места в поле
seatsзапроса Создание PNR
Сценарий после бронирования#
- Создайте бронирование через
/api/avia/pnr_createи получитеbookingId - Запросите карту мест, передав
booking: {id, segRefId}, гдеsegRefId— идентификаторы сегментов изitinerary[].segments[].idответаpnr_retrieve - Покажите пользователю схему салона и статусы мест
- Забронируйте выбранные места через Бронирование мест
Базовый пример#
Минимальный запрос карты мест по предложению поиска (рейс Москва (MOW) — Санкт-Петербург (LED)):
1{
2 "offer": {
3 "segRefId": ["5b6c7d8e-9f0a-41b2-8c3d-4e5f60718293"],
4 "searchId": "AAF6301E87DD7C73E7A8A636FDC77ED5",
5 "offerItemId": "DAB32144B940FCC65CC85E9BCE682346",
6 "pax": [
7 { "id": "P1", "type": "adt" }
8 ]
9 }
10}Ответ содержит карту мест по запрошенному сегменту:
1{
2 "seatMaps": [
3 {
4 "segRefId": "5b6c7d8e-9f0a-41b2-8c3d-4e5f60718293",
5 "equipment": "320",
6 "cabinCompartments": [
7 {
8 "columns": ["A", "B", "C", "D", "E", "F"],
9 "rows": [
10 {
11 "number": 12,
12 "seats": [
13 { "column": "A", "status": "f" },
14 { "column": "B", "status": "f" },
15 { "column": "C", "status": "o" },
16 { "column": "D", "status": "f" },
17 { "column": "E", "status": "o" },
18 { "column": "F", "status": "f" }
19 ]
20 }
21 ]
22 }
23 ]
24 }
25 ]
26}Детальная документация#
- Параметры запроса — описание параметров запроса
- Структура ответа — детальное описание структуры ответа
Типичные ошибки#
| Код ошибки | Причина | Решение |
|---|---|---|
OFFER_NOT_FOUND | Предложение (offer) истекло или не найдено в кэше | Выполните новый поиск / offer_price и повторите запрос |
BOOKING_NOT_FOUND | Бронирование (booking.id) не найдено либо принадлежит другому клиенту | Проверьте booking.id |
SEAT_INVALID_REQUEST | Нарушен формат запроса: не передан ни один из offer/booking, переданы оба, либо segRefId/pax пусты | HTTP 400. Передайте ровно один из контекстов с непустыми обязательными полями |
VALIDATION_ERROR | Прочие нарушения формата запроса | HTTP 400. Проверьте обязательные поля |
Связанные операции#
- Поиск билетов — источник
searchId/offerItemIdдля контекстаoffer - Создание PNR — источник
bookingIdдля контекстаbooking; полеseatsпринимает выбранные места - Получение PNR — источник идентификаторов
passengers[].idиitinerary[].segments[].id, а также итоговых статусов мест (pnr.seats[]) - Бронирование мест — бронирование мест из полученной карты в существующем PNR