Соглашения: запросы и ответы
Обновлено: 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-time | 2026-07-01T19:00:00 | Дата и время |
date | 2026-07-01 | Только дата (например, businessDateFrom/businessDateTo) |
Часовой пояс. Время бронирований трактуется в локальном часовом поясе ресторана. Часовой пояс ресторана доступен в
GET /api/core/admin/account/me→restaurants[].timeZone. В значенияхdate-timeсмещение зоны, как правило, не указывается — отправляйте локальное время ресторана. При работе в другом часовом поясе конвертируйте время на своей стороне.
Идентификаторы
Типы ID в API смешанные — будьте внимательны:
| Сущность | Тип | Пример |
|---|---|---|
Ресторан (restaurantId) | integer | 123 |
Бронь (reservationId) | string | "a1b2c3d4-..." |
Участник/гость (memberId) | string | "..." |
Продукт (productId), модификатор | string | "..." |
Приложение партнёра (appId) | string | "..." |
restaurantId — числовой и присутствует почти во всех путях: /api/.../restaurants/{restaurantId}/.... Большинство остальных идентификаторов — строки (GUID).
Пагинация
Списочные эндпоинты с постраничной выдачей возвращают обёртку PagedResult:
{
"results": [ /* элементы */ ],
"count": 1234
}
| Поле | Тип | Описание |
|---|---|---|
results | array | Элементы текущей страницы |
count | integer (int64) | Общее количество элементов (для расчёта числа страниц) |
Параметры постраничности и фильтрации (page, pageSize, search, диапазоны дат и т.п.) зависят от конкретного эндпоинта — смотрите его описание в соответствующем разделе.
Фильтрация по датам
Ряд списочных эндпоинтов требует диапазон дат. Например, список бронирований для внешних приложений (scope App) требует обязательный диапазон не более 60 дней (см. Бронирования).
Null и необязательные поля
- В ответах большинство полей nullable — проверяйте на
nullперед использованием. - В запросах присылайте только нужные поля; отсутствующие трактуются как незаданные.
- Поля, помеченные в разделах как
*(обязательные), должны присутствовать в запросе.
Идемпотентность и дубли
Отдельного заголовка идемпотентности (Idempotency-Key) спецификация не описывает. Чтобы избежать дублей при повторной отправке:
- Сохраняйте на своей стороне соответствие «ваш ID ↔ ID брони Hostme».
- Используйте поле
source(и, где применимо,externalUserId) для маркировки происхождения записи. - При сетевых ошибках сначала проверьте, не создалась ли запись (повторным GET), прежде чем повторять POST.
Заголовки
| Заголовок | Значение |
|---|---|
Authorization | Bearer <access_token> — обязателен для всех защищённых запросов |
Content-Type | application/json — для запросов с телом |
Accept | application/json (рекомендуется) |