Расчет обмена билета#

Предварительный расчет стоимости и вариантов обмена билета на новый маршрут или даты.

Описание#

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

Операция расчета обмена позволяет получить доступные варианты обмена билета с полным расчетом стоимости до выполнения фактического обмена. Это позволяет пользователю увидеть все варианты, доплату и условия до принятия окончательного решения.

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

Используйте этот запрос для получения вариантов обмена билета перед фактическим обменом через /api/avia/ticket_exchange.

Основной сценарий#

sequenceDiagram
    participant Client
    participant API

    Client->>API: POST /api/avia/ticket_exchange_calculation<br/>{bookingId, ticketNumber, legs}
    API-->>Client: exchangeId + offers[]<br/>(варианты с расчетом стоимости)

    Note over Client: Выбор варианта<br/>(получение offerItemId)

    Client->>API: POST /api/avia/ticket_exchange<br/>{exchangeId, offerItemId, ...}
    API-->>Client: tickets[]<br/>(новые билеты)

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

Минимальный запрос для расчета обмена билета:

 1{
 2  "bookingId": "019a0be6-dbe9-7108-bb7b-fbd181c3fbf6",
 3  "ticketNumber": "425-6170037037",
 4  "legs": [
 5    {
 6      "segments": [
 7        {
 8          "flight": {
 9            "carrierCode": "DP",
10            "flightNumber": "6841"
11          },
12          "origin": {
13            "code": "SVO",
14            "codeType": "iata",
15            "type": "airport"
16          },
17          "destination": {
18            "code": "KZN",
19            "codeType": "iata",
20            "type": "airport"
21          },
22          "departureAt": "2025-11-29T07:40:00",
23          "arrivalAt": "2025-11-29T09:20:00",
24          "fareBasis": "P",
25          "originalSegmentId": "79eeae5c-5ba4-4660-9d80-6ceba1023aa3"
26        }
27      ]
28    }
29  ]
30}

Успешный ответ с вариантами обмена:

 1{
 2  "exchangeId": "019a0ce6-2633-787f-a6bc-5dbddc02cc1f",
 3  "offers": [
 4    {
 5      "legs": [
 6        {
 7          "segments": [
 8            {
 9              "key": "NLc0EJEsw0GJer9QRFb4Sg",
10              "flightKey": "DP6841SVO-KZN291120250740",
11              "technicalStopsDetails": [],
12              "technicalStops": 0
13            }
14          ],
15          "duration": "01:40:00"
16        }
17      ],
18      "offerItems": [
19        {
20          "offerItemId": "offer-item-1",
21          "forExchange": {
22            "currencyCode": "RUB",
23            "value": 5000
24          },
25          "fare": {
26            "currencyCode": "RUB",
27            "value": 0
28          },
29          "taxes": {
30            "currencyCode": "RUB",
31            "value": 100
32          },
33          "exchangeDetails": {
34            "adt": {
35              "fare": {
36                "currencyCode": "RUB",
37                "value": 0
38              },
39              "faresInfo": [
40                {
41                  "fareBasis": "PAD",
42                  "segmentKeys": ["NLc0EJEsw0GJer9QRFb4Sg"],
43                  "cabinType": "economy",
44                  "class": "P",
45                  "fareFamilyKey": "DP_ВЫГОДНЫЙ",
46                  "seatsAvailable": 5
47                }
48              ],
49              "price": {
50                "currencyCode": "RUB",
51                "value": 5100
52              },
53              "taxes": [
54                {
55                  "code": "YR",
56                  "amount": {
57                    "currencyCode": "RUB",
58                    "value": 100
59                  }
60                }
61              ]
62            }
63          },
64          "timeLimit": "2025-10-22T13:16:37.7360318Z",
65          "officeGuid": "019a0ce7-b2b1-7670-9bb0-0823c0853344"
66        }
67      ],
68      "validatingCarrier": ""
69    }
70  ],
71  "flights": {
72    "DP6841SVO-KZN291120250740": {
73      "marketingCarrier": {
74        "carrierCode": "DP",
75        "flightNumber": "6841"
76      },
77      "origin": {
78        "airport": "SVO",
79        "dateTime": "2025-11-29T07:40:00"
80      },
81      "destination": {
82        "airport": "KZN",
83        "dateTime": "2025-11-29T09:20:00"
84      },
85      "duration": "01:40:00",
86      "equipment": "73H",
87      "type": "scheduled"
88    }
89  },
90  "fareFamilies": {
91    "DP_ВЫГОДНЫЙ": {
92      "carrier": "DP",
93      "name": "ВЫГОДНЫЙ",
94      "description": "НОРМА РУЧНОЙ КЛАДИ ДО 10КГ 203СМ"
95    }
96  },
97  "passenger": "adt"
98}

Детальная документация#


Когда использовать#

Изменение маршрута#

Пассажир хочет лететь в другой город:

 1{
 2  "bookingId": "019a0be6-dbe9-7108-bb7b-fbd181c3fbf6",
 3  "ticketNumber": "425-6170037037",
 4  "legs": [
 5    {
 6      "segments": [
 7        {
 8          "flight": {
 9            "carrierCode": "DP",
10            "flightNumber": "6841"
11          },
12          "origin": {
13            "code": "SVO",
14            "codeType": "iata",
15            "type": "airport"
16          },
17          "destination": {
18            "code": "KZN",
19            "codeType": "iata",
20            "type": "airport"
21          },
22          "departureAt": "2025-11-29T07:40:00",
23          "arrivalAt": "2025-11-29T09:20:00",
24          "fareBasis": "P",
25          "originalSegmentId": "79eeae5c-5ba4-4660-9d80-6ceba1023aa3"
26        }
27      ]
28    }
29  ]
30}

Изменение дат полета#

Пассажир хочет перенести рейс на другую дату.

Смена класса обслуживания#

Пассажир хочет улучшить класс обслуживания (upgrade).


Типичные ошибки#

Код ошибкиПричинаРешение
BOOKING_NOT_FOUNDБронирование не найдено или не принадлежит клиентуПроверьте bookingId
CURRENCY_RATE_NOT_AVAILABLEНет курса для конвертации сумм в валюту отображенияПовторите запрос позже
VALIDATION_ERRORОшибка валидации запроса (HTTP 400)Проверьте обязательные поля и форматы значений
NO_TARGETSПод запрос не нашлось ни одного поставщика: ни один не настроен либо все отсеяны на этапе подготовки запросаПроверьте настройки офисов и пресетов в личном кабинете; при сохранении ошибки обратитесь в поддержку
SUPPLIER_ERRORПоставщик вернул ошибку. Причина — текстом поставщика в поле messageРазберите message; при необходимости повторите запрос позже
SYSTEM_ERRORВнутренняя ошибка Travel APIПовторите запрос позже; при повторении обратитесь в поддержку с errorId

Ошибки, пришедшие от GDS/NDC-поставщика, возвращаются под кодом SUPPLIER_ERROR: отдельного кода на каждую причину отказа Travel API не формирует, причина передаётся текстом поставщика в поле message. Не завязывайте логику на разбор message — его формат зависит от поставщика и не фиксирован.

Связанные операции#