API Restoplace. Инструкция для разработчиков
Эта инструкция описывает REST API Restoplace для интеграции с внешними системами: сайтами, CRM, ERP, виджетами и внутренними сервисами.
С помощью API вы можете:
- получать список и детали резервов, билетов, событий, столов, залов, меток;
- создавать и редактировать резервы;
- рассчитывать депозит по параметрам бронирования;
- получать список слотов для бронирования;
- получать базовую информацию об адресе и заведении.
Как делать запросы
Домен для запросов REST API:
https://api.restoplace.cc/
Передача ключа API возможна двумя способами:
-
В строке запроса:
GET /reserves?api_key=abcdefgh123456789 -
В заголовке HTTP-запроса:
X-API-Key: abcdefgh123456789
Все ответы возвращаются в формате JSON через HTTPS.
Ответ удачного запроса
{
"method": "reserves",
"requestDate": 1641796526,
"responseData": {},
"page": 1,
"totalPages": 1
}
method— метод запроса;requestDate— время запроса в формате Unix timestamp;responseData— результат запроса (объект или массив объектов);page— текущая страница выборки;totalPages— общее количество страниц.
Ответ неверного запроса
{
"error": "Invalid Key"
}
error— текст ошибки запроса.
Где взять ключ API в Restoplace
- В личном кабинете Restoplace перейдите в нужный адрес заведения.
- В правом верхнем углу нажмите на «Настройки» адреса (подробно см. раздел «Настройки адреса»).
- В левом меню раскройте пункт «Интеграции» и выберите подпункт «API / Webhook».
- Если ключ ещё не создан — нажмите «Обновить ключ api» и скопируйте его. Если ключ уже есть — выделите и скопируйте его.
- Включите тумблер «Включить API».
Интеграция по API доступна только на тарифе PRO+.

