Структура ответа#
Детальное описание структуры ответа от /avia/offer_price.
Основная структура#
Ответ содержит актуальную информацию о запрошенном предложении.
| Поле | Тип | Описание |
|---|
error | Error | Информация об ошибке (при наличии) |
searchId | string | Новый идентификатор поиска |
offers | array | Массив с одним предложением |
flights | object | Словарь с информацией о рейсах |
fareFamilies | object | Словарь с информацией о тарифных семействах |
Структура Offer#
| Поле | Тип | Описание |
|---|
offerId | string | Идентификатор предложения |
legs | array | Маршрутные плечи |
offerItems | array | Варианты тарифа для предложения |
ticketingRequirements | object | Требования к выписке билетов |
validatingCarrier | string | Валидирующий перевозчик |
Структура Leg#
| Поле | Тип | Описание |
|---|
segments | array | Сегменты маршрута |
Структура Segment#
| Поле | Тип | Описание |
|---|
segmentId | string | Идентификатор сегмента |
flightId | string | Ссылка на рейс в словаре flights |
Структура OfferItem#
| Поле | Тип | Описание |
|---|
offerItemId | string | Идентификатор варианта тарифа |
totalAmount | object | Полная стоимость |
fareAmount | object | Стоимость тарифа |
taxAmount | object | Сумма такс и сборов |
details | object | Детали по типам пассажиров |
miniRules | MiniRule[] | Правила изменения, отмены и возврата билетов (см. MiniRule) |
timeLimit | string | Срок оплаты (ISO 8601) |
offerExpiration | string | Срок действия предложения (ISO 8601) |
supplier | Supplier | Код поставщика |
ticketingFee | TicketingFee | Сбор за оформление билета (см. TicketingFee) |
Структура Details#
Объект с ключами по типам пассажиров (adt, chd, inf):
| Поле | Тип | Описание |
|---|
fareAmount | object | Стоимость тарифа для пассажира |
fareComponents | array | Компоненты тарифа |
totalAmount | object | Полная стоимость для пассажира |
taxes | object | Детализация такс |
Структура FareComponent#
| Поле | Тип | Описание |
|---|
fareBasisCode | string | Код базового тарифа |
tariffType | string | Тип тарифа (public, private, etc.) |
ticketDesignator | string | Дескриптор билета для специальных типов тарифов |
accountCode | string | Код аккаунта для корпоративных/контрактных тарифов |
baggageAllowances | array | Нормы багажа |
segmentIds | array | Ссылки на сегменты |
cabinType | string | Класс обслуживания |
rbd | string | Код бронирования (booking class) |
fareFamilyRefId | string | Ссылка на тарифное семейство |
availableSeatCount | number | Количество доступных мест |
brand | BrandInfo | Информация о брендированном тарифе (см. BrandInfo) |
Структура BaggageAllowance#
| Поле | Тип | Описание |
|---|
type | string | Тип багажа (carryOn, checked) |
pieceAllowance | object | Норма по количеству мест |
weightAllowance | object | Норма по весу |
dimensions | object | Ограничения по размерам |
Структура Flight#
Словарь с ключом в формате {carrier}{flightNumber}{origin}-{destination}{date}{time}:
| Поле | Тип | Описание |
|---|
marketingCarrier | object | Маркетинговый перевозчик |
operatingCarrier | object | Оперирующий перевозчик |
departure | object | Информация об отправлении |
arrival | object | Информация о прибытии |
flightDuration | duration | Время в пути (ISO 8601 duration) |
equipmentCode | string | Код типа воздушного судна (например, 320, 737) |
type | string | Тип рейса (scheduled, charter) |
Структура FareFamily#
Словарь с ключом в формате {carrier}_{familyName}:
| Поле | Тип | Описание |
|---|
carrierCode | string | Код перевозчика |
name | string | Название тарифного семейства |
description | string | Описание условий |
Примеры ответов#
Успешный ответ#
Развернуть полный пример
1{
2 "searchId": "699C55215661822C2EC828B0F661A304",
3 "offers": [
4 {
5 "offerId": "3F4CF01BC668FA5F51BC21B1142B26F9",
6 "legs": [
7 {
8 "segments": [
9 {
10 "segmentId": "88D994BF3A7C6CE05E54D8BBE5A3E4BD",
11 "flightId": "DP6841SVO-KZN211120250740"
12 }
13 ]
14 }
15 ],
16 "offerItems": [
17 {
18 "offerItemId": "1691A9FCFD85DC8DB9D6093D7E75C5C0",
19 "totalAmount": {
20 "currencyCode": "RUB",
21 "value": 1499
22 },
23 "fareAmount": {
24 "currencyCode": "RUB",
25 "value": 1399
26 },
27 "taxAmount": {
28 "currencyCode": "RUB",
29 "value": 100
30 },
31 "details": {
32 "adt": {
33 "fareAmount": {
34 "currencyCode": "RUB",
35 "value": 1399
36 },
37 "fareComponents": [
38 {
39 "fareBasisCode": "PROMOALL",
40 "tariffType": "public",
41 "baggageAllowances": [
42 {
43 "type": "carryOn",
44 "pieceAllowance": {
45 "totalPieces": 0
46 }
47 }
48 ],
49 "segmentIds": ["88D994BF3A7C6CE05E54D8BBE5A3E4BD"],
50 "cabinType": "economy",
51 "rbd": "P",
52 "fareFamilyRefId": "DP_БАЗОВЫЙ",
53 "availableSeatCount": 1
54 }
55 ],
56 "totalAmount": {
57 "currencyCode": "RUB",
58 "value": 1499
59 },
60 "taxes": {
61 "total": {
62 "currencyCode": "RUB",
63 "value": 100
64 },
65 "breakdown": [
66 {
67 "code": "YR",
68 "amount": {
69 "currencyCode": "RUB",
70 "value": 100
71 }
72 }
73 ]
74 }
75 }
76 },
77 "timeLimit": "2025-10-22T19:05:47",
78 "offerExpiration": "2025-10-22T19:05:47"
79 }
80 ],
81 "ticketingRequirements": {
82 "ticketQuantity": 1,
83 "details": [
84 {
85 "segmentIds": ["88D994BF3A7C6CE05E54D8BBE5A3E4BD"],
86 "validatingCarrier": "DP"
87 }
88 ]
89 },
90 "validatingCarrier": "DP"
91 }
92 ],
93 "flights": {
94 "DP6841SVO-KZN211120250740": {
95 "marketingCarrier": {
96 "carrierCode": "DP",
97 "flightNumber": "6841"
98 },
99 "operatingCarrier": {
100 "carrierCode": "DP",
101 "flightNumber": "6841"
102 },
103 "departure": {
104 "location": {
105 "code": "SVO",
106 "codeType": "iata",
107 "type": "airport"
108 },
109 "dateTime": "2025-11-21T07:40:00",
110 "terminal": "D"
111 },
112 "arrival": {
113 "location": {
114 "code": "KZN",
115 "codeType": "iata",
116 "type": "airport"
117 },
118 "dateTime": "2025-11-21T09:20:00",
119 "terminal": "1"
120 },
121 "type": "scheduled"
122 }
123 },
124 "fareFamilies": {
125 "DP_БАЗОВЫЙ": {
126 "carrierCode": "DP",
127 "name": "БАЗОВЫЙ",
128 "description": "НОРМА РУЧНОЙ КЛАДИ"
129 }
130 }
131}
Ответ с несколькими вариантами тарифа#
Если для предложения доступны несколько тарифных семейств:
1{
2 "searchId": "699C55215661822C2EC828B0F661A304",
3 "offers": [
4 {
5 "offerItems": [
6 {
7 "offerItemId": "1691A9FCFD85DC8DB9D6093D7E75C5C0",
8 "totalAmount": { "currencyCode": "RUB", "value": 1499 },
9 "fareFamilyRefId": "DP_БАЗОВЫЙ"
10 },
11 {
12 "offerItemId": "DAB32144B940FCC65CC85E9BCE682346",
13 "totalAmount": { "currencyCode": "RUB", "value": 2949 },
14 "fareFamilyRefId": "DP_ВЫГОДНЫЙ"
15 },
16 {
17 "offerItemId": "4E435B2299838F5C9E819BDB13FCD9AA",
18 "totalAmount": { "currencyCode": "RUB", "value": 5599 },
19 "fareFamilyRefId": "DP_МАКСИМУМ"
20 }
21 ]
22 }
23 ]
24}
Ответ с ошибкой#
1{
2 "error": {
3 "code": "OFFER_NOT_AVAILABLE",
4 "message": "Предложение недоступно",
5 "description": "Выбранное предложение больше не доступно",
6 "errorId": "018c5f2e-9b3a-7f4d-8e2c-1a2b3c4d5e6f"
7 }
8}
Использование данных#
Проверка изменения цены#
1var originalPrice = 1499m;
2var actualPrice = response.Offers[0].OfferItems[0].TotalAmount.Value;
3
4if (actualPrice != originalPrice)
5{
6 var difference = actualPrice - originalPrice;
7 Console.WriteLine($"Цена изменилась на {difference:+#;-#;0} ₽");
8}
Проверка доступности мест#
1var fareComponent = response.Offers[0]
2 .OfferItems[0]
3 .Details["adt"]
4 .FareComponents[0];
5
6if (fareComponent.AvailableSeatCount < requiredSeats)
7{
8 Console.WriteLine("Недостаточно мест");
9}
Проверка срока действия#
1var offerExpiration = DateTime.Parse(
2 response.Offers[0].OfferItems[0].OfferExpiration
3);
4
5if (offerExpiration < DateTime.Now)
6{
7 Console.WriteLine("Предложение истекло");
8}
Типичные ошибки#
| Код ошибки | Причина | Решение |
|---|
SEARCH_EXPIRED | Поиск устарел | Выполните новый поиск |
OFFER_NOT_AVAILABLE | Предложение недоступно | Предложите альтернативы |
INVALID_OFFER_ITEM | Некорректный offerItemId | Проверьте ID |
PRICE_CHANGED | Цена изменилась | Показана в ответе |
Связанные операции#