Hostme | Соглашения: запросы и ответы

Соглашения: запросы и ответы

Обновлено: 2026-06-24 17:30 MSK

Общие правила, применимые ко всем эндпоинтам API: форматы, даты, идентификаторы, пагинация.

Форматы данных

Значение
Тело запросаJSON, заголовок Content-Type: application/json
Тело ответаJSON, application/json
КодировкаUTF-8

Большинство POST/PUT-эндпоинтов также принимают application/json-patch+json, text/json и application/*+json, но рекомендуется использовать обычный application/json.

Дата и время

Все временные значения — в формате ISO 8601.

Тип в спецификацииПримерЗначение
date-time2026-07-01T19:00:00Дата и время
date2026-07-01Только дата (например, businessDateFrom/businessDateTo)

Часовой пояс. Время бронирований трактуется в локальном часовом поясе ресторана. Часовой пояс ресторана доступен в GET /api/core/admin/account/merestaurants[].timeZone. В значениях date-time смещение зоны, как правило, не указывается — отправляйте локальное время ресторана. При работе в другом часовом поясе конвертируйте время на своей стороне.

Идентификаторы

Типы ID в API смешанные — будьте внимательны:

СущностьТипПример
Ресторан (restaurantId)integer123
Бронь (reservationId)string"a1b2c3d4-..."
Участник/гость (memberId)string"..."
Продукт (productId), модификаторstring"..."
Приложение партнёра (appId)string"..."

restaurantId — числовой и присутствует почти во всех путях: /api/.../restaurants/{restaurantId}/.... Большинство остальных идентификаторов — строки (GUID).

Пагинация

Списочные эндпоинты с постраничной выдачей возвращают обёртку PagedResult:

{
  "results": [ /* элементы */ ],
  "count": 1234
}
ПолеТипОписание
resultsarrayЭлементы текущей страницы
countinteger (int64)Общее количество элементов (для расчёта числа страниц)

Параметры постраничности и фильтрации (page, pageSize, search, диапазоны дат и т.п.) зависят от конкретного эндпоинта — смотрите его описание в соответствующем разделе.

Фильтрация по датам

Ряд списочных эндпоинтов требует диапазон дат. Например, список бронирований для внешних приложений (scope App) требует обязательный диапазон не более 60 дней (см. Бронирования).

Null и необязательные поля

  • В ответах большинство полей nullable — проверяйте на null перед использованием.
  • В запросах присылайте только нужные поля; отсутствующие трактуются как незаданные.
  • Поля, помеченные в разделах как * (обязательные), должны присутствовать в запросе.

Идемпотентность и дубли

Отдельного заголовка идемпотентности (Idempotency-Key) спецификация не описывает. Чтобы избежать дублей при повторной отправке:

  • Сохраняйте на своей стороне соответствие «ваш ID ↔ ID брони Hostme».
  • Используйте поле source (и, где применимо, externalUserId) для маркировки происхождения записи.
  • При сетевых ошибках сначала проверьте, не создалась ли запись (повторным GET), прежде чем повторять POST.

Заголовки

ЗаголовокЗначение
AuthorizationBearer <access_token> — обязателен для всех защищённых запросов
Content-Typeapplication/json — для запросов с телом
Acceptapplication/json (рекомендуется)