Общая информация (GET /info/)
Метод позволяет получить общую информацию по адресу и заведению, а также тип ключа.
Пример ответа
{
"method": "info",
"requestDate": 1760706127,
"responseData": {
"address": {
"id": "111",
"orgid": "100",
"city": "Казань",
"address": "Пр. Московский, д.102",
"time_zone": "Europe/Moscow",
"time_now": "2028-10-17 16:02:07",
"UTC": "+03:00"
},
"organization": {
"id": "100",
"name": "Ваше Заведение",
"subdomain": "test",
"widget": "test.restoplace.ws"
},
"apikey": {
"type": "api"
}
},
"page": 1,
"totalPages": 1
}
Резервы (ресурс /reserves)
Через API можно:
- получать список резервов;
- получать один резерв по ID;
- создавать резерв;
- редактировать резерв;
- менять статус резерва;
- получать список причин отмены резерва.
Получить список резервов (GET /reserves)
Метод позволяет получить список резервов адреса.
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
updatedAfterTime | int | Вернутся резервы, которые были созданы/изменены после указанного времени в формате Unix. |
query | string/array | Поисковый запрос по полям резерва. Доступные поля: reserve_id, phone, email, status, depositPaid, date, item_id, floor_id, is_banquet, is_fast, createdDate, date. Формат даты: YYYY-MM-DD. |
page | int | Страница выводимых объектов (по умолчанию 1). |
Пример поиска по телефону:
/reserves?query[phone]=79000000000
Получение резерва по ID (GET /reserves/{id})
Метод позволяет получить данные конкретного резерва по его уникальному id.
Создание резерва (POST /reserves/)
Метод создаёт новый резерв или заявку в лист ожидания.
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
from | string | Начало резерва (обязательно). Пример: 2024-05-20 17:20:00 (также поддерживается формат RFC3339). |
to | string | Конец резерва (обязательно). Пример: 2024-05-20 19:00:00 (также поддерживается формат RFC3339). |
name | string | Имя гостя (обязательно). Пример: Иван. |
phone | string | Телефон гостя. Пример: 79876543210. |
email | string | Почта гостя. Пример: name@mail.ru. |
tg_username | string | Telegram-логин гостя (без @). Пример: username123. |
count | int | Количество человек. |
text | string | Комментарий к резерву. |
source | string | Источник бронирования (например, домен сайта). Пример: telegram.ru. |
tags | array | Массив тегов из списка GET /tags. Пример: ["vip", "birthday"]. |
item_ids | array | ID стола/столов. Если не указано, система автоматически подберёт свободный стол. |
floorid | int | ID зала, если не указаны item_ids. |
waitlist | boolean | Если true — заявка попадёт в лист ожидания без выбранного стола. |
deposit | boolean | По умолчанию true. При true, если у стола есть депозит, вернётся ссылка на оплату. |
deposit_total | float | Своя сумма депозита. Если не указана — рассчитывается по настройкам стола. |
deposit_paid | boolean | Факт внесения оплаты. При true сумма депозита считается внесённой «наличными». |
Успешные ответы
- Если создан резерв с выбранным столом:
{
"method": "reserves",
"requestDate": 1716998092,
"responseData": {
"id": "145248",
"number": "107",
"message": "Резерв создан"
},
"page": 1,
"totalPages": 1
}
- Если создана заявка в лист ожидания:
{
"method": "reserves",
"requestDate": 1716998092,
"responseData": {
"id": "145248",
"number": "107",
"message": "Заявка добавлена в Лист ожидания"
},
"page": 1,
"totalPages": 1
}
- Если требуется онлайн-оплата:
{
"method": "reserves",
"requestDate": 1716998092,
"responseData": {
"id": "145248",
"number": "107",
"message": "Ожидание оплаты",
"paymentNeed": true,
"paymentLink": "https://acquiring.bank.com/pay",
"paymentPrice": "1000",
"paymentWaitMinutes": "40",
"paymentWaitTo": "2025-08-28 18:27:21"
},
"page": 1,
"totalPages": 1
}
Ответ с ошибкой
{
"error": "Нет свободных столов на выбранное время для 2 персон"
}
Редактирование резерва (PUT /reserves/{id})
Метод позволяет изменить параметры существующего резерва.
Параметры аналогичны созданию резерва (from, to, name, phone, email, tg_username, count, text, tags, item_ids, floorid).
Успешный ответ
{
"method": "reserves",
"requestDate": 1716998092,
"responseData": {
"id": "175997",
"number": "6458",
"message": "Резерв обновлен"
},
"page": 1,
"totalPages": 1
}
Изменение статуса резерва (PUT /reserves/{id}/status)
Метод позволяет изменить статус резерва. При отмене можно указать причину.
Параметры
| Параметр | Тип | Описание |
|---|---|---|
status | int | Новый статус резерва (обязательно). Например: 1 — новая, 2 — заявка, 3 — ожидаем, 4 — открыт, 5/6 — закрыт/отменён. |
cancel_reason | int | ID причины отмены из GET /reserves/cancel-reasons. |
cancel_reason_text | int | Дополнительный текст причины отмены (используется, если причина требует текст). |
Успешный ответ
{
"method": "reserves",
"requestDate": 1738512000,
"responseData": {
"id": 12345,
"message": "Резерв обновлен"
},
"page": 1,
"totalPages": 1
}
Ответ с ошибкой
{
"error": "Неверный статус"
}
Получить список причин отмены (GET /reserves/cancel-reasons)
Метод возвращает список доступных причин отмены резерва.
Пример ответа
{
"method": "reserves",
"requestDate": 1738512000,
"responseData": [
{ "id": 1, "text": "Другая причина", "requires_text": true },
{ "id": 2, "text": "Гость не пришёл (No-show)", "requires_text": false }
],
"page": 1,
"totalPages": 1
}
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
id | int | Идентификатор причины отмены. Используется в параметре cancel_reason метода PUT /reserves/{id}/status. |
text | string | Текст причины отмены для отображения пользователю. |
requires_text | boolean | Требуется ли дополнительный текст в cancel_reason_text (как правило true только для варианта «Другая причина»). |
Поля резервов
Ниже перечислены основные поля, которые возвращаются в объектах резервов.
id— уникальный ID;userid— кто создал (0 — онлайн, 1 — через виджет, 2 — iiko, 3 — r_keeper, 4 — через API, >10 — ID сотрудника);created— дата и время создания;last_updated— дата и время последнего изменения;reserve_id— номер заявки адреса;time_from/time_to— начало и конец резерва;name— имя гостя;count— количество гостей;phone— телефон гостя;email— почта гостя;tg_username— Telegram-логин (без@);text— комментарий;status— статус резерва;success— подтверждён ли резерв (выбран ли стол/зал);is_fast— тип бронирования (0 — заранее, 1 — гость пришёл по факту);source— источник резерва;tags— массив ключей меток (список черезGET /tags);getparams— GET-параметры из виджета (UTM-метки и др.);depositPriceDesired— необходимый депозит;depositPrice— фактически внесённый депозит;depositPaid— статус внесения депозита;depositOnline— внесён ли депозит онлайн;order_sum— сумма заказа (при интеграции с iiko или r_keeper);item_ids— список ID объектов бронирования;item_type— тип объекта (group,hall,table,igloo,computer,room, ...);floor_id/floor_name— данные по залу;time_see/time_open/time_close/time_cancel— временные метки действий;cancel_reason— текст причины отмены;is_banquet— признак банкетного бронирования;Parent_ID/Next_ID— связь с другими резервами (пересадка);address_id/address_hash/organization_id— данные адреса и заведения.
Расчёт депозита (POST /deposit/)
Метод рассчитывает сумму депозита по параметрам бронирования (без создания самого резерва).
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
from | string | Начало резерва (обязательно). Формат YYYY-MM-DD HH:MM:SS или RFC3339. |
to | string | Конец резерва (обязательно). |
count | int | Количество гостей. |
item_ids | array | Список ID столов. Если указаны, расчёт ведётся по этим столам. |
waitlist | boolean | Признак листа ожидания. Если true — расчёт для листа ожидания, если false — для конкретных столов. |
Пример ответа
{
"method": "deposit",
"requestDate": 1762450323,
"responseData": {
"deposit": 1000,
"depositTotal": 1430,
"depositTip": 240,
"depositTax": 190,
"depositText": ""
},
"page": 1,
"totalPages": 1
}
deposit— базовый депозит;depositTotal— итоговый депозит с чаевыми и налогами;depositTip— чаевые;depositTax— налог;depositText— текстовое описание условий депозита.
Список слотов для бронирования (GET /times/)
Метод возвращает список временных слотов и их доступность для бронирования.
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
date | string | Дата (обязательно), формат YYYY-MM-DD. |
length | int | Продолжительность слота в минутах. По умолчанию 120. |
shift | int | Сдвиг начала слота относительно прошлого, в минутах (от 30 до 1440). Если не указано — следующий слот начинается в конце предыдущего. |
floorid | int | Получить список слотов только выбранного зала. |
dateFormat | string | Формат даты/времени: standart (по умолчанию, YYYY-MM-DD HH:MM:SS) или RFC3339. |
Пример ответа
{
"method": "times",
"requestDate": 1717098170,
"responseData": [
{
"from": "2024-05-31 00:00:00",
"to": "2024-05-31 01:00:00",
"free": true,
"counts": {
"1": "busy",
"2": "free",
"3": "free",
"4": "free",
"5": "free",
"6": "free"
},
"free_tables": {
"2": ["1542", "1543", "2460"],
"3": ["1542", "1543", "2460"],
"4": ["1542", "1543", "2460"],
"5": ["1542"],
"6": ["1542"]
}
}
],
"page": 1,
"totalPages": 1
}
Список меток (тегов) (GET /tags)
Метод позволяет получить список меток, которые можно указывать у резервов: «Не пересаживать», «VIP гость», «День рождения» и т.п.
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
query | string | Поисковый запрос. Например, query[checked]=1 для получения только активных меток. |
Объекты бронирования (столы) (ресурс /items)
Получение списка объектов (GET /items)
Метод возвращает список объектов бронирования (столы, беседки, бильярд, домики, компьютеры и т.д.).
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
query | string | Поисковый запрос по полям объектов. Доступные поля: checked, floorid, type, reserve, view_hostess. Пример: /items?query[floorid]=100. |
page | int | Страница выводимых объектов (по умолчанию 1). |
Получение объекта по ID (GET /items/{id})
Метод позволяет получить данные конкретного объекта бронирования по его уникальному id.
Основные поля объектов бронирования
id— уникальный ID;checked— включён/выключен;userid— ID сотрудника, создавшего объект;priority— приоритет;created/last_updated— даты создания и последнего изменения;floorid— ID зала;number— номер объекта бронирования;count_min/count_max— минимальное и максимальное количество гостей;text— описание;type— тип объекта (строкой, напримерtable);reserve— возможность бронирования через виджет гостем;view_only_hostess— показывать только сотрудникам в админке;images— массив с фотографиями и иконкой стола.
Список наименований объектов (ресурс /itemTypes)
Метод возвращает список типов объектов бронирования: Стол, Бильярд, Беседка и т.п.
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
query | string | Поисковый запрос. Например, query[lang]=en для выбора языка. |
Залы (ресурс /halls)
Получение списка залов (GET /halls)
Метод позволяет получить список залов.
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
query | string | Поисковый запрос по полям залов. Доступные поля: checked, banquet, view_only_hostess. Пример: /halls?query[banquet]=1. |
page | int | Страница выводимых объектов (по умолчанию 1). |
Получение зала по ID (GET /halls/{id})
Метод позволяет получить данные конкретного зала по его уникальному id.
Основные поля залов
id— уникальный ID;checked— включён/выключен;userid— ID сотрудника, создавшего зал;priority— приоритет;created/last_updated— даты создания и изменения;name— название зала;banquet— признак банкетного зала;count_min/count_max— минимальное и максимальное количество гостей;text— описание;view_only_hostess— отображать только сотрудникам в админке.
События (ресурс /events)
Получение списка событий (GET /events/)
Метод возвращает список событий заведения.
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
query | array | Поисковый запрос, например: query[checked]=1&query[active]=1 для получения только активных будущих событий. |
page | int | Страница выводимых объектов (по умолчанию 1). |
Получение события по ID (GET /events/{id})
Метод позволяет получить данные конкретного события.
Основные поля событий
id— ID события;checked— подтверждено (0/1);userid— ID сотрудника, создавшего событие;priority— приоритет;created/last_updated— даты создания и изменения;name— название события;text— описание;time_from/time_to— время начала и окончания;price— цена билета;count— количество доступных билетов;number— номер события;langs_text— мультиязычные тексты;images— массив изображений события.
Билеты (ресурс /tickets)
Получение списка билетов (GET /tickets/)
Метод позволяет получить список билетов на события.
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
updatedAfterTime | int | Unix timestamp. Вернёт билеты, обновлённые после указанного времени. |
query | array | Поисковый запрос по полям билетов. Доступные поля: ticket_id, phone, email, status, paymentPaid, event_id, createdDate, date. Формат даты: YYYY-MM-DD. |
Получение билета по ID (GET /tickets/{id})
Метод позволяет получить данные конкретного билета по уникальному id.
Основные поля билетов
id— ID записи билета;userid— ID пользователя, создавшего билет;created/last_updated— даты создания и обновления;status— статус билета;time_from/time_to— время начала и окончания события;name,phone,email,text— данные гостя и комментарий;ticket_id— номер билета (отображается гостю);event_id,event_name— данные события;source— источник создания (widget, adminpanel, api);time_open,time_close,time_cancel— временные метки действий;paymentPrice,paymentTotal,paymentRefund,paymentPaid,paymentOnline,paymentId— данные по оплате;info— дополнительная информация;Parent_ID,Next_ID— связи с другими билетами;getparams— GET-параметры при создании билета.
Webhook
Для работы с webhook событий (резервы, билеты, сертификаты) используйте отдельную инструкцию:
Дополнительные материалы
Инструкция по синхронизации iiko c Restoplace
Как подключить и настроить интеграцию Restoplace с POS-системой iiko для автоматической синхронизации бронирований
Инструкция по синхронизации Битрикс24 c Restoplace
Как произвести интеграцию Restoplace с Bitrix24. Как подключить и настроить
Дизайн виджета – как оформить дизайн виджета?
Как изменить цветовое оформление виджета для гостей, который устанавливается на вашем сайте и в соцсетях
Установка виджета бронирования столов в группе VK
Пошаговое руководство по установке виджета в группу вашего заведения в Вконтакте
Установка виджета бронирования столов в Inst-m
Пошаговое руководство по установке виджета бронирования RESTOPLACE в Inst-m вашего заведения
Установка виджета бронирования для гостей RESTOPLACE на сайт — общий принцип
В этой инструкции вы узнаете, как установить HTML-код виджета бронирования Restoplace на Ваш сайт всего за несколько минут