Карта мест (Seat Map)#

Получение карты мест воздушного судна для одного или нескольких сегментов рейса.

Описание#

Эндпоинт: POST /api/avia/seat_map

Возвращает схему салона: компоновку рядов и мест по сегментам, статус каждого места (свободно/занято), его характеристики (окно, проход, аварийный выход и т. п.) и — если место платное — цену по типам пассажиров.

Запрос должен содержать ровно один из двух контекстов:

  • offer — карта мест по предложению из поиска, до создания бронирования;
  • booking — карта мест по уже существующему PNR, после pnr_create.

Валидатор отклоняет запрос, если передать оба контекста одновременно либо не передать ни одного. Внутри offer поля segRefId и pax не могут быть пустыми массивами; внутри booking поле segRefId также не может быть пустым.

Результат запроса кэшируется на стороне API примерно на 5 минут и используется последующим вызовом /api/avia/seat_book для определения цены выбранного места.

Использование#

Сценарий до бронирования#

  1. Выполните поиск через /api/avia/search и получите searchId и offerItemId
  2. Соберите список пассажиров (pax[].id, pax[].type) — те же идентификаторы, что позже пойдут в passengers[].id запроса pnr_create
  3. Запросите карту мест, передав offer: {segRefId, searchId, offerItemId, pax}
  4. Покажите пользователю схему салона и статусы мест
  5. Передайте выбранные места в поле seats запроса Создание PNR

Сценарий после бронирования#

  1. Создайте бронирование через /api/avia/pnr_create и получите bookingId
  2. Запросите карту мест, передав booking: {id, segRefId}, где segRefId — идентификаторы сегментов из itinerary[].segments[].id ответа pnr_retrieve
  3. Покажите пользователю схему салона и статусы мест
  4. Забронируйте выбранные места через Бронирование мест

Базовый пример#

Минимальный запрос карты мест по предложению поиска (рейс Москва (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