Restoplace Public API
API Restoplace позволяет интегрировать бронирования, столы и залы, события и билеты, купленные сертификаты, а также расчёт депозита. Через API можно проверять свободное время, создавать и изменять брони, получать справочники, управлять билетами и сертификатами. Все запросы отправляйте на https://api.restoplace.cc.
Актуальная спецификация OpenAPI (YAML)
https://api.restoplace.ccВерсия документации: 1.0.0
Первый запрос
- Получите ключ заведения
Откройте настройки нужного адреса, затем «Интеграции» → «API / Webhook». Как получить ключ
- Запросите информацию
Подставьте ключ в пример и выполните запрос с вашего сервера. Для
/infoнужно право «Информация о заведении». - Перейдите к своей задаче
Получить бронирования, проверить доступность или найти билеты.
curl --request GET \
'https://api.restoplace.cc/info' \
--header 'X-API-Key: YOUR_API_KEY'Замените YOUR_API_KEY своим ключом. Храните его на сервере: ключ не должен попадать в код публичной страницы.
Данные ответа находятся в responseData. Как читать ответ и обрабатывать ошибки
Ключ и авторизация
Где взять ключ
- В личном кабинете Restoplace откройте нужный адрес.
- В правом верхнем углу нажмите «Настройки адреса».
- В левом меню раскройте «Интеграции» и выберите «API / Webhook».
- Включите переключатель «Включить API».
- Если ключ уже есть, выделите и скопируйте его. Если ключ ещё не создан, нажмите «Обновить ключ api», затем скопируйте появившийся ключ.
Доступ зависит от лицензии заведения и прав ключа.
Способ авторизации: ApiKeyHeader или ApiKeyQuery.
ApiKeyHeader
Заголовок: X-API-Key
ApiKeyQuery
Параметр URL: api_key
Альтернатива заголовку. Также принимается в JSON/form; предпочтителен X-API-Key.
Для авторизации передавайте ключ заведения в заголовке X-API-Key. Альтернатива — параметр api_key в URL, JSON или форме; заголовок имеет приоритет. Ключ предоставляет доступ к одному заведению: параметр addressid не позволяет выбрать другое. Если параметр одновременно указан в JSON и в URL или форме, используется значение из URL или формы.
Права доступа
Необходимое право ключа указано у каждой операции; включите его в настройках API-ключа. Ключи без ограничений прав предоставляют полный доступ; при заданном списке прав разрешены только перечисленные операции. Пустой или некорректный список запрещает доступ. Ключам Яндекс Еды доступны работа с бронями, свободное время, расчёт депозита и чтение объектов, меток и информации о заведении; если передан source, его значением должно быть yandex_eda. Недостаток прав или неподходящая лицензия возвращают HTTP 403.
Формат запросов, даты и ограничения
Списки и типы данных
Списки с параметром page возвращают до 400 записей за запрос. Время без смещения относится к часовому поясу заведения, кроме отдельно описанных фильтров. requestDate и updatedAfterTime — Unix timestamps в секундах. Идентификаторы, флаги и суммы в ответах могут быть числами или числовыми строками. Денежные суммы указаны в валюте заведения.
Изменение данных
Для PUT передавайте тело в формате application/json. Форму application/x-www-form-urlencoded отправляйте через POST с заголовком X-HTTP-Method: PUT; этот способ также поддерживает JSON. Массивы в формах передавайте с квадратными скобками, например item_ids[]=42&item_ids[]=43. Удаление через DELETE не поддерживается; для отмены брони или билета используйте изменение статуса, для сертификата — /issuedCertificates/{id}/cancel.
Версия документации
Версия info.version обозначает версию документации. Адреса операций не содержат номера версии API.
Текущая версия документации: 1.0.0.
Ответы и ошибки
Успешный ответ содержит method, requestDate, responseData, page и totalPages. Примеры показывают структуру ответов на демонстрационных данных; списки и необязательные поля сокращены. Ошибка может находиться в поле error верхнего уровня либо в responseData.error; формат указан у операции. HTTP 405 может означать ошибку параметров или недопустимое действие. При запросе отсутствующей записи некоторые операции возвращают HTTP 200 с responseData: []; проверяйте описание операции и содержимое ответа.
| Поле | Что содержит |
|---|---|
method | Имя ресурса, например reserves, tickets или issuedCertificates. |
requestDate | Unix timestamp запроса в секундах. |
responseData | Результат запроса. Структура зависит от метода. |
page, totalPages | Текущая страница и число страниц результата. |
Если запрос не прошёл
401 — проверьте ключ. 403 — права ключа и лицензию. Остальные ответы перечислены у каждого метода.
Проверяйте error и responseData.error. Один только ответ HTTP 200 не подтверждает, что нужная запись найдена.
Методы API
Методы не найдены
Попробуйте название метода, путь или параметр, например /reserves или phone.
Бронирования6 методов
GET/reservesСписок бронирований
До 400 записей на страницу, по возрастанию ID. Некорректный фильтр или нерабочий день дают пустой список с HTTP 200.
Необходимое право ключа: Список броней
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
page | URL | Страница списка по 400 записей. Неположительное или отсутствующее значение заменяется на 1. |
updatedAfterTime | URL | Изменены после Unix timestamp (строго позже). |
query[reserve_id] | URL | Номер бронирования, положительное число. |
query[phone] | URL | Телефон в числовом формате. |
query[email] | URL | Email гостя. |
query[status] | URL | Положительный код статуса. |
query[depositPaid] | URL | Оплата депозита; выбираются только брони с depositPrice > 0. |
query[createdDate] | URL | Дата создания с 00:00:00 до 23:59:59 в часовом поясе сервера, без пересчёта в часовой пояс заведения. |
query[date] | URL | Рабочий день заведения, включая работу через полночь. |
query[item_id] | URL | ID объекта; также учитывается участие в группе объектов. |
query[floor_id] | URL | ID зала. |
query[is_banquet] | URL | Оба значения 0 и 1 возвращают только банкеты; для списка без этого ограничения не передавайте параметр. |
query[is_fast] | URL | Быстрое бронирование. |
HTTP 200
application/json{
"method": "reserves",
"requestDate": 1791882000,
"responseData": [
{
"id": 501,
"reserve_id": 123,
"status": 2,
"name": "Иван",
"phone": "79990000000",
"email": "guest@example.com",
"count": 2,
"time_from": "2026-11-02 18:00:00",
"time_to": "2026-11-02 20:00:00",
"item_id": 42,
"item_ids": [
42
],
"floor_id": 7,
"floor_name": "Основной зал",
"depositPrice": 0,
"depositPaid": 0,
"tags": [
"vip"
],
"cancel_reason": null
}
],
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}POST/reservesСоздать бронирование
Создание возвращает HTTP 200, в том числе при ожидании оплаты. Подбор объектов и режим листа ожидания зависят от параметров и настроек ключа.
Необходимое право ключа: Создавать и изменять брони
Тело запроса обязательное
JSON или form-urlencoded. Параметры query/form имеют приоритет над JSON при совпадении имён.
application/json / application/x-www-form-urlencoded
Если объекты, зал и waitlist не переданы, настройки ключа определяют автоматический подбор свободного объекта или лист ожидания. При создании проверяются время, контакты и доступность.
from обязательноеYYYY-MM-DD HH:mm:ss в часовом поясе заведения либо RFC3339 с явным смещением ±HH:mm. Время со смещением преобразуется в часовой пояс заведения. Обозначение Z и дробные секунды не поддерживаются.
Примеры: "2026-11-02 18:00:00", "2026-11-02T18:00:00+03:00"
to обязательноеYYYY-MM-DD HH:mm:ss в часовом поясе заведения либо RFC3339 с явным смещением ±HH:mm. Время со смещением преобразуется в часовой пояс заведения. Обозначение Z и дробные секунды не поддерживаются.
Примеры: "2026-11-02 18:00:00", "2026-11-02T18:00:00+03:00"
countКоличество гостей; при создании проверяется доступность на указанное число гостей.
flooridЗал для автоматического подбора объекта при пустом item_ids.
item_idsЯвно выбранные объекты: один объект или группа.
nameИмя гостя; отсутствие допускает безымянную бронь.
phoneТелефон гостя; отсутствие допускает бронь без телефона.
emailEmail гостя.
tg_usernameTelegram username; начальный @ удаляется.
textКомментарий.
sourceИсточник. Если строка не содержит точку и не равна yandex_eda, используется api.restoplace.cc.
waitlistСоздать заявку листа ожидания. Имеет приоритет при формировании заявки; не сочетайте с item_ids.
depositУчитывать депозит по настройкам заведения.
deposit_totalПоложительная сумма заменяет рассчитанный депозит; ноль оставляет расчёт по настройкам.
deposit_paid1 фиксирует внешнюю оплату положительного депозита.
notificationsДополнительные параметры уведомлений. Поддерживаемые поля и их влияние на отправку уведомлений этим API не гарантируются.
Без дополнительных ограничений.
Дополнительные поля разрешены этой схемой.
tagsКлючи меток массивом или CSV. В PUT отсутствие поля сохраняет метки; [] или пустая строка очищают их. Неизвестные ключи в PUT резервов отбрасываются.
Хотя бы один вариант (anyOf)
Примеры: "vip,birthday"
[
"vip",
"birthday"
]Примеры для application/json:
{
"from": "2026-11-02 18:00:00",
"to": "2026-11-02 20:00:00",
"count": 2,
"item_ids": [
42
],
"name": "Гость",
"phone": "79990000000",
"deposit_paid": 0
}HTTP 200
application/json{
"method": "reserves",
"requestDate": 1791882000,
"responseData": {
"id": 501,
"number": 123,
"message": "Резерв создан"
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 405
application/jsonОперация не поддерживается либо параметры запроса или состояние записи не позволяют её выполнить. Конкретные условия указаны в описании операции.
GET/reserves/{id}Получить бронирование
Неизвестный ID возвращает HTTP 200 и responseData: [].
Необходимое право ключа: Список броней
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
idобязательный | Путь | Внутренний идентификатор записи, не её номер для гостя. |
HTTP 200
application/json{
"method": "reserves",
"requestDate": 1791882000,
"responseData": {
"id": 501,
"reserve_id": 123,
"status": 2,
"name": "Иван",
"phone": "79990000000",
"email": "guest@example.com",
"count": 2,
"time_from": "2026-11-02 18:00:00",
"time_to": "2026-11-02 20:00:00",
"item_id": 42,
"item_ids": [
42
],
"floor_id": 7,
"floor_name": "Основной зал",
"depositPrice": 0,
"depositPaid": 0,
"tags": [
"vip"
],
"cancel_reason": null
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}PUT/reserves/{id}Изменить бронирование
Неизвестный ID, отсутствие изменений и ошибки валидации возвращают HTTP 405.
Необходимое право ключа: Создавать и изменять брони
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
idобязательный | Путь | Внутренний идентификатор записи, не её номер для гостя. |
Тело запроса обязательное
Для прямого PUT тело передаётся в application/json. Для формы используйте POST с X-HTTP-Method: PUT.
application/json
Частичное обновление. Нужна хотя бы одна фактическая правка, иначе HTTP 405. from и to передаются вместе. Депозит сохраняется; deposit_total здесь не обновляется.
nameИмя гостя; отсутствие допускает безымянную бронь.
phoneТелефон очищается до цифр; пустое значение не очищает существующий телефон.
emailEmail гостя.
tg_usernameTelegram username; начальный @ удаляется.
textПереводы строк заменяются пробелами; длинный текст обрезается до 1000 символов.
countКоличество гостей.
fromYYYY-MM-DD HH:mm:ss в часовом поясе заведения либо RFC3339 с явным смещением ±HH:mm. Время со смещением преобразуется в часовой пояс заведения. Обозначение Z и дробные секунды не поддерживаются.
Примеры: "2026-11-02 18:00:00", "2026-11-02T18:00:00+03:00"
toYYYY-MM-DD HH:mm:ss в часовом поясе заведения либо RFC3339 с явным смещением ±HH:mm. Время со смещением преобразуется в часовой пояс заведения. Обозначение Z и дробные секунды не поддерживаются.
Примеры: "2026-11-02 18:00:00", "2026-11-02T18:00:00+03:00"
tagsКлючи меток массивом или CSV. В PUT отсутствие поля сохраняет метки; [] или пустая строка очищают их. Неизвестные ключи в PUT резервов отбрасываются.
Хотя бы один вариант (anyOf)
Примеры: "vip,birthday"
[
"vip",
"birthday"
]item_idsНовые объекты: массив ID или CSV. Пустое значение сохраняет прежние объекты.
Хотя бы один вариант (anyOf)
{
"count": 3,
"text": "Стол у окна",
"tags": []
}HTTP 200
application/json{
"method": "reserves",
"requestDate": 1791882000,
"responseData": {
"id": 501,
"number": 123,
"message": "Резерв обновлен"
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 405
application/jsonОперация не поддерживается либо параметры запроса или состояние записи не позволяют её выполнить. Конкретные условия указаны в описании операции.
PUT/reserves/{id}/statusИзменить статус бронирования
Отменяет или закрывает бронирование при допустимом переходе из текущего статуса. Удаление бронирования через DELETE недоступно.
Необходимое право ключа: Создавать и изменять брони
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
idобязательный | Путь | Внутренний идентификатор записи, не её номер для гостя. |
Тело запроса обязательное
Для прямого PUT тело передаётся в application/json. Для формы используйте POST с X-HTTP-Method: PUT.
application/json
status обязательноеЗапрошенный статус 1–6. При текущем статусе 4 запрос 6 преобразуется в 5; при текущем статусе не 4 запрос 5 преобразуется в 6.
cancel_reasonID из GET /reserves/cancel-reasons.
cancel_reason_textСвободный текст причины отмены.
{
"status": 6,
"cancel_reason": 1,
"cancel_reason_text": "Изменились планы гостя"
}HTTP 200
application/json{
"method": "reserves",
"requestDate": 1791882000,
"responseData": {
"id": 501,
"message": "Резерв обновлен"
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 405
application/jsonОперация не поддерживается либо параметры запроса или состояние записи не позволяют её выполнить. Конкретные условия указаны в описании операции.
GET/reserves/cancel-reasonsПричины отмены бронирования
requires_text=true означает, что для этой причины нужен свободный текст.
Необходимое право ключа: Список броней
HTTP 200
application/json{
"method": "reserves",
"requestDate": 1791882000,
"responseData": [
{
"id": 1,
"text": "Другая причина",
"requires_text": true
},
{
"id": 3,
"text": "Гость отменил бронь",
"requires_text": false
},
{
"id": 2,
"text": "Гость не пришёл (No-show)",
"requires_text": false
},
{
"id": 7,
"text": "Дублирующая бронь",
"requires_text": false
},
{
"id": 4,
"text": "Не удалось связаться",
"requires_text": false
},
{
"id": 6,
"text": "Перенос на другую дату/время",
"requires_text": false
},
{
"id": 5,
"text": "Гость опоздал",
"requires_text": false
},
{
"id": 10,
"text": "Ошибка при создании брони",
"requires_text": false
},
{
"id": 8,
"text": "Отказ от условий/депозита",
"requires_text": false
},
{
"id": 11,
"text": "Некорректные данные",
"requires_text": false
},
{
"id": 12,
"text": "Гость уже размещён: другая зона/стол",
"requires_text": false
},
{
"id": 13,
"text": "Нет свободных столов",
"requires_text": false
},
{
"id": 9,
"text": "Заведение не работает",
"requires_text": false
},
{
"id": 14,
"text": "Отказ во входе (фейс/дресс-контроль)",
"requires_text": false
}
],
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}Объекты и залы5 методов
GET/itemsПолучить объекты бронирования
Объекты текущего заведения, по возрастанию ID, до 400 на странице. Все фильтры передаются только как query[...]; плоские одноимённые параметры не применяются. Неверные числовые фильтры дают [] с HTTP 200. totalPages всегда 1, даже при наличии следующих страниц.
Необходимое право ключа: Список объектов и залов
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
page | URL | Страница списка по 400 записей. Неположительное или отсутствующее значение заменяется на 1. |
query[floorid] | URL | Зал. Положительное значение фильтрует по ID, 0 не включает фильтр; отрицательное значение даёт пустой список с HTTP 200. |
query[checked] | URL | При 1 вернуть только включённые объекты; 0/отсутствие не фильтрует. |
query[type] | URL | Ключ типа объекта, включая пользовательский. Примеры: |
query[reserve] | URL | Фильтр по возможности бронирования. Числовое значение вне 0/1 даёт пустой список с HTTP 200; нечисловое игнорируется. |
query[view_only_hostess] | URL | Фильтр видимости объекта. Числовое значение вне 0/1 даёт пустой список с HTTP 200; нечисловое игнорируется. |
query[floor_enable] | URL | При 1 оставить объекты включённых залов. Проверяется только при отсутствии непустого query[floorid]. |
query[floor_only_hostes] | URL | Фильтр видимости зала. Имя содержит hostes с одной s. Числовое значение вне 0/1 даёт пустой список с HTTP 200; нечисловое игнорируется. |
HTTP 200
application/json{
"method": "items",
"requestDate": 1791882000,
"responseData": [
{
"id": 101,
"checked": 1,
"userid": 15,
"priority": 1,
"created": "2026-10-01 12:00:00",
"last_updated": "2026-10-13 09:00:00",
"floorid": 10,
"number": "12",
"count_min": 1,
"count_max": 4,
"text": "У окна",
"type": "table",
"reserve": 1,
"view_only_hostess": 0,
"group_reserve": 1,
"images": []
}
],
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}GET/items/{id}Получить объект бронирования
При отсутствии объекта или неположительном ID возвращается HTTP 200 с responseData: [], а не 404.
Необходимое право ключа: Список объектов и залов
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
idобязательный | Путь | Внутренний идентификатор записи, не её номер для гостя. |
HTTP 200
application/json{
"method": "items",
"requestDate": 1791882000,
"responseData": {
"id": 101,
"checked": 1,
"userid": 15,
"priority": 1,
"created": "2026-10-01 12:00:00",
"last_updated": "2026-10-13 09:00:00",
"floorid": 10,
"number": "12",
"count_min": 1,
"count_max": 4,
"text": "У окна",
"type": "table",
"reserve": 1,
"view_only_hostess": 0,
"group_reserve": 1,
"images": []
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}PUT/items/{id}Изменить объект бронирования
Обновляет переданные поля объекта. Для chair вместимость приводится к 1/1. При совпадении номера с другим объектом того же типа в том же зале другому объекту присваивается прежний номер изменяемого объекта. Связанные брони синхронизируются. Отсутствующий объект или зал — 404; неверные значения и отсутствие изменений — 405.
Необходимое право ключа: Изменить объект
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
idобязательный | Путь | Внутренний идентификатор записи, не её номер для гостя. |
Тело запроса обязательное
Для прямого PUT тело передаётся в application/json. Для формы используйте POST с X-HTTP-Method: PUT.
application/json
Частичное обновление. Все поля необязательны, но хотя бы одно значение должно отличаться от сохранённого; иначе 405. Неизвестные поля игнорируются.
typeТолько встроенный тип. Пользовательские ключи custom… из /itemTypes здесь не принимаются; отсутствие поля сохраняет текущий тип.
Примеры: "table"
flooridИдентификатор существующего зала текущего заведения.
Примеры: 10
numberНомер или обозначение объекта; после удаления пробелов по краям значение не должно быть пустым.
Примеры: "12"
count_minМинимальное число гостей; не больше count_max. Для chair устанавливается 1.
count_maxМаксимальное число гостей; не меньше count_min. Для chair устанавливается 1.
textОписание; пробелы по краям удаляются, текст обрезается до 1000 символов. Превышение длины не вызывает ошибку.
checkedВключить/выключить объект.
reserveРазрешить/запретить бронирование.
group_reserveРазрешить/запретить групповое бронирование.
view_only_hostessПоказывать только сотруднику.
{
"number": "12",
"count_min": 1,
"count_max": 4,
"text": "У окна",
"checked": 1
}HTTP 200
application/json{
"method": "items",
"requestDate": 1791882000,
"responseData": {
"id": 101,
"checked": 1,
"userid": 15,
"priority": 1,
"created": "2026-10-01 12:00:00",
"last_updated": "2026-10-13 09:00:00",
"floorid": 10,
"number": "12",
"count_min": 1,
"count_max": 4,
"text": "У окна",
"type": "table",
"reserve": 1,
"view_only_hostess": 0,
"group_reserve": 1,
"images": []
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 404
application/jsonМаршрут, метод или запрошенная сущность не найдены; см. особенности конкретной операции.
HTTP 405
application/jsonОперация не поддерживается либо параметры запроса или состояние записи не позволяют её выполнить. Конкретные условия указаны в описании операции.
GET/hallsПолучить залы
Залы текущего заведения, по возрастанию ID, до 400 на странице. Фильтры принимаются только внутри query. Неверные числовые фильтры дают [] с HTTP 200. totalPages всегда 1.
Необходимое право ключа: Список объектов и залов
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
page | URL | Страница списка по 400 записей. Неположительное или отсутствующее значение заменяется на 1. |
query[checked] | URL | При 1 вернуть только включённые залы; 0/отсутствие не фильтрует. |
query[banquet] | URL | Фильтр банкетных залов. Число вне 0/1 даёт [], нечисловое значение игнорируется. |
query[query_view_only_hostess] | URL | Фильтр видимости зала; повтор query в имени обязателен. Число вне 0/1 даёт [], нечисловое значение игнорируется. |
HTTP 200
application/json{
"method": "halls",
"requestDate": 1791882000,
"responseData": [
{
"id": 10,
"checked": 1,
"userid": 15,
"priority": 1,
"created": "2026-10-01 12:00:00",
"last_updated": "2026-10-13 09:00:00",
"name": "Основной зал",
"banquet": 0,
"count_min": 1,
"count_max": 50,
"text": "",
"view_only_hostess": 0
}
],
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}GET/halls/{id}Получить зал
При отсутствии зала или неположительном ID возвращается HTTP 200 с responseData: [], а не 404.
Необходимое право ключа: Список объектов и залов
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
idобязательный | Путь | Внутренний идентификатор записи, не её номер для гостя. |
HTTP 200
application/json{
"method": "halls",
"requestDate": 1791882000,
"responseData": {
"id": 10,
"checked": 1,
"userid": 15,
"priority": 1,
"created": "2026-10-01 12:00:00",
"last_updated": "2026-10-13 09:00:00",
"name": "Основной зал",
"banquet": 0,
"count_min": 1,
"count_max": 50,
"text": "",
"view_only_hostess": 0
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}Справочники3 метода
GET/itemTypesПолучить типы объектов
Возвращает словарь стандартных и пользовательских типов объектов заведения. Названия передаются обычным текстом; если для пользовательского типа нет перевода на выбранный язык, используется первый доступный перевод. Язык передавайте как query[lang]; параметр lang без query не применяется. Недоступный язык возвращает HTTP 500 с error: Language not found.
Необходимое право ключа: Список объектов и залов
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
query[lang] | URL | Язык справочника. Допустимые значения: arTranslate, azTranslate, chTranslate, deTranslate, en, enTranslate, esTranslate, frTranslate, jaTranslate, kaTranslate, koTranslate, lvTranslate, ru, zhTranslate. Примеры: |
HTTP 200
application/json{
"method": "itemTypes",
"requestDate": 1791882000,
"responseData": {
"table": "Стол",
"chair": "Стул",
"customTerrace": "Терраса"
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 500
application/jsonОшибка обработки запроса.
GET/tagsПолучить метки бронирования
Возвращает сохранённые метки организации; если список не настроен или пуст, используется стандартный набор. Язык применяется к стандартному набору; неизвестный язык использует ru. Плоские checked и lang имеют приоритет над query[checked] и query[lang]. Отсутствующая организация — 404 с ошибкой внутри responseData.
Необходимое право ключа: Список доступных меток
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
checked | URL | При 1 оставить включённые метки; 0/отсутствие не фильтрует. |
query[checked] | URL | Альтернатива checked с меньшим приоритетом. |
lang | URL | Язык стандартных меток. |
query[lang] | URL | Альтернатива lang с меньшим приоритетом. |
HTTP 200
application/json{
"method": "tags",
"requestDate": 1791882000,
"responseData": {
"vip": {
"key": "vip",
"text": "VIP",
"checked": 1
}
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 404
application/jsonОрганизация не найдена; сообщение об ошибке находится в responseData.error.
{
"method": "tags",
"requestDate": 1791882000,
"responseData": {
"error": "Organization not found"
},
"page": 1,
"totalPages": 1
}GET/infoПолучить настройки заведения и ключа
Информация о заведении, организации, параметрах текущего API-ключа и активной лицензии. Отсутствующее заведение или организация — HTTP 405.
Необходимое право ключа: Информация о заведении
HTTP 200
application/json{
"method": "info",
"requestDate": 1791882000,
"responseData": {
"address": {
"id": 20,
"orgid": 1,
"city": "Москва",
"address": "Примерная улица, 1",
"time_zone": "Europe/Moscow",
"cancel_reason_required": 0,
"time_now": "2026-10-13 12:00:00",
"UTC": "+03:00"
},
"organization": {
"id": 1,
"name": "Демо",
"subdomain": "demo",
"widget": "demo.restoplace.ws"
},
"apikey": {
"type": "api",
"type_reserve": "autotable",
"length": 120,
"shift": 30
},
"license": {
"name": "PRO+",
"test": 0,
"paid": 1,
"date_end": "2026-12-31 23:59:59"
}
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 405
application/jsonОперация не поддерживается либо параметры запроса или состояние записи не позволяют её выполнить. Конкретные условия указаны в описании операции.
Депозиты1 метод
POST/depositРассчитать депозит
Рассчитывает депозит для одного/нескольких объектов либо листа ожидания. При waitlist=false все item_ids должны существовать в текущем заведении; повторяющиеся ID также приводят к 404. Начало/конец обязательны, ошибки формата возвращают 405. Передавайте to позже from: отдельная ошибка для обратного порядка дат не возвращается. Бронь и платёж не создаются.
Необходимое право ключа: Расчёт депозита
Тело запроса обязательное
application/json
Необходимы начало и конец интервала (основные имена или альтернативные). Для расчёта по объектам необходим item_ids; для waitlist=true он необязателен.
item_idsID объектов текущего заведения. Обязателен непустой массив, если waitlist=false; ID должны существовать и не повторяться.
Числовой идентификатор. В GET-ответах значение может быть числом или числовой строкой.
Примеры: 42, "42"
fromНачало интервала. Имеет приоритет над time_from, если непустое. Локальное время YYYY-MM-DD HH:mm:ss либо YYYY-MM-DDTHH:mm:ss±HH:mm. Обе даты должны использовать один формат. RFC3339 принимается без долей секунды и с явным смещением; Z не поддерживается. Время с явным смещением переводится в часовой пояс заведения.
Примеры: "2026-10-20 18:00:00", "2026-10-20T18:00:00+03:00"
toКонец интервала. Имеет приоритет над time_to, если непустое. Локальное время YYYY-MM-DD HH:mm:ss либо YYYY-MM-DDTHH:mm:ss±HH:mm. Обе даты должны использовать один формат. RFC3339 принимается без долей секунды и с явным смещением; Z не поддерживается. Время с явным смещением переводится в часовой пояс заведения.
Примеры: "2026-10-20 18:00:00", "2026-10-20T18:00:00+03:00"
time_fromАльтернативное имя from, используется при отсутствии/пустом from.
Примеры: "2026-10-20 18:00:00", "2026-10-20T18:00:00+03:00"
time_toАльтернативное имя to, используется при отсутствии/пустом to.
Примеры: "2026-10-20 18:00:00", "2026-10-20T18:00:00+03:00"
countЧисло гостей. Если значение не числовое или меньше 1, используется 1.
Примеры: 2
waitlistРасчёт для листа ожидания; item_ids не проверяется.
importantФлаг important, передаваемый в расчёт депозита.
Все условия одновременно (allOf)
Хотя бы один вариант (anyOf)
Обязательные поля: from.
Обязательные поля: time_from.
Хотя бы один вариант (anyOf)
Обязательные поля: to.
Обязательные поля: time_to.
Условное правило
waitlist обязательноеБез дополнительных ограничений.
item_ids обязательное{
"item_ids": [
101
],
"from": "2026-10-20 18:00:00",
"to": "2026-10-20 20:00:00",
"count": 2
}{
"waitlist": true,
"time_from": "2026-10-20T18:00:00+03:00",
"time_to": "2026-10-20T20:00:00+03:00",
"count": 2
}HTTP 200
application/json{
"method": "deposit",
"requestDate": 1791882000,
"responseData": {
"deposit": 2000,
"depositTotal": 2000,
"depositTip": 0,
"depositTax": 0,
"depositText": "Депозит 2000 ₽"
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 404
application/jsonМаршрут, метод или запрошенная сущность не найдены; см. особенности конкретной операции.
HTTP 405
application/jsonОперация не поддерживается либо параметры запроса или состояние записи не позволяют её выполнить. Конкретные условия указаны в описании операции.
Доступность2 метода
GET/timesПолучить временные слоты на дату
Учитывает расписание, ограничения бронирования, занятость объектов и вместимость. Для ключа с ограниченными правами требуется times_read. Неверная или отсутствующая date возвращает HTTP 405.
Необходимое право ключа: Свободное время
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
dateобязательный | URL | Дата рабочего дня заведения в формате YYYY-MM-DD. Примеры: |
floorid | URL | ID зала; 0 означает все доступные залы. |
length | URL | Длительность слота в минутах. Значения 10–1440 применяются; остальные заменяются настройкой API заведения, затем 120. В режиме фиксированных интервалов используются интервалы расписания. Примеры: |
shift | URL | Шаг начала слотов в минутах. Значения 10–1440 применяются; остальные заменяются настройкой API заведения, затем выбранной длительностью length. В режиме фиксированных интервалов используются интервалы расписания. Примеры: |
dateFormat | URL | RFC3339 меняет только from/to слотов на RFC3339; другие значения оставляют YYYY-MM-DD HH:mm:ss. Примеры: |
count | URL | При положительном значении остаются только свободные слоты, подходящие для указанного числа гостей. |
extended | URL | 1 или другое ненулевое целое включает расширенный ответ с расписанием, слотами и статистикой. Примеры: |
include_tables_info | URL | 1 (или иное ненулевое целое) добавляет информацию о свободных объектах в tables_info при наличии данных. Примеры: |
HTTP 200
application/jsonСлоты рабочего дня. Без extended возвращается массив; при extended=1 — расширенный объект. Без count присутствуют как свободные, так и занятые слоты.
{
"method": "times",
"requestDate": 1791880200,
"responseData": [
{
"from": "2026-10-20 18:00:00",
"to": "2026-10-20 20:00:00",
"free": true,
"counts": {
"2": "free",
"3": "free",
"4": "free"
},
"free_tables": {
"2": [
"123"
],
"3": [
"123"
],
"4": [
"123"
]
}
}
],
"page": 1,
"totalPages": 1
}{
"method": "times",
"requestDate": 1791880200,
"responseData": {
"date_info": {
"date": "2026-10-20",
"day_of_week": "вторник",
"day_of_week_num": 2,
"is_working": true
},
"work_hours": {
"open": "18:00",
"close": "20:00",
"open_datetime": "2026-10-20 18:00:00",
"close_datetime": "2026-10-20 20:00:00"
},
"summary": {
"total_slots": 1,
"free_slots": 1,
"busy_slots": 0,
"has_availability": true,
"filter_count": 4
},
"times": [
{
"from": "2026-10-20 18:00:00",
"to": "2026-10-20 20:00:00",
"free": true,
"counts": {
"2": "free",
"3": "free",
"4": "free"
},
"free_tables": {
"2": [
"123"
],
"3": [
"123"
],
"4": [
"123"
]
}
}
],
"meta": {
"timezone": "Europe/Moscow",
"current_time": "2026-10-13 12:30:00"
}
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 405
application/jsonНекорректная или отсутствующая date: Invalid date.
HTTP 500
application/jsonОшибка обработки запроса.
GET/availabilityПроверить доступность интервала
Проверяет указанный интервал и ищет альтернативы. from/to обязательны и должны использовать одинаковый формат; время без смещения трактуется в часовом поясе заведения. Неправильный формат или отсутствие границ — HTTP 405; недоступность выбранного интервала — HTTP 200. Альтернативы не резервируют объекты. При item_ids проверяется свобода всех выбранных объектов; count не проверяет вместимость конкретно выбранных объектов.
Необходимое право ключа: Свободное время
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
fromобязательный | URL | Обязательное начало интервала; без часового пояса используется часовой пояс заведения. Дата и время: локальный формат YYYY-MM-DD HH:mm:ss либо RFC3339 при dateFormat=RFC3339. Хотя бы один вариант (anyOf) Вариант 1 Примеры: Вариант 2 Примеры: |
toобязательный | URL | Обязательное окончание интервала. from и to должны быть в одинаковом формате. Дата и время: локальный формат YYYY-MM-DD HH:mm:ss либо RFC3339 при dateFormat=RFC3339. Хотя бы один вариант (anyOf) Вариант 1 Примеры: Вариант 2 Примеры: |
count | URL | Количество гостей; положительное значение включает проверку вместимости. При item_ids проверяется доступность выбранных объектов без проверки их вместимости для count. |
item_ids | URL | ID конкретных объектов через запятую. Для передачи массива используйте item_ids[]=123&item_ids[]=456. Примеры: |
floorid | URL | ID зала; 0 означает все залы. |
alternatives_count | URL | Ориентир для числа альтернатив, а не жёсткий общий лимит. В рабочий день возвращается до 3 вариантов раньше, до 3 позже и минимум 1 вариант в другие дни при наличии; поиск до 14 дней вперёд. Для альтернатив в рабочий день длительность ограничивается 480 минутами. |
dateFormat | URL | RFC3339 включает RFC3339 в ответе; любое другое значение оставляет YYYY-MM-DD HH:mm:ss. Примеры: |
HTTP 200
application/jsonРезультат проверки доступности. Статусы past_time, invalid_time, closed и unavailable также возвращаются с HTTP 200; проверяйте поля available и status.
{
"method": "availability",
"requestDate": 1791880200,
"responseData": {
"available": false,
"status": "invalid_time",
"message": "Время окончания должно быть позже времени начала",
"suggestion": "Уточните корректный временной интервал",
"requested": {
"from": "2026-10-20 18:00:00",
"to": "2026-10-20 17:00:00",
"date": "2026-10-20",
"time_from": "18:00",
"time_to": "17:00",
"day_of_week": "вторник",
"duration_minutes": 60,
"count": 4,
"item_ids": null
},
"work_hours": null,
"free_tables": [],
"alternatives": [],
"meta": {
"timezone": "Europe/Moscow",
"current_time": "2026-10-13 12:30:00"
}
},
"page": 1,
"totalPages": 1
}{
"method": "availability",
"requestDate": 1791882000,
"responseData": {
"available": true,
"status": "available",
"message": "Время свободно для бронирования",
"suggestion": "Можно переходить к оформлению брони",
"requested": {
"from": "2026-11-02 18:00:00",
"to": "2026-11-02 20:00:00",
"date": "2026-11-02",
"time_from": "18:00",
"time_to": "20:00",
"day_of_week": "понедельник",
"duration_minutes": 120,
"count": 2,
"item_ids": null
},
"work_hours": {
"is_working": true,
"date": "2026-11-02",
"open": "10:00",
"close": "23:00",
"open_datetime": "2026-11-02 10:00:00",
"close_datetime": "2026-11-02 23:00:00"
},
"free_tables": [
{
"id": 42,
"name": "Стол №12",
"number": "12",
"capacity": {
"min": 1,
"max": 4
},
"floor": {
"id": 3,
"name": "Основной зал"
},
"type": "table",
"type_name": "Стол",
"text": "Стол у окна"
}
],
"alternatives": {
"earlier": [],
"later": [],
"same_time_other_days": [],
"summary": {
"has_earlier": false,
"has_later": false,
"has_other_days": false,
"total_options": 0,
"best_option": null
}
},
"meta": {
"timezone": "Europe/Moscow",
"current_time": "2026-10-13 12:00:00"
}
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 405
application/jsonОтсутствуют from/to либо неверен формат даты: Не указан параметр from; Не указан параметр to; Ошибка в поле from; Ошибка в поле to.
HTTP 500
application/jsonОшибка обработки запроса.
События2 метода
GET/eventsСписок событий
События заведения по возрастанию id. Фильтр query[active] сравнивает окончание события с текущим временем заведения. Поле totalPages не отражает фактическое число страниц справочника.
Необходимое право ключа: События
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
page | URL | Страница списка по 400 записей. Неположительное или отсутствующее значение заменяется на 1. |
query[checked] | URL | Включено ли событие: 1 — включено, 0 — выключено. |
query[active] | URL | 1 — time_to позже сейчас; 0 — time_to не позже сейчас. |
HTTP 200
application/jsonСписок записей.
{
"method": "events",
"requestDate": 1791882000,
"responseData": [
{
"id": 42,
"checked": 1,
"number": 8,
"name": "Музыкальный вечер",
"text": "Живая музыка в основном зале",
"time_from": "2026-11-02 19:00:00",
"time_to": "2026-11-02 22:00:00",
"price": 1500,
"count": 40,
"images": []
}
],
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 500
application/jsonОшибка обработки запроса.
GET/events/{id}Получить событие
Возвращает событие заведения по id. Если событие не найдено, ответ содержит HTTP 200 и responseData: [].
Необходимое право ключа: События
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
idобязательный | Путь | Внутренний идентификатор записи, не её номер для гостя. |
HTTP 200
application/jsonЗапись либо [] при отсутствии.
{
"method": "events",
"requestDate": 1791882000,
"responseData": {
"id": 42,
"checked": 1,
"number": 8,
"name": "Музыкальный вечер",
"text": "Живая музыка в основном зале",
"time_from": "2026-11-02 19:00:00",
"time_to": "2026-11-02 22:00:00",
"price": 1500,
"count": 40,
"images": []
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 500
application/jsonОшибка обработки запроса.
Билеты6 методов
GET/ticketsСписок билетов
Билеты заведения по возрастанию id. Некорректные значения поддерживаемых фильтров могут возвращать HTTP 200 и responseData: [].
Необходимое право ключа: Список билетов
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
page | URL | Страница списка по 400 записей. Неположительное или отсутствующее значение заменяется на 1. |
updatedAfterTime | URL | Возвращает билеты, изменённые строго после указанного момента. Передайте Unix timestamp в секундах; 0 или отсутствие параметра отключают фильтр. |
query[ticket_id] | URL | Номер билета в заведении (не id записи). |
query[phone] | URL | Телефон; приводится к целому. Примеры: |
query[email] | URL | Точное совпадение email. |
query[status] | URL | Код статуса. |
query[event_id] | URL | ID события. |
query[paymentPaid] | URL | Платные билеты (paymentPrice>0) с указанным paymentPaid. |
query[date] | URL | Пересечение с рабочим днём заведения. В нерабочую/невалидную дату список пуст. |
query[createdDate] | URL | Дата создания с 00:00:00 до 23:59:59 в часовом поясе сервера, без пересчёта в часовой пояс заведения. |
HTTP 200
application/jsonСписок записей.
{
"method": "tickets",
"requestDate": 1791882000,
"responseData": [
{
"id": 901,
"ticket_id": 17,
"event_id": 42,
"event_name": "Музыкальный вечер",
"status": 2,
"name": "Иван",
"phone": "79990000000",
"email": "guest@example.com",
"time_from": "2026-11-02 19:00:00",
"time_to": "2026-11-02 22:00:00",
"paymentPrice": 1500,
"paymentTotal": 1500,
"paymentPaid": 1,
"paymentRefund": 0,
"tags": [
"vip"
]
}
],
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 500
application/jsonОшибка обработки запроса.
POST/ticketsСоздать билеты
Создаёт один или несколько билетов на одно событие. Цена и условия оплаты рассчитываются по настройкам события и заведения. Требуется ключ типа api. Неизвестные поля отклоняются. Idempotency-Key не поддерживается: повторный запрос может создать новые билеты. Если ответ не получен, проверьте список билетов перед повторной отправкой.
Необходимое право ключа: Создавать и изменять билеты
Тело запроса обязательное
application/json / application/x-www-form-urlencoded
Email обязателен, если это требуется настройками продажи билетов заведения. При покупке проверяются доступность события, мест и зон, а также применимость скидок и меток. Неизвестные поля и массивы или объекты в обычных полях отклоняются; форматы tags и persones описаны отдельно.
api_keyНеобязательный альтернативный способ передачи ключа (вместо X-API-Key).
name обязательноеИмя гостя.
Примеры: "Иван"
phone обязательноеТелефон гостя.
Примеры: "79990000000"
emailEmail гостя.
Примеры: "guest@example.com"
textКомментарий.
tagsКлючи меток массивом или CSV. Пробелы по краям удаляются, повторы и пустые ключи исключаются. Итоговый CSV не длиннее 255 байт. В PUT отсутствие поля сохраняет метки, [] или пустая строка очищают. Новые назначения проверяются по активным меткам организации; существующие отключённые можно сохранить, удалённые исключаются при явном новом наборе.
Ровно один вариант (oneOf)
Примеры: "vip,birthday"
[
"vip",
"birthday"
][]sourceИсточник покупки.
deposit_paidФлаг 0/1; принимаются строки «0»/«1» и boolean.
0 — ссылка на оплату платной покупки; 1 — зафиксировать внешнюю оплату. Цена рассчитывается по настройкам события и заведения.
promocodeПромокод.
allergy_textСведения об аллергии; добавляются к комментарию.
event_id обязательноеПоложительное целое в диапазоне, поддерживаемом API. Можно передать числовую строку без ведущих нулей; значение за пределами диапазона отклоняется с HTTP 400.
Ровно один вариант (oneOf)
ID события заведения.
countМаксимум 20 билетов; настройки заведения могут ограничивать число билетов в одной покупке сильнее.
Ровно один вариант (oneOf)
personesГости по индексам билетов. Для зонального события нужны zone_id в элементах.
Индекс 0 — первый билет (покупатель), остальные — дополнительные билеты.
zone_idПоложительное целое в диапазоне, поддерживаемом API. Можно передать числовую строку без ведущих нулей; значение за пределами диапазона отклоняется с HTTP 400.
Ровно один вариант (oneOf)
Зона билета. Для зонального события передаётся каждому гостю, включая индекс 0.
nameИмя владельца этого билета; иначе используется общее name.
allergy_textАллергии этого гостя.
certificateКод сертификата для скидки или оплаты.
allergyУстаревшее поле сведений об аллергии. Для подробного описания используйте allergy_text.
Поля, не перечисленные в этой схеме, запрещены.
Примеры для application/json:
{
"event_id": 42,
"count": 1,
"name": "Иван",
"phone": "79990000000",
"email": "guest@example.com",
"tags": [
"vip"
],
"deposit_paid": 0
}Примеры для application/x-www-form-urlencoded:
{
"event_id": 42,
"count": 1,
"name": "Иван",
"phone": "79990000000",
"email": "guest@example.com",
"tags": [
"vip"
],
"deposit_paid": 0
}HTTP 200
application/jsonРезультат операции.
{
"method": "tickets",
"requestDate": 1791882000,
"responseData": {
"id": 901,
"number": 17,
"guid": "00000000-0000-4000-8000-000000000901",
"tags": [
"vip"
],
"paymentPrice": 1500,
"paymentPaid": 1,
"payment_wait_to": "",
"payment_link": "",
"tickets": [
{
"id": 901,
"ticket_id": 17,
"number": 17,
"tags": [
"vip"
],
"paymentPrice": 1500,
"paymentPaid": 1
}
]
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 500
application/jsonОшибка обработки запроса.
HTTP 400
application/jsonНекорректные параметры или нарушение условий выполнения операции.
HTTP 404
application/jsonМаршрут, метод или запрошенная сущность не найдены; см. особенности конкретной операции.
HTTP 405
application/jsonОперация не поддерживается либо параметры запроса или состояние записи не позволяют её выполнить. Конкретные условия указаны в описании операции.
HTTP 502
application/jsonНе удалось подтвердить результат операции. Проверьте состояние записи перед повторным запросом.
GET/tickets/{id}Получить билет
Используйте идентификатор id из ответа API, а не номер ticket_id. Если билет не найден в заведении, ответ содержит HTTP 200 и responseData: [].
Необходимое право ключа: Список билетов
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
idобязательный | Путь | Внутренний идентификатор записи, не её номер для гостя. |
HTTP 200
application/jsonЗапись либо [] при отсутствии.
{
"method": "tickets",
"requestDate": 1791882000,
"responseData": {
"id": 901,
"ticket_id": 17,
"event_id": 42,
"event_name": "Музыкальный вечер",
"status": 2,
"name": "Иван",
"phone": "79990000000",
"email": "guest@example.com",
"time_from": "2026-11-02 19:00:00",
"time_to": "2026-11-02 22:00:00",
"paymentPrice": 1500,
"paymentTotal": 1500,
"paymentPaid": 1,
"paymentRefund": 0,
"tags": [
"vip"
]
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 500
application/jsonОшибка обработки запроса.
PUT/tickets/{id}Изменить данные билета
Изменяет переданные контактные данные, комментарий и метки; необходимо минимум одно поле. Требуется ключ типа api. Неизвестные поля отклоняются. Idempotency-Key не поддерживается: каждый запрос выполняется отдельно. Если ответ не получен, проверьте билет перед повторной отправкой.
Необходимое право ключа: Создавать и изменять билеты
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
idобязательный | Путь | Внутренний идентификатор записи, не её номер для гостя. |
Тело запроса обязательное
Для прямого PUT тело передаётся в application/json. Для формы используйте POST с X-HTTP-Method: PUT.
application/json
Хотя бы одно изменяемое поле. Неотправленные поля сохраняются; финансовые и неизвестные поля отклоняются.
api_keyНеобязательный альтернативный способ передачи ключа (вместо X-API-Key).
nameИмя гостя.
Примеры: "Иван"
phoneТелефон гостя; после удаления разделителей номер не должен быть пустым.
Примеры: "79990000000"
emailEmail гостя; для непустого значения проверяется корректность адреса.
Примеры: "guest@example.com"
textКомментарий.
tagsКлючи меток массивом или CSV. Пробелы по краям удаляются, повторы и пустые ключи исключаются. Итоговый CSV не длиннее 255 байт. В PUT отсутствие поля сохраняет метки, [] или пустая строка очищают. Новые назначения проверяются по активным меткам организации; существующие отключённые можно сохранить, удалённые исключаются при явном новом наборе.
Ровно один вариант (oneOf)
Примеры: "vip,birthday"
[
"vip",
"birthday"
][]Поля, не перечисленные в этой схеме, запрещены.
Хотя бы один вариант (anyOf)
Обязательные поля: name.
Обязательные поля: phone.
Обязательные поля: email.
Обязательные поля: text.
Обязательные поля: tags.
{
"tags": []
}HTTP 200
application/jsonРезультат операции.
{
"method": "tickets",
"requestDate": 1791882000,
"responseData": {
"tags": "vip",
"id": 901
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 500
application/jsonОшибка обработки запроса.
HTTP 400
application/jsonНекорректные параметры или нарушение условий выполнения операции.
HTTP 404
application/jsonМаршрут, метод или запрошенная сущность не найдены; см. особенности конкретной операции.
HTTP 405
application/jsonОперация не поддерживается либо параметры запроса или состояние записи не позволяют её выполнить. Конкретные условия указаны в описании операции.
HTTP 502
application/jsonНе удалось подтвердить результат операции. Проверьте состояние записи перед повторным запросом.
PUT/tickets/{id}/statusИзменить статус билета
Изменяет статус билета; доступные переходы зависят от текущего статуса. Для возврата оплаты нужны status=6, refund_payment=1 и refund_amount>0. Проверяйте refund.success: отмена билета не гарантирует успешный возврат. Требуется ключ типа api. Неизвестные поля отклоняются. Idempotency-Key не поддерживается: каждый запрос выполняется отдельно. Если ответ не получен, проверьте билет перед повторной отправкой.
Необходимое право ключа: Создавать и изменять билеты
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
idобязательный | Путь | Внутренний идентификатор записи, не её номер для гостя. |
Тело запроса обязательное
Для прямого PUT тело передаётся в application/json. Для формы используйте POST с X-HTTP-Method: PUT.
application/json
Возврат только при status=6, refund_payment=1 и refund_amount>0. При refund_payment=0 сумма игнорируется.
api_keyНеобязательный альтернативный способ передачи ключа (вместо X-API-Key).
status обязательноеЦелевой статус; переход должен быть допустимым для текущего состояния билета.
refund_paymentФлаг 0/1; принимаются строки «0»/«1» и boolean.
1 — запросить возврат при status=6; иначе возврата нет.
refund_amountПри refund_payment=1 обязательна конечная сумма больше 0. Без флага сумма игнорируется. Размер возврата может быть ограничен суммой платежа и правилами платёжного провайдера.
cancel_reasonКод причины отмены; 1 — произвольный текст.
cancel_reason_textТекст причины отмены.
Поля, не перечисленные в этой схеме, запрещены.
Все условия одновременно (allOf)
Условное правило
refund_payment обязательноеstatusrefund_amount обязательноеКонечное числовое значение строго больше нуля. Числовые строки принимаются; ноль, отрицательные значения и бесконечность запрещены.
Ровно один вариант (oneOf)
{
"status": 6,
"refund_payment": 0,
"cancel_reason": 1,
"cancel_reason_text": "По просьбе гостя"
}HTTP 200
application/jsonРезультат операции.
{
"method": "tickets",
"requestDate": 1791882000,
"responseData": {
"id": 901,
"status": 6
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 500
application/jsonОшибка обработки запроса.
HTTP 400
application/jsonНекорректные параметры или нарушение условий выполнения операции.
HTTP 404
application/jsonМаршрут, метод или запрошенная сущность не найдены; см. особенности конкретной операции.
HTTP 405
application/jsonОперация не поддерживается либо параметры запроса или состояние записи не позволяют её выполнить. Конкретные условия указаны в описании операции.
HTTP 502
application/jsonНе удалось подтвердить результат операции. Проверьте состояние записи перед повторным запросом.
PUT/tickets/{id}/changeПеренести билет на другое событие
Создаёт билет на другое событие или в другой зоне с метками исходного билета. Поле id в ответе относится к новому билету; deposit_paid определяет способ доплаты. Требуется ключ типа api. Неизвестные поля отклоняются. Idempotency-Key не поддерживается: каждый запрос выполняется отдельно. Если ответ не получен, проверьте билеты перед повторной отправкой.
Необходимое право ключа: Создавать и изменять билеты
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
idобязательный | Путь | Внутренний идентификатор записи, не её номер для гостя. |
Тело запроса обязательное
Для прямого PUT тело передаётся в application/json. Для формы используйте POST с X-HTTP-Method: PUT.
application/json
Создаёт новый билет и наследует метки исходного. Перенос допустим для активного билета со статусом 1–4, который ещё не переносился. То же событие допустимо при смене зоны. В ответе id нового билета.
api_keyНеобязательный альтернативный способ передачи ключа (вместо X-API-Key).
event_id обязательноеПоложительное целое в диапазоне, поддерживаемом API. Можно передать числовую строку без ведущих нулей; значение за пределами диапазона отклоняется с HTTP 400.
Ровно один вариант (oneOf)
ID целевого события заведения.
zone_idПоложительное целое в диапазоне, поддерживаемом API. Можно передать числовую строку без ведущих нулей; значение за пределами диапазона отклоняется с HTTP 400.
Ровно один вариант (oneOf)
Зона для события с разделением мест по зонам. Если поле не передано, используется 0.
reasonКод причины переноса.
reason_textТекст причины.
deposit_paidФлаг 0/1; принимаются строки «0»/«1» и boolean.
Доплата: 1 — внешняя оплата; 0 — сформировать оплату.
Поля, не перечисленные в этой схеме, запрещены.
{
"event_id": 43,
"reason": 1,
"reason_text": "Другая дата",
"deposit_paid": 0
}HTTP 200
application/jsonРезультат операции.
{
"method": "tickets",
"requestDate": 1791882000,
"responseData": {
"id": 902,
"number": 18,
"guid": "00000000-0000-4000-8000-000000000902",
"tags": [
"vip"
],
"paymentPrice": 1500,
"paymentPaid": 1,
"payment_link": ""
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 500
application/jsonОшибка обработки запроса.
HTTP 400
application/jsonНекорректные параметры или нарушение условий выполнения операции.
HTTP 404
application/jsonМаршрут, метод или запрошенная сущность не найдены; см. особенности конкретной операции.
HTTP 405
application/jsonОперация не поддерживается либо параметры запроса или состояние записи не позволяют её выполнить. Конкретные условия указаны в описании операции.
HTTP 502
application/jsonНе удалось подтвердить результат операции. Проверьте состояние записи перед повторным запросом.
Сертификаты9 методов
GET/certificatesСписок видов сертификатов
Справочник видов сертификатов заведения по возрастанию id. Для купленных сертификатов используйте /issuedCertificates. Поисковые фильтры не поддерживаются. Поле totalPages не отражает фактическое число страниц справочника.
Необходимое право ключа: Список сертификатов
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
page | URL | Страница списка по 400 записей. Неположительное или отсутствующее значение заменяется на 1. |
HTTP 200
application/jsonСписок записей.
{
"method": "certificates",
"requestDate": 1791882000,
"responseData": [
{
"id": 42,
"checked": 1,
"name": "Подарочный сертификат",
"price": 5000,
"validity_count": 1,
"validity_type": "months",
"increase": 0
}
],
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 500
application/jsonОшибка обработки запроса.
GET/certificates/{id}Получить вид сертификата
Возвращает вид сертификата заведения по id. Если вид не найден, ответ содержит HTTP 200 и responseData: [].
Необходимое право ключа: Список сертификатов
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
idобязательный | Путь | Внутренний идентификатор записи, не её номер для гостя. |
HTTP 200
application/jsonЗапись либо [] при отсутствии.
{
"method": "certificates",
"requestDate": 1791882000,
"responseData": {
"id": 42,
"checked": 1,
"name": "Подарочный сертификат",
"price": 5000,
"validity_count": 1,
"validity_type": "months",
"increase": 0
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 500
application/jsonОшибка обработки запроса.
GET/issuedCertificatesСписок купленных сертификатов
Сертификаты гостей по возрастанию id, до 400 записей на страницу. Каждый сертификат содержит полное info, включая историю использования info.used. Некорректные значения поддерживаемых фильтров возвращают HTTP 200 и responseData: [].
Необходимое право ключа: Список сертификатов
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
page | URL | Страница списка по 400 записей. Неположительное или отсутствующее значение заменяется на 1. |
updatedAfterTime | URL | Изменены строго после Unix timestamp в секундах. 0 или отсутствие параметра отключают фильтр. |
query[number] | URL | Номер сертификата, включая буквы и ведущие нули. Передавайте строкой, не id записи. Примеры: |
query[phone] | URL | Телефон гостя: цифры без пробелов, скобок, дефисов и знака +. Примеры: |
query[email] | URL | Точное совпадение email. |
query[status] | URL | Код текущего статуса. |
query[certificate_id] | URL | ID вида сертификата из справочника /certificates. |
query[paymentPaid] | URL | Сертификаты с paymentPrice > 0 и указанным признаком оплаты. |
query[createdDate] | URL | Дата создания с 00:00:00 до 23:59:59 по московскому времени (UTC+3). |
HTTP 200
application/jsonСписок купленных сертификатов.
{
"method": "issuedCertificates",
"requestDate": 1791882000,
"responseData": [
{
"id": 812,
"number": "AB0012345",
"certificate_id": 42,
"certificate_name": "Подарочный сертификат",
"status": 2,
"start": "2026-10-13 00:00:00",
"end": "2026-11-13 23:59:59",
"name": "Иван",
"phone": "79990000000",
"email": "guest@example.com",
"tags": [
"vip"
],
"paymentPrice": 5000,
"paymentPriceTotal": 5000,
"paymentPaid": 1,
"paymentUsed": 0,
"paymentRefund": 0,
"currency": 643,
"info": {
"paid": [
{
"date": "2026-10-13 12:00:00",
"who": "0",
"price": 5000
}
]
}
}
],
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 500
application/jsonОшибка обработки запроса.
POST/issuedCertificatesСоздать сертификат
Создаёт один сертификат гостя. Стоимость и срок рассчитываются по настройкам вида сертификата и заведения. При deposit_paid=0 для платной покупки формируется ссылка оплаты; deposit_paid=1 фиксирует внешнюю оплату. Требуется ключ типа api. Неизвестные поля отклоняются. Idempotency-Key не поддерживается: повторный запрос считается новой командой. Если ответ потерян, проверьте сертификат перед повторной отправкой.
Необходимое право ключа: Создавать и изменять сертификаты
Тело запроса обязательное
application/json / application/x-www-form-urlencoded
Создание сертификата гостя. Неизвестные поля отклоняются. Дата начала и переменный номинал зависят от настроек заведения и вида сертификата.
api_keyНеобязательный альтернативный способ передачи ключа (вместо X-API-Key).
name обязательноеИмя гостя.
Примеры: "Иван"
phone обязательноеТелефон гостя.
Примеры: "79990000000"
email обязательноеEmail получателя; обязателен.
Примеры: "guest@example.com"
textКомментарий.
tagsКлючи меток массивом или CSV. Пробелы по краям удаляются, повторы и пустые ключи исключаются. Итоговый CSV не длиннее 255 байт. В PUT отсутствие поля сохраняет метки, [] или пустая строка очищают. Новые назначения проверяются по активным меткам организации; существующие отключённые можно сохранить, удалённые исключаются при явном новом наборе.
Ровно один вариант (oneOf)
Примеры: "vip,birthday"
[
"vip",
"birthday"
][]sourceИсточник покупки.
deposit_paidФлаг 0/1; принимаются строки «0»/«1» и boolean.
0 — сформировать ссылку оплаты для платной покупки; 1 — зафиксировать внешнюю оплату. Стоимость рассчитывается по настройкам сертификата и заведения.
promocodeПромокод.
allergy_textСведения об аллергии; добавляются к комментарию.
certificate_id обязательноеПоложительное целое в диапазоне, поддерживаемом API. Можно передать числовую строку без ведущих нулей; значение за пределами диапазона отклоняется с HTTP 400.
Ровно один вариант (oneOf)
ID вида сертификата вашего заведения из /certificates.
date_startНачало действия YYYY-MM-DD. Обязательно и учитывается, если в заведении разрешён выбор даты начала. Иначе используется текущий рабочий день заведения.
user_priceКонечное числовое значение строго больше нуля. Числовые строки принимаются; ноль, отрицательные значения и бесконечность запрещены.
Ровно один вариант (oneOf)
Номинал для вида сертификата с increase=1; в этом случае обязателен и не может быть меньше price из справочника. Для фиксированного номинала применяется цена вида.
Поля, не перечисленные в этой схеме, запрещены.
Примеры для application/json:
{
"certificate_id": 42,
"name": "Иван",
"phone": "79990000000",
"email": "guest@example.com",
"tags": [
"vip"
],
"deposit_paid": 0
}Примеры для application/x-www-form-urlencoded:
{
"certificate_id": 42,
"name": "Иван",
"phone": "79990000000",
"email": "guest@example.com",
"tags": [
"vip"
],
"deposit_paid": 0
}HTTP 200
application/jsonРезультат операции.
{
"method": "issuedCertificates",
"requestDate": 1791882000,
"responseData": {
"id": 812,
"number": "AB0012345",
"guid": "00000000-0000-4000-8000-000000000812",
"tags": [
"vip"
],
"paymentPrice": 5000,
"paymentPaid": 1,
"payment_wait_to": "2026-10-13 12:30:00",
"payment_link": ""
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 500
application/jsonОшибка обработки запроса.
HTTP 400
application/jsonНекорректные параметры или нарушение условий выполнения операции.
HTTP 404
application/jsonМаршрут, метод или запрошенная сущность не найдены; см. особенности конкретной операции.
HTTP 405
application/jsonОперация не поддерживается либо параметры запроса или состояние записи не позволяют её выполнить. Конкретные условия указаны в описании операции.
HTTP 502
application/jsonНе удалось подтвердить результат операции. Проверьте состояние записи перед повторным запросом.
GET/issuedCertificates/{id}Получить купленный сертификат
Используйте id из ответа API, а не number или certificate_id. Возвращает полное info, включая info.used. Если сертификат не найден в заведении, ответ содержит HTTP 200 и responseData: [].
Необходимое право ключа: Список сертификатов
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
idобязательный | Путь | Внутренний идентификатор записи, не её номер для гостя. |
HTTP 200
application/jsonСертификат либо [] при отсутствии.
{
"method": "issuedCertificates",
"requestDate": 1791882000,
"responseData": {
"id": 812,
"number": "AB0012345",
"certificate_id": 42,
"certificate_name": "Подарочный сертификат",
"status": 2,
"start": "2026-10-13 00:00:00",
"end": "2026-11-13 23:59:59",
"name": "Иван",
"phone": "79990000000",
"email": "guest@example.com",
"tags": [
"vip"
],
"paymentPrice": 5000,
"paymentPriceTotal": 5000,
"paymentPaid": 1,
"paymentUsed": 0,
"paymentRefund": 0,
"currency": 643,
"info": {
"paid": [
{
"date": "2026-10-13 12:00:00",
"who": "0",
"price": 5000
}
]
}
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 500
application/jsonОшибка обработки запроса.
PUT/issuedCertificates/{id}Изменить данные сертификата
Изменяет только переданные контакты, комментарий, метки и дату окончания; требуется хотя бы одно поле. Пропущенные поля сохраняются. Для погашения и отмены используйте отдельные команды. Требуется ключ типа api. Неизвестные поля отклоняются. Idempotency-Key не поддерживается: повторный запрос считается новой командой. Если ответ потерян, проверьте сертификат перед повторной отправкой.
Необходимое право ключа: Создавать и изменять сертификаты
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
idобязательный | Путь | Внутренний идентификатор записи, не её номер для гостя. |
Тело запроса обязательное
application/json
Хотя бы одно изменяемое поле. Неотправленные поля сохраняются; финансовые и неизвестные поля отклоняются.
api_keyНеобязательный альтернативный способ передачи ключа (вместо X-API-Key).
nameИмя гостя.
Примеры: "Иван"
phoneТелефон гостя; после удаления разделителей номер не должен быть пустым.
Примеры: "79990000000"
emailEmail гостя; для непустого значения проверяется корректность адреса.
Примеры: "guest@example.com"
textКомментарий.
tagsКлючи меток массивом или CSV. Пробелы по краям удаляются, повторы и пустые ключи исключаются. Итоговый CSV не длиннее 255 байт. В PUT отсутствие поля сохраняет метки, [] или пустая строка очищают. Новые назначения проверяются по активным меткам организации; существующие отключённые можно сохранить, удалённые исключаются при явном новом наборе.
Ровно один вариант (oneOf)
Примеры: "vip,birthday"
[
"vip",
"birthday"
][]endНовая дата окончания YYYY-MM-DD. Действует до 23:59:59 в часовом поясе заведения; не может быть в прошлом.
Поля, не перечисленные в этой схеме, запрещены.
Хотя бы один вариант (anyOf)
Обязательные поля: name.
Обязательные поля: phone.
Обязательные поля: email.
Обязательные поля: text.
Обязательные поля: tags.
Обязательные поля: end.
{
"text": "Подарок на день рождения",
"tags": [
"birthday"
],
"end": "2027-12-31"
}HTTP 200
application/jsonРезультат операции.
{
"method": "issuedCertificates",
"requestDate": 1791882000,
"responseData": {
"id": 812,
"status": 2,
"paymentPrice": 5000,
"paymentPriceTotal": 5000,
"paymentUsed": 0,
"paymentRefund": 0
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 500
application/jsonОшибка обработки запроса.
HTTP 400
application/jsonНекорректные параметры или нарушение условий выполнения операции.
HTTP 404
application/jsonМаршрут, метод или запрошенная сущность не найдены; см. особенности конкретной операции.
HTTP 405
application/jsonОперация не поддерживается либо параметры запроса или состояние записи не позволяют её выполнить. Конкретные условия указаны в описании операции.
HTTP 502
application/jsonНе удалось подтвердить результат операции. Проверьте состояние записи перед повторным запросом.
PUT/issuedCertificates/{id}/redeemПогасить сертификат
Погашает весь остаток или указанную сумму. Сертификат должен быть активен и действовать на момент запроса; платная покупка должна быть оплачена. Частичное погашение должно быть разрешено настройками заведения; сумма сверх остатка отклоняется. При полном использовании остатка сертификат закрывается. Требуется ключ типа api. Неизвестные поля отклоняются. Idempotency-Key не поддерживается: повторный запрос считается новой командой. Если ответ потерян, проверьте сертификат перед повторной отправкой.
Необходимое право ключа: Создавать и изменять сертификаты
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
idобязательный | Путь | Внутренний идентификатор записи, не её номер для гостя. |
Тело запроса
application/json
Пустое тело или {} погашает весь остаток. Для типов 2/3 необходимы сумма и разрешение частичного погашения в настройках заведения. Поле status не передаётся.
api_keyНеобязательный альтернативный способ передачи ключа (вместо X-API-Key).
amount_type1 — весь остаток; 2 — указанная сумма с сохранением активности при наличии остатка; 3 — указанная сумма с закрытием сертификата.
amountДля amount_type=2/3 обязательна конечная положительная сумма не больше остатка. Для amount_type=1 значение игнорируется.
Поля, не перечисленные в этой схеме, запрещены.
Все условия одновременно (allOf)
Условное правило
amount_type обязательноеamount обязательноеКонечное числовое значение строго больше нуля. Числовые строки принимаются; ноль, отрицательные значения и бесконечность запрещены.
Ровно один вариант (oneOf)
{
"amount_type": 2,
"amount": 1500
}HTTP 200
application/jsonРезультат операции.
{
"method": "issuedCertificates",
"requestDate": 1791882000,
"responseData": {
"id": 812,
"status": 5,
"paymentPrice": 5000,
"paymentPriceTotal": 5000,
"paymentUsed": 5000,
"paymentRefund": 0
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 500
application/jsonОшибка обработки запроса.
HTTP 400
application/jsonНекорректные параметры или нарушение условий выполнения операции.
HTTP 404
application/jsonМаршрут, метод или запрошенная сущность не найдены; см. особенности конкретной операции.
HTTP 405
application/jsonОперация не поддерживается либо параметры запроса или состояние записи не позволяют её выполнить. Конкретные условия указаны в описании операции.
HTTP 502
application/jsonНе удалось подтвердить результат операции. Проверьте состояние записи перед повторным запросом.
PUT/issuedCertificates/{id}/cancelОтменить сертификат
Отмена и возврат оплаты выполняются отдельно: по умолчанию отмена не запрашивает возврат. Для возврата передайте refund_payment=1 и положительный refund_amount. При явном запросе возврата успешный ответ отмены всегда содержит refund. Проверяйте refund.success: отмена может завершиться успешно при ошибке возврата. У неоплаченного платного сертификата итоговый статус — 8, у остальных — 6. Требуется ключ типа api. Неизвестные поля отклоняются. Idempotency-Key не поддерживается: повторный запрос считается новой командой. Если ответ потерян, проверьте сертификат перед повторной отправкой.
Необходимое право ключа: Создавать и изменять сертификаты
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
idобязательный | Путь | Внутренний идентификатор записи, не её номер для гостя. |
Тело запроса
application/json
Пустое тело или {} отменяет без возврата оплаты. При refund_payment=1 обязательна положительная refund_amount. Без флага сумма игнорируется. Поле status не передаётся.
api_keyНеобязательный альтернативный способ передачи ключа (вместо X-API-Key).
refund_paymentФлаг 0/1; принимаются строки «0»/«1» и boolean.
1 — запросить возврат оплаты; по умолчанию 0 — отменить без возврата.
refund_amountПри refund_payment=1 обязательна конечная сумма больше 0. Без флага сумма игнорируется. Размер возврата может быть ограничен суммой платежа и правилами платёжного провайдера.
Поля, не перечисленные в этой схеме, запрещены.
Все условия одновременно (allOf)
Условное правило
refund_payment обязательноеrefund_amount обязательноеКонечное числовое значение строго больше нуля. Числовые строки принимаются; ноль, отрицательные значения и бесконечность запрещены.
Ровно один вариант (oneOf)
{
"refund_payment": 1,
"refund_amount": 4500
}HTTP 200
application/jsonРезультат операции.
{
"method": "issuedCertificates",
"requestDate": 1791882000,
"responseData": {
"id": 812,
"status": 6,
"paymentPrice": 5000,
"paymentPriceTotal": 5000,
"paymentUsed": 0,
"paymentRefund": 0
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 500
application/jsonОшибка обработки запроса.
HTTP 400
application/jsonНекорректные параметры или нарушение условий выполнения операции.
HTTP 404
application/jsonМаршрут, метод или запрошенная сущность не найдены; см. особенности конкретной операции.
HTTP 405
application/jsonОперация не поддерживается либо параметры запроса или состояние записи не позволяют её выполнить. Конкретные условия указаны в описании операции.
HTTP 502
application/jsonНе удалось подтвердить результат операции. Проверьте состояние записи перед повторным запросом.
PUT/issuedCertificates/{id}/restoreВосстановить отменённый сертификат
Восстанавливает сертификат со статусом 6, без возврата оплаты, с положительным остатком и оплаченной стоимостью покупки. Обязательна дата окончания не в прошлом; итоговый статус — 2. Требуется ключ типа api. Неизвестные поля отклоняются. Idempotency-Key не поддерживается: повторный запрос считается новой командой. Если ответ потерян, проверьте сертификат перед повторной отправкой.
Необходимое право ключа: Создавать и изменять сертификаты
Параметры запроса
| Параметр | Где передать | Описание и формат |
|---|---|---|
idобязательный | Путь | Внутренний идентификатор записи, не её номер для гостя. |
Тело запроса обязательное
application/json
api_keyНеобязательный альтернативный способ передачи ключа (вместо X-API-Key).
end обязательноеДата окончания YYYY-MM-DD; не раньше текущей даты заведения. Срок устанавливается до 23:59:59.
Поля, не перечисленные в этой схеме, запрещены.
{
"end": "2027-12-31"
}HTTP 200
application/jsonРезультат операции.
{
"method": "issuedCertificates",
"requestDate": 1791882000,
"responseData": {
"id": 812,
"status": 2,
"paymentPrice": 5000,
"paymentPriceTotal": 5000,
"paymentUsed": 0,
"paymentRefund": 0
},
"page": 1,
"totalPages": 1
}HTTP 401
application/jsonКлюч отсутствует, не найден, отключён или не подходит источнику запроса.
{
"error": "Invalid Key"
}HTTP 403
application/jsonНедостаточно прав ключа или лицензия не разрешает API.
{
"error": "Insufficient permissions"
}HTTP 500
application/jsonОшибка обработки запроса.
HTTP 400
application/jsonНекорректные параметры или нарушение условий выполнения операции.
HTTP 404
application/jsonМаршрут, метод или запрошенная сущность не найдены; см. особенности конкретной операции.
HTTP 405
application/jsonОперация не поддерживается либо параметры запроса или состояние записи не позволяют её выполнить. Конкретные условия указаны в описании операции.
HTTP 502
application/jsonНе удалось подтвердить результат операции. Проверьте состояние записи перед повторным запросом.
Webhook
Настройка вебхуков описана в отдельных инструкциях.