Окружение: тестовое (АСБ), базовый URL http://test.ihmanagement.ru/webservice/api/res/v1/, логин Provotorov_API · 18.07.2026. Формат каждого пункта: эндпоинт (метод + URL) → что наблюдаем → вопрос(ы).
Что наблюдаем. При отказе — {"ref": <отрицательное>, "mes": "<текст>"}. Справочника кодов в доке нет. Встретили:
| ref | mes (дословно) | наша догадка |
|---|---|---|
-2 | the check-in date cannot be less than the current one | дата заезда в прошлом |
-21 | Quota is empty... | нет квоты на весь номер |
-35 | Booking of one main seat is not available! | нельзя продать одно отдельное место |
-36 / -37 | the check-in/out time is not equal to the time in the accommodation program | время заезда/выезда ≠ времени программы |
-31 | max days 0 | срок / минимум дней? |
-32 | (программа недоступна на период) | ? |
-3 | нет денег на счёте агента (letter_set_status_sold) | баланс агента |
ref с расшифровкой и рекомендацией по обработке.-31, -32).ref стабилен (можно завязывать логику), или ориентироваться на текст mes? Локализуется ли mes?falseЧто наблюдаем. По 58 из 169 объектов приходит список строк квоты, по 111 — булев false. Пример:
GET quotes?objid=1456&datein=2026-08-01&length=16 -> false GET quotes?objid=1456&datein=2026-08-01&catcod=6518 -> false POST quotes (objid=1456, те же даты) -> false GET quotes?objid=1&datein=2026-08-01&length=16 (контроль) -> список из 384 строк
Формат запроса верный (по объекту 1 данные приходят), но по объекту 1456 (и ещё 110) — всегда false.
false? Какая из причин верна: (1) по объекту в тестовом окружении просто не заданы места (данные о количестве мест не загружены); (2) по этому объекту у нашей учётной записи нет договора, поэтому места не отдаются; (3) для объекта количество мест вообще не ведётся в системе; (4) другая причина — какая?quotes вернул false — бронировать нельзя, или места просто не показываются через quotes, но само бронирование (setletter) может пройти? (по таким объектам мы получали и отказы -21/-35, и успешные брони)catplacefl и oneplaceflЧто в доке. oneplacefl = «Возможность размещения 1 гостя во весь номер, 1/0». catplacefl — описания нет, только "catplacefl": 0.
Что наблюдаем (объект 1, договор concod=1, живой setletter с авто-отменой):
| Категория | Что просим | Результат |
|---|---|---|
| catcod 5, oneplacefl=1 | 1 гость, catplacefl=0 | бронь, 59 850 (цена одного места) |
| catcod 5, oneplacefl=1 | 1 гость, catplacefl=1 | бронь, 89 950 (= prices.price, номер целиком) |
| catcod 5, oneplacefl=1 | 2 гостя, catplacefl=0 | бронь, 119 700 (2× места) |
| catcod 9, oneplacefl=0 | 1 гость, catplacefl=0 | -35 «one main seat not available» |
| catcod 9, oneplacefl=0 | 1 гость, catplacefl=1 | бронь, 105 700 (выкуп прошёл ДАЖЕ при oneplacefl=0) |
| catcod 9, oneplacefl=0 | 2 гостя, catplacefl=0 | бронь, 140 700 |
Расхождение доки и поведения: дока описывает oneplacefl как «1 гость во весь номер» (звучит как выкуп), но выкуп включается флагом catplacefl=1 и работает независимо от oneplacefl. А oneplacefl=1 фактически разрешает продать одно место (подселение), oneplacefl=0 — запрещает (-35).
catplacefl и все допустимые значения. Верно ли, что catplacefl=1 = выкуп всего номера одним гостем?oneplacefl: «разрешена продажа одного отдельного места (подселение)» или «разрешено занять весь номер одним гостем»? Как согласуется с таблицей?catplacefl=1) работает независимо от oneplacefl — нужна только квота номера?prices.price («стоимость номера целиком») = цена выкупа всего номера (catplacefl=1)? Проба: price × ночи = 12850 × 7 = 89 950 = цена брони с catplacefl=1.oneplacedates — массив пар дат [{d1,d2}] («пары дат ограничений по подселению в номер»). Интервал [d1,d2] — это период, когда подселение (продажа отдельного места) ЗАПРЕЩЕНО, или наоборот РАЗРЕШЕНО? И что важнее, если oneplacefl=1, а дата заезда попадает в интервал oneplacedates — можно продать одно место или нет?catbednum=3), а мы хотим поселить в него 2 гостей и выкупить его целиком (никого к ним не подселять) — как правильно оформить запрос? Достаточно прислать 2 реальных гостей и catplacefl=1, или нужно чем-то обозначить 3-е (незанятое) место? И как считается цена выкупа в этом случае: всегда полная стоимость номера (prices.price за все места) независимо от того, что фактически заселены 2 гостя, или иначе? Дайте формулу цены выкупа для случая «гостей меньше, чем мест».Что наблюдаем. Изменение заказа делается методом PUT .../letters (в доке описано). setletter при создании принимает данные без проверки реальности ФИО. Технически это позволяет: создать бронь с заглушками → увидеть, прошла ли проверка мест → затем поправить PUT на реальные данные или отменить DELETE.
PUT letters (даты, программу, состав гостей, номер) и в каких статусах заказа (только «Забронирован», или и «Продан»/«Оплачен»)?Что наблюдаем. На тесте платёжка не подключена: setletter возвращает paysysurl:"", paysysid:0. Статусы: Забронирован(1)→Продан(2)→Оплачен(3)→Аннулирован(4). letter_set_status_sold вернул -3 «нет денег на счёте агента».
paysysurl)? Есть ли callback/webhook о факте оплаты, чтобы мы обновили статус у себя?url_let_docs) у нас доступен сразу после setletter (статус «Забронирован») — это ожидаемо, или ссылка должна выдаваться только после оплаты?GET http://.../res/v1/programms?objid=<код>: в ответе явного флага нет, определяем по слову «Профсоюзная» в названии. Есть ли отдельное поле/признак?GET http://.../res/v1/check_price_by_object?a=1&last_check_date=<YYYY-MM-DD>. Нужна более детальная документация:
a=1, но в описании входных параметров он не указан — что это за параметр, какие значения принимает, обязателен ли?objid (код объекта). Ответ — это просто список объектов, у которых что-то изменилось (и мы должны пере-синхронизировать их целиком), или есть детализация, ЧТО именно изменилось (характеристики объекта / договора / программы / услуги / цены)? Пришлите полную структуру ответа.quotes = false и будут ли места на боевом окружении.catplacefl/oneplacefl (сейчас на 115 из 169 объектов один гость получает -35).