Структура ответа#
Детальное описание структуры ответа от /hotels/hotel_pricing.
Основная структура#
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
hotelId | string | Нет | Идентификатор отеля |
checkinDate | date | Да | Дата заезда (YYYY-MM-DD) |
checkoutDate | date | Да | Дата выезда (YYYY-MM-DD) |
searchId | string | Нет | Идентификатор для проверки цены и бронирования |
offers | Offer[] | Нет | Список доступных предложений |
hotelMetaPolicy | HotelMetaPolicy[] | Нет | Политики размещения объекта, сгруппированные по поставщику. Включает только поставщиков, чьи офферы вошли в offers |
Примеры ответов#
Успешный ответ#
Развернуть пример
1{
2 "hotelId": "hotel-001",
3 "checkinDate": "2025-12-15",
4 "checkoutDate": "2025-12-18",
5 "searchId": "search-xyz789",
6 "offers": [
7 {
8 "offerId": "offer-001",
9 "supplier": "ostrovok",
10 "contractId": "tywu2374u2dhs2ui",
11 "searchPresetId": "334ferf4545y3",
12 "pricingPresetId": "3454tf4454545",
13 "roomId": "room-101",
14 "roomGroupId": "room-group-101",
15 "offerType": "best",
16 "roomName": "Стандартный двухместный",
17 "allotment": 5,
18 "paymentType": "online",
19 "isRefundable": true,
20 "features": [
21 { "type": "bedding", "value": "3" }
22 ],
23 "bedVariants": [
24 [
25 { "bedType": "double", "count": 1, "isExtraBed": false }
26 ]
27 ],
28 "additionalServices": {
29 "meal": [
30 {
31 "type": "breakfast",
32 "inclusion": "notIncluded",
33 "price": 1500,
34 "currency": "RUB",
35 "priceUnit": "perGuestPerNight",
36 "canBeBooked": false,
37 "paymentPlace": "hotel"
38 }
39 ],
40 "earlyLateCheckout": [
41 {
42 "time": "18:00",
43 "availableStatus": "available",
44 "price": {
45 "total": {
46 "amount": 2000.00,
47 "currency": "RUB"
48 }
49 },
50 "canBeBooked": true,
51 "paymentPlace": "online"
52 }
53 ]
54 },
55 "roomAmenities": [
56 {
57 "id": "wifi",
58 "name": "Wi-Fi",
59 "group": "internet",
60 "included": true,
61 "amount": 0,
62 "currency": "RUB",
63 "vat": {
64 "isVatFree": true,
65 "included": true,
66 "value": {
67 "amount": 0,
68 "currency": "RUB"
69 },
70 "percent": "0"
71 }
72 },
73 {
74 "id": "ac",
75 "name": "Кондиционер",
76 "group": "comfort",
77 "included": true,
78 "amount": 0,
79 "currency": "RUB",
80 "vat": {
81 "isVatFree": true,
82 "included": true,
83 "value": {
84 "amount": 0,
85 "currency": "RUB"
86 },
87 "percent": "0"
88 }
89 }
90 ],
91 "roomImages": {
92 "main": "https://url/photo.JPEG",
93 "gallery": [
94 "https://url/photo.JPEG",
95 "https://url/photo_2.JPEG"
96 ]
97 },
98 "prices": {
99 "vat": {
100 "isVatFree": true,
101 "included": true,
102 "value": {
103 "amount": 0,
104 "currency": "RUB"
105 },
106 "percent": "0"
107 },
108 "totalPrice": {
109 "total": {
110 "amount": 1500.00,
111 "currency": "RUB"
112 },
113 "discount": {
114 "amount": 100.00,
115 "currency": "RUB"
116 },
117 "markup": {
118 "amount": 100,
119 "currency": "RUB"
120 },
121 "serviceFee": {
122 "amount": 0,
123 "currency": "RUB"
124 },
125 "supplier": {
126 "bar": {
127 "amount": 1400,
128 "currency": "RUB"
129 },
130 "gross": {
131 "amount": 1600,
132 "currency": "RUB"
133 },
134 "netto": {
135 "amount": 1400,
136 "currency": "RUB"
137 },
138 "rack": {
139 "amount": 0,
140 "currency": "RUB"
141 }
142 },
143 "commission": {
144 "margin": "100",
145 "marginCurrency": "RUB",
146 "subagent": {
147 "amount": 0,
148 "currency": "RUB"
149 },
150 "supplier": {
151 "amount": 200,
152 "currency": "RUB"
153 }
154 }
155 },
156 "meals": [
157 {
158 "mealId": "breakfast",
159 "mealName": "Завтрак",
160 "included": true,
161 "price": {
162 "total": {
163 "amount": 0,
164 "currency": "RUB"
165 },
166 "discount": {
167 "amount": 0,
168 "currency": "RUB"
169 },
170 "markup": {
171 "amount": 0,
172 "currency": "RUB"
173 },
174 "serviceFee": {
175 "amount": 0,
176 "currency": "RUB"
177 },
178 "supplier": {
179 "amount": 0,
180 "currency": "RUB"
181 },
182 "supplierBreakdown": {
183 "bar": {
184 "amount": 0,
185 "currency": "RUB"
186 },
187 "gross": {
188 "amount": 0,
189 "currency": "RUB"
190 },
191 "netto": {
192 "amount": 0,
193 "currency": "RUB"
194 },
195 "rack": {
196 "amount": 0,
197 "currency": "RUB"
198 }
199 },
200 "commission": {
201 "margin": "0",
202 "marginCurrency": "RUB",
203 "subagent": {
204 "amount": 0,
205 "currency": "RUB"
206 },
207 "supplier": {
208 "amount": 0,
209 "currency": "RUB"
210 }
211 },
212 "vat": {
213 "isVatFree": true,
214 "included": true,
215 "value": {
216 "amount": 0,
217 "currency": "RUB"
218 },
219 "percent": "0"
220 }
221 }
222 }
223 ],
224 "cancellationRules": {
225 "freeCancellationBefore": "2025-12-13T12:00:00+00:00",
226 "ruleList": [
227 {
228 "startAt": "2025-12-13T12:00:00+00:00",
229 "endAt": "2025-12-15T10:32:04.853Z",
230 "penalty": {
231 "total": {
232 "amount": 5000.00,
233 "currency": "RUB"
234 },
235 "discount": {
236 "amount": 0,
237 "currency": "RUB"
238 },
239 "markup": {
240 "amount": 0,
241 "currency": "RUB"
242 },
243 "serviceFee": {
244 "amount": 0,
245 "currency": "RUB"
246 },
247 "supplier": {
248 "amount": 5000,
249 "currency": "RUB"
250 },
251 "supplierBreakdown": {
252 "bar": {
253 "amount": 5000,
254 "currency": "RUB"
255 },
256 "gross": {
257 "amount": 5000,
258 "currency": "RUB"
259 },
260 "netto": {
261 "amount": 5000,
262 "currency": "RUB"
263 },
264 "rack": {
265 "amount": 0,
266 "currency": "RUB"
267 }
268 }
269 },
270 "commission": {
271 "margin": "0",
272 "marginCurrency": "RUB",
273 "subagent": {
274 "amount": 0,
275 "currency": "RUB"
276 },
277 "supplier": {
278 "amount": 0,
279 "currency": "RUB"
280 }
281 },
282 "vat": {
283 "isVatFree": true,
284 "included": true,
285 "value": {
286 "amount": 0,
287 "currency": "RUB"
288 },
289 "percent": "0"
290 }
291 }
292 ]
293 },
294 "taxData": {
295 "taxes": [
296 {
297 "name": "city_tax",
298 "isIncluded": false,
299 "amount": "15.00",
300 "currencyCode": "EUR"
301 }
302 ]
303 },
304 "earlyCheckin": [
305 {
306 "time": "10:00",
307 "availableStatus": "available",
308 "price": {
309 "total": {
310 "amount": 2000.00,
311 "currency": "RUB"
312 },
313 "discount": {
314 "amount": 0,
315 "currency": "RUB"
316 },
317 "markup": {
318 "amount": 0,
319 "currency": "RUB"
320 },
321 "serviceFee": {
322 "amount": 0,
323 "currency": "RUB"
324 },
325 "supplier": {
326 "amount": 0,
327 "currency": "RUB"
328 },
329 "supplierBreakdown": {
330 "bar": {
331 "amount": 0,
332 "currency": "RUB"
333 },
334 "gross": {
335 "amount": 0,
336 "currency": "RUB"
337 },
338 "netto": {
339 "amount": 0,
340 "currency": "RUB"
341 },
342 "rack": {
343 "amount": 0,
344 "currency": "RUB"
345 }
346 },
347 "commission": {
348 "margin": "0",
349 "marginCurrency": "RUB",
350 "subagent": {
351 "amount": 0,
352 "currency": "RUB"
353 },
354 "supplier": {
355 "amount": 0,
356 "currency": "RUB"
357 }
358 },
359 "vat": {
360 "isVatFree": true,
361 "included": true,
362 "value": {
363 "amount": 0,
364 "currency": "RUB"
365 },
366 "percent": "0"
367 }
368 }
369 }
370 ],
371 "lateCheckout": [
372 {
373 "time": "18:00",
374 "availableStatus": "onRequest",
375 "price": {
376 "total": {
377 "amount": 3000.00,
378 "currency": "RUB"
379 },
380 "discount": {
381 "amount": 0,
382 "currency": "RUB"
383 },
384 "markup": {
385 "amount": 0,
386 "currency": "RUB"
387 },
388 "serviceFee": {
389 "amount": 0,
390 "currency": "RUB"
391 },
392 "supplier": {
393 "amount": 0,
394 "currency": "RUB"
395 },
396 "supplierBreakdown": {
397 "bar": {
398 "amount": 0,
399 "currency": "RUB"
400 },
401 "gross": {
402 "amount": 0,
403 "currency": "RUB"
404 },
405 "netto": {
406 "amount": 0,
407 "currency": "RUB"
408 },
409 "rack": {
410 "amount": 0,
411 "currency": "RUB"
412 }
413 },
414 "commission": {
415 "margin": "0",
416 "marginCurrency": "RUB",
417 "subagent": {
418 "amount": 0,
419 "currency": "RUB"
420 },
421 "supplier": {
422 "amount": 0,
423 "currency": "RUB"
424 }
425 },
426 "vat": {
427 "isVatFree": true,
428 "included": true,
429 "value": {
430 "amount": 0,
431 "currency": "RUB"
432 },
433 "percent": "0"
434 }
435 }
436 }
437 ]
438 },
439 "offerExpiration": "2026-06-17T15:14:03.4719533+00:00",
440 "deposit": {
441 "value": {
442 "amount": 500,
443 "currency": "RUB"
444 },
445 "isRefundable": true
446 },
447 "isPetAvailable": true,
448 "checkinRules": [
449 {
450 "frontDeskTimeStart": "10:00",
451 "frontDeskTimeEnd": "20:00",
452 "keysPickup": "123",
453 "phone": "+123456",
454 "email": "email@gmail.com",
455 "address": "address 7/3",
456 "isContactless": true,
457 "comment": "Код замка 123"
458 }
459 ]
460 },
461 {
462 "offerId": "offer-002",
463 "roomId": "room-201",
464 "roomName": "Люкс с видом на море",
465 "allotment": 2,
466 "paymentType": "online",
467 "isRefundable": true,
468 "features": [
469 { "type": "bedding", "value": "3" },
470 { "type": "view", "value": "31" }
471 ],
472 "roomImages": {
473 "main": "https://url/photo.JPEG",
474 "gallery": [
475 "https://url/photo.JPEG",
476 "https://url/photo_2.JPEG"
477 ]
478 },
479 "prices": {
480 "totalPrice": {
481 "total": {
482 "amount": 35000.00,
483 "currency": "RUB"
484 }
485 },
486 "meals": [
487 {
488 "mealId": "half_board",
489 "mealName": "Полупансион",
490 "included": true
491 }
492 ],
493 "cancellationRules": {
494 "freeCancellationBefore": "2025-12-10T12:00:00+00:00"
495 }
496 },
497 "deposit": {
498 "value": {
499 "amount": 500,
500 "currency": "RUB"
501 },
502 "isRefundable": true
503 },
504 "isPetAvailable": true,
505 "checkinRules": [
506 {
507 "frontDeskTimeStart": "00:00"
508 }
509 ]
510 }
511 ],
512 "hotelMetaPolicy": [
513 {
514 "supplier": "ostrovok",
515 "deposit": [
516 {
517 "allowed": "availabile",
518 "type": "cash",
519 "paymentType": "hotel",
520 "pricingMethod": "fixed",
521 "refundable": "refundable",
522 "price": 500,
523 "currency": "RUB",
524 "priceUnit": "perRoomPerStay"
525 }
526 ],
527 "extraInfo": [
528 {
529 "name": "important_info",
530 "supplier": "ostrovok",
531 "comment": "Необходимо предъявить паспорт при заселении"
532 }
533 ]
534 }
535 ]
536}Ответ с ошибкой#
1{
2 "error": {
3 "code": "NO_TARGETS",
4 "message": "No supplier targets available for this request.",
5 "description": "No supplier targets available for this request."
6 }
7}Типичные ошибки TAPI#
| Код ошибки | Причина | Решение |
|---|---|---|
INVALID_HOTEL_ID | Неверный формат hotelId | Проверьте формат переданного hotelId |
HOTEL_MAPPING_NOT_FOUND | Отель не найден в справочнике поставщика | Проверьте корректность hotelId |
NO_TARGETS | Нет доступных поставщиков/контрактов для выполнения запроса | Повторите запрос позже |
NO_SEARCH_PRESETS_CONFIGURED | Для клиента не настроен ни один пресет поиска | Обратитесь в поддержку |
NO_MATCHING_SEARCH_PRESET | Ни один настроенный пресет поиска не подходит под параметры запроса | Проверьте параметры запроса |
SUPPLIER_ERROR | Запрос к поставщику завершился с ошибкой | Повторите запрос позже |
SYSTEM_ERROR | Непредвиденная внутренняя ошибка TAPI | Обратитесь в поддержку |
VALIDATION_ERROR | Ошибка валидации запроса | Проверьте обязательные поля и форматы значений |
Помимо перечисленных TAPI-кодов, при ошибке на стороне поставщика в ответе может быть возвращён код ошибки поставщика без изменений (проброс) — набор таких кодов зависит от поставщика и не фиксирован.