Структура ответа#
Детальное описание структуры ответа от /api/avia/ticket_exchange_calculation.
Успешный ответ#
При успешном расчете API возвращает HTTP 200 и объект с вариантами обмена.
Основная структура#
| Поле | Тип | Описание |
|---|
exchangeId | string | Уникальный идентификатор расчета обмена |
offers | Offer[] | Массив доступных вариантов обмена |
flights | Dictionary<string, Flight> | Словарь с детальной информацией о рейсах |
fareFamilies | Dictionary<string, FareFamily> | Информация о тарифных семействах |
passenger | string | Тип пассажира (adt, chd, inf) |
Структура Offer#
Каждый вариант обмена содержит:
| Поле | Тип | Описание |
|---|
legs | Leg[] | Массив маршрутов |
offerItems | OfferItem[] | Массив вариантов цен |
validatingCarrier | string | IATA код валидирующего перевозчика |
Структура Leg#
| Поле | Тип | Описание |
|---|
segments | Segment[] | Массив сегментов маршрута |
duration | string | Общая продолжительность маршрута (формат: HH:MM:SS) |
Структура Segment#
| Поле | Тип | Описание |
|---|
key | string | Уникальный ключ сегмента |
flightKey | string | Ключ рейса для поиска в словаре flights |
technicalStops | integer | Количество технических остановок |
technicalStopsDetails | TechnicalStop[] | Детали технических остановок |
Структура OfferItem#
Детальная информация о ценах и условиях обмена:
| Поле | Тип | Описание |
|---|
offerItemId | string | Уникальный идентификатор варианта (используется при выборе в /api/avia/ticket_exchange) |
forExchange | MonetaryAmount | Общая стоимость обмена (сумма к доплате) |
fare | MonetaryAmount | Стоимость тарифа |
taxes | MonetaryAmount | Сумма такс и сборов |
exchangeDetails | Dictionary<string, PassengerPricing> | Детали обмена по типам пассажиров |
timeLimit | string (datetime) | Срок действия расчета (ISO 8601) |
additionalData | AdditionalData | Дополнительные данные |
officeGuid | guid | Идентификатор офиса (формат UUID) |
Структура PassengerPricing#
Детали обмена для конкретного типа пассажира:
| Поле | Тип | Описание |
|---|
fare | MonetaryAmount | Стоимость тарифа для данного типа пассажира |
faresInfo | FareInfo[] | Информация о тарифах по сегментам |
price | MonetaryAmount | Полная стоимость (тариф + таксы) |
taxes | Tax[] | Массив такс и сборов |
Структура FareInfo#
| Поле | Тип | Описание |
|---|
fareBasis | string | Код тарифа |
ticketDesignator | string | Дескриптор билета для специальных тарифов (опционально) |
accountCode | string | Корпоративный/промо код тарифа (опционально) |
baggageAllowance | BaggageAllowance | Норма багажа |
segmentKeys | string[] | Массив ключей сегментов, к которым применяется тариф |
cabinType | string | Класс обслуживания (economy, premiumEconomy, business, first) |
class | string | Буква класса бронирования |
fareFamilyKey | string | Ключ тарифного семейства |
seatsAvailable | integer | Количество доступных мест |
brand | BrandInfo | Информация о брендированном тарифе (опционально) |
Структура BrandInfo#
| Поле | Тип | Описание |
|---|
brandCode | string | Код бренда |
brandName | string | Название бренда (опционально) |
Структура BaggageAllowance#
| Поле | Тип | Описание |
|---|
type | string | Тип багажа (carryOn, checked) |
pieceAllowance | PieceAllowance | Норма по количеству мест |
weightAllowance | WeightAllowance | Норма по весу (опционально) |
Структура PieceAllowance#
| Поле | Тип | Описание |
|---|
totalPieces | integer | Общее количество мест багажа |
Структура Tax#
| Поле | Тип | Описание |
|---|
code | string | Код таксы (YR, YQ, и т.д.) |
amount | MonetaryAmount | Сумма таксы |
Структура Flight (словарь)#
Детальная информация о рейсах:
| Поле | Тип | Описание |
|---|
marketingCarrier | FlightDesignator | Маркетинговый перевозчик |
operatingCarrier | FlightDesignator | Оперирующий перевозчик (опционально, для код-шеринга) |
origin | BoardOffPoint | Пункт отправления |
destination | BoardOffPoint | Пункт назначения |
duration | string | Продолжительность полета (формат: HH:MM:SS) |
equipment | string | Тип воздушного судна (IATA код) |
type | string | Тип рейса (scheduled, charter) |
Структура FlightDesignator#
Используется для marketingCarrier и operatingCarrier.
| Поле | Тип | Описание |
|---|
carrierCode | string | IATA код авиакомпании |
flightNumber | string | Номер рейса |
Структура BoardOffPoint#
Используется для origin и destination (плоская структура, без вложенного объекта location).
| Поле | Тип | Описание |
|---|
airport | string | IATA код аэропорта |
dateTime | string (datetime) | Дата и время (ISO 8601) |
terminal | string | Терминал (опционально) |
Структура FareFamily (словарь)#
Информация о тарифных семействах:
| Поле | Тип | Описание |
|---|
carrier | string | IATA код авиакомпании |
name | string | Название тарифного семейства |
description | string | Описание условий тарифа |
Структура MonetaryAmount#
| Поле | Тип | Описание |
|---|
currencyCode | string | Код валюты (ISO 4217, например: RUB, USD) |
value | decimal | Сумма |
Примеры ответов#
Успешный расчет#
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 "baggageAllowance": {
43 "type": "carryOn",
44 "pieceAllowance": {
45 "totalPieces": 1
46 }
47 },
48 "segmentKeys": ["NLc0EJEsw0GJer9QRFb4Sg"],
49 "cabinType": "economy",
50 "class": "P",
51 "fareFamilyKey": "DP_ВЫГОДНЫЙ",
52 "seatsAvailable": 5
53 }
54 ],
55 "price": {
56 "currencyCode": "RUB",
57 "value": 5100
58 },
59 "taxes": [
60 {
61 "code": "YR",
62 "amount": {
63 "currencyCode": "RUB",
64 "value": 100
65 }
66 }
67 ]
68 }
69 },
70 "timeLimit": "2025-10-22T13:16:37.7360318Z",
71 "additionalData": {
72 "fareRefKeys": []
73 },
74 "officeGuid": "019a0ce7-b2b1-7670-9bb0-0823c0853344"
75 }
76 ],
77 "validatingCarrier": ""
78 }
79 ],
80 "flights": {
81 "DP6841SVO-KZN291120250740": {
82 "marketingCarrier": {
83 "carrierCode": "DP",
84 "flightNumber": "6841"
85 },
86 "origin": {
87 "airport": "SVO",
88 "dateTime": "2025-11-29T07:40:00"
89 },
90 "destination": {
91 "airport": "KZN",
92 "dateTime": "2025-11-29T09:20:00"
93 },
94 "duration": "01:40:00",
95 "equipment": "73H",
96 "type": "scheduled"
97 }
98 },
99 "fareFamilies": {
100 "DP_ВЫГОДНЫЙ": {
101 "carrier": "DP",
102 "name": "ВЫГОДНЫЙ",
103 "description": "НОРМА РУЧНОЙ КЛАДИ\n\nДО 10КГ 203СМ\n\nС26ПО32РЯДЫ\n\nС19ПО25РЯДЫBCDE12A\n\nС19ПО25РЯДЫAF"
104 }
105 },
106 "passenger": "adt"
107}
Нет доступных вариантов#
Если обмен невозможен или нет доступных мест:
1{
2 "exchangeId": "019a0ce6-2633-787f-a6bc-5dbddc02cc1f",
3 "offers": [],
4 "flights": {},
5 "fareFamilies": {},
6 "passenger": "adt"
7}
Типичные ошибки#
| Код ошибки | Причина | Решение |
|---|
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 — его формат зависит от поставщика и не фиксирован.
Связанные операции#