Структура ответа#
Детальное описание структуры ответа от /hotels/offer_pricing.
Основная структура#
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
hotelId | string | Нет | Идентификатор отеля |
checkinDate | date | Да | Дата заезда (YYYY-MM-DD) |
checkoutDate | date | Да | Дата выезда (YYYY-MM-DD) |
searchId | string | Нет | Идентификатор поиска |
offer | Offer | Нет | Актуальное предложение с подтвержденной ценой |
hotelMetaPolicy | HotelMetaPolicy[] | Нет | Политики размещения объекта, сгруппированные по поставщику |
Примеры ответов#
Успешный ответ#
Развернуть пример
1{
2 "hotelId": "hotel-001",
3 "checkinDate": "2025-12-15",
4 "checkoutDate": "2025-12-18",
5 "searchId": "search-xyz789",
6 "offer": {
7 "offerId": "offer-001",
8 "supplier": "ostrovok",
9 "contractId": "tywu2374u2dhs2ui",
10 "searchPresetId": "334ferf4545y3",
11 "pricingPresetId": "3454tf4454545",
12 "roomId": "room-101",
13 "roomName": "Стандартный двухместный",
14 "allotment": 5,
15 "paymentType": "online",
16 "isRefundable": true,
17 "features": [
18 { "type": "bedding", "value": "3" }
19 ],
20 "roomAmenities": [
21 {
22 "id": "wifi",
23 "name": "Wi-Fi",
24 "group": "internet",
25 "included": true,
26 "amount": 0,
27 "currency": "RUB",
28 "vat": {
29 "isVatFree": true,
30 "included": true,
31 "value": {
32 "amount": 0,
33 "currency": "RUB"
34 },
35 "percent": "0"
36 }
37 }
38 ],
39 "roomImages": {
40 "main": "https://url/photo.JPEG",
41 "gallery": [
42 "https://url/photo.JPEG",
43 "https://url/photo_2.JPEG"
44 ]
45 },
46 "bedVariants": [
47 [
48 { "bedType": "double", "count": 1, "isExtraBed": false }
49 ]
50 ],
51 "additionalServices": {
52 "meal": [
53 {
54 "type": "breakfast",
55 "inclusion": "notIncluded",
56 "price": 1500,
57 "currency": "RUB",
58 "priceUnit": "perGuestPerNight",
59 "canBeBooked": false,
60 "paymentPlace": "hotel"
61 }
62 ],
63 "earlyLateCheckout": [
64 {
65 "time": "18:00",
66 "availableStatus": "available",
67 "price": {
68 "total": {
69 "amount": 2000.00,
70 "currency": "RUB"
71 }
72 },
73 "canBeBooked": true,
74 "paymentPlace": "online"
75 }
76 ]
77 },
78 "prices": {
79 "vat": {
80 "isVatFree": true,
81 "included": true,
82 "value": {
83 "amount": 0,
84 "currency": "RUB"
85 },
86 "percent": "0"
87 },
88 "totalPrice": {
89 "total": {
90 "amount": 15000.00,
91 "currency": "RUB"
92 },
93 "discount": {
94 "amount": 100.00,
95 "currency": "RUB"
96 },
97 "markup": {
98 "amount": 100,
99 "currency": "RUB"
100 },
101 "serviceFee": {
102 "amount": 0,
103 "currency": "RUB"
104 },
105 "supplier": {
106 "bar": {
107 "amount": 1400,
108 "currency": "RUB"
109 },
110 "gross": {
111 "amount": 1600,
112 "currency": "RUB"
113 },
114 "netto": {
115 "amount": 1400,
116 "currency": "RUB"
117 },
118 "rack": {
119 "amount": 0,
120 "currency": "RUB"
121 }
122 },
123 "commission": {
124 "margin": "100",
125 "subagent": {
126 "amount": 0,
127 "currency": "RUB"
128 },
129 "supplier": {
130 "amount": 200,
131 "currency": "RUB"
132 }
133 }
134 },
135 "meals": [
136 {
137 "mealId": "breakfast",
138 "mealName": "Завтрак",
139 "included": true,
140 "price": {
141 "total": {
142 "amount": 0,
143 "currency": "RUB"
144 },
145 "discount": {
146 "amount": 0,
147 "currency": "RUB"
148 },
149 "markup": {
150 "amount": 0,
151 "currency": "RUB"
152 },
153 "serviceFee": {
154 "amount": 0,
155 "currency": "RUB"
156 },
157 "supplier": {
158 "amount": 0,
159 "currency": "RUB"
160 },
161 "commission": {
162 "margin": "0",
163 "subagent": {
164 "amount": 0,
165 "currency": "RUB"
166 },
167 "supplier": {
168 "amount": 0,
169 "currency": "RUB"
170 }
171 },
172 "vat": {
173 "isVatFree": true,
174 "included": true,
175 "value": {
176 "amount": 0,
177 "currency": "RUB"
178 },
179 "percent": "0"
180 }
181 }
182 }
183 ],
184 "cancellationRules": {
185 "freeCancellationBefore": "2025-12-13T12:00:00+00:00",
186 "ruleList": [
187 {
188 "startAt": "2025-12-13T12:00:00+00:00",
189 "endAt": "2025-12-15T10:32:04.853Z",
190 "penalty": {
191 "total": {
192 "amount": 5000.00,
193 "currency": "RUB"
194 },
195 "discount": {
196 "amount": 0,
197 "currency": "RUB"
198 },
199 "markup": {
200 "amount": 0,
201 "currency": "RUB"
202 },
203 "serviceFee": {
204 "amount": 0,
205 "currency": "RUB"
206 },
207 "supplier": {
208 "amount": 5000,
209 "currency": "RUB"
210 }
211 },
212 "commission": {
213 "margin": "0",
214 "subagent": {
215 "amount": 0,
216 "currency": "RUB"
217 },
218 "supplier": {
219 "amount": 0,
220 "currency": "RUB"
221 }
222 },
223 "vat": {
224 "isVatFree": true,
225 "included": true,
226 "value": {
227 "amount": 0,
228 "currency": "RUB"
229 },
230 "percent": "0"
231 }
232 }
233 ]
234 },
235 "taxData": {
236 "taxes": [
237 {
238 "name": "city_tax",
239 "isIncluded": false,
240 "amount": "15.00",
241 "currencyCode": "EUR"
242 }
243 ]
244 },
245 "earlyCheckin": [
246 {
247 "time": "10:00",
248 "availableStatus": "available",
249 "price": {
250 "total": {
251 "amount": 2000.00,
252 "currency": "RUB"
253 },
254 "discount": {
255 "amount": 0,
256 "currency": "RUB"
257 },
258 "markup": {
259 "amount": 0,
260 "currency": "RUB"
261 },
262 "serviceFee": {
263 "amount": 0,
264 "currency": "RUB"
265 },
266 "supplier": {
267 "amount": 0,
268 "currency": "RUB"
269 },
270 "commission": {
271 "margin": "0",
272 "subagent": {
273 "amount": 0,
274 "currency": "RUB"
275 },
276 "supplier": {
277 "amount": 0,
278 "currency": "RUB"
279 }
280 },
281 "vat": {
282 "isVatFree": true,
283 "included": true,
284 "value": {
285 "amount": 0,
286 "currency": "RUB"
287 },
288 "percent": "0"
289 }
290 }
291 }
292 ],
293 "lateCheckout": [
294 {
295 "time": "18:00",
296 "availableStatus": "onRequest",
297 "price": {
298 "total": {
299 "amount": 3000.00,
300 "currency": "RUB"
301 },
302 "discount": {
303 "amount": 0,
304 "currency": "RUB"
305 },
306 "markup": {
307 "amount": 0,
308 "currency": "RUB"
309 },
310 "serviceFee": {
311 "amount": 0,
312 "currency": "RUB"
313 },
314 "supplier": {
315 "amount": 0,
316 "currency": "RUB"
317 },
318 "commission": {
319 "margin": "0",
320 "subagent": {
321 "amount": 0,
322 "currency": "RUB"
323 },
324 "supplier": {
325 "amount": 0,
326 "currency": "RUB"
327 }
328 },
329 "vat": {
330 "isVatFree": true,
331 "included": true,
332 "value": {
333 "amount": 0,
334 "currency": "RUB"
335 },
336 "percent": "0"
337 }
338 }
339 }
340 ]
341 },
342 "offerExpiration": "2026-06-17T15:14:03.4719533+00:00",
343 "deposit": {
344 "value": {
345 "amount": 500,
346 "currency": "RUB"
347 },
348 "isRefundable": true
349 },
350 "isPetAvailable": true,
351 "checkinRules": [
352 {
353 "frontDeskTimeStart": "10:00",
354 "frontDeskTimeEnd": "20:00",
355 "keysPickup": "123",
356 "phone": "+123456",
357 "email": "email@gmail.com",
358 "address": "address 7/3",
359 "isContactless": true,
360 "comment": "Код замка 123"
361 }
362 ]
363 },
364 "hotelMetaPolicy": [
365 {
366 "supplier": "ostrovok",
367 "deposit": [
368 {
369 "allowed": "availabile",
370 "type": "cash",
371 "paymentType": "hotel",
372 "pricingMethod": "fixed",
373 "refundable": "refundable",
374 "price": 500,
375 "currency": "RUB",
376 "priceUnit": "perRoomPerStay"
377 }
378 ],
379 "extraInfo": [
380 {
381 "name": "important_info",
382 "supplier": "ostrovok",
383 "comment": "Необходимо предъявить паспорт при заселении"
384 }
385 ]
386 }
387 ]
388}Ответ с ошибкой#
1{
2 "error": {
3 "code": "OFFER_NOT_FOUND",
4 "message": "Offer not found or expired",
5 "description": "Offer not found or expired"
6 }
7}Типичные ошибки TAPI#
| Код ошибки | Причина | Решение |
|---|---|---|
OFFER_NOT_FOUND | Предложение не найдено в кэше или истёк срок действия searchId/offerId | Повторите hotel_pricing и выберите новый оффер |
VALIDATION_ERROR | Ошибка валидации запроса | Проверьте обязательные поля searchId и offerId |
Помимо перечисленных TAPI-кодов, при ошибке на стороне поставщика в ответе может быть возвращён код ошибки поставщика без изменений (проброс) — набор таких кодов зависит от поставщика и не фиксирован.