Структура ответа#

Детальное описание структуры ответа от /hotels/offer_pricing.

Основная структура#

ПолеТипОбязательноОписание
hotelIdstringНетИдентификатор отеля
checkinDatedateДаДата заезда (YYYY-MM-DD)
checkoutDatedateДаДата выезда (YYYY-MM-DD)
searchIdstringНетИдентификатор поиска
offerOfferНетАктуальное предложение с подтвержденной ценой
hotelMetaPolicyHotelMetaPolicy[]НетПолитики размещения объекта, сгруппированные по поставщику

Примеры ответов#

Успешный ответ#

Развернуть пример
  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-кодов, при ошибке на стороне поставщика в ответе может быть возвращён код ошибки поставщика без изменений (проброс) — набор таких кодов зависит от поставщика и не фиксирован.