Перейти к основному содержимому

API Restoplace. Инструкция для разработчиков

Эта инструкция описывает REST API Restoplace для интеграции с внешними системами: сайтами, CRM, ERP, виджетами и внутренними сервисами.

С помощью API вы можете:

  • получать список и детали резервов, билетов, событий, столов, залов, меток;
  • создавать и редактировать резервы;
  • рассчитывать депозит по параметрам бронирования;
  • получать список слотов для бронирования;
  • получать базовую информацию об адресе и заведении.

Как делать запросы

Домен для запросов REST API:

https://api.restoplace.cc/

Передача ключа API возможна двумя способами:

  1. В строке запроса:

    GET /reserves?api_key=abcdefgh123456789
  2. В заголовке 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

  1. В личном кабинете Restoplace перейдите в нужный адрес заведения.
  2. В правом верхнем углу нажмите на «Настройки» адреса (подробно см. раздел «Настройки адреса»).
  3. В левом меню раскройте пункт «Интеграции» и выберите подпункт «API / Webhook».
  4. Если ключ ещё не создан — нажмите «Обновить ключ api» и скопируйте его. Если ключ уже есть — выделите и скопируйте его.
  5. Включите тумблер «Включить API».

Интеграция по API доступна только на тарифе PRO+.

Ключ API Restoplace

Общая информация (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)

Метод позволяет получить список резервов адреса.

Параметры запроса

ПараметрТипОписание
updatedAfterTimeintВернутся резервы, которые были созданы/изменены после указанного времени в формате Unix.
querystring/arrayПоисковый запрос по полям резерва. Доступные поля: reserve_id, phone, email, status, depositPaid, date, item_id, floor_id, is_banquet, is_fast, createdDate, date. Формат даты: YYYY-MM-DD.
pageintСтраница выводимых объектов (по умолчанию 1).

Пример поиска по телефону:

/reserves?query[phone]=79000000000

Получение резерва по ID (GET /reserves/{id})

Метод позволяет получить данные конкретного резерва по его уникальному id.

Создание резерва (POST /reserves/)

Метод создаёт новый резерв или заявку в лист ожидания.

Параметры запроса

ПараметрТипОписание
fromstringНачало резерва (обязательно). Пример: 2024-05-20 17:20:00 (также поддерживается формат RFC3339).
tostringКонец резерва (обязательно). Пример: 2024-05-20 19:00:00 (также поддерживается формат RFC3339).
namestringИмя гостя (обязательно). Пример: Иван.
phonestringТелефон гостя. Пример: 79876543210.
emailstringПочта гостя. Пример: name@mail.ru.
tg_usernamestringTelegram-логин гостя (без @). Пример: username123.
countintКоличество человек.
textstringКомментарий к резерву.
sourcestringИсточник бронирования (например, домен сайта). Пример: telegram.ru.
tagsarrayМассив тегов из списка GET /tags. Пример: ["vip", "birthday"].
item_idsarrayID стола/столов. Если не указано, система автоматически подберёт свободный стол.
flooridintID зала, если не указаны item_ids.
waitlistbooleanЕсли true — заявка попадёт в лист ожидания без выбранного стола.
depositbooleanПо умолчанию true. При true, если у стола есть депозит, вернётся ссылка на оплату.
deposit_totalfloatСвоя сумма депозита. Если не указана — рассчитывается по настройкам стола.
deposit_paidbooleanФакт внесения оплаты. При 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)

Метод позволяет изменить статус резерва. При отмене можно указать причину.

Параметры

ПараметрТипОписание
statusintНовый статус резерва (обязательно). Например: 1 — новая, 2 — заявка, 3 — ожидаем, 4 — открыт, 5/6 — закрыт/отменён.
cancel_reasonintID причины отмены из GET /reserves/cancel-reasons.
cancel_reason_textintДополнительный текст причины отмены (используется, если причина требует текст).

Успешный ответ

{
"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
}

Поля ответа

ПолеТипОписание
idintИдентификатор причины отмены. Используется в параметре cancel_reason метода PUT /reserves/{id}/status.
textstringТекст причины отмены для отображения пользователю.
requires_textbooleanТребуется ли дополнительный текст в 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/)

Метод рассчитывает сумму депозита по параметрам бронирования (без создания самого резерва).

Параметры запроса

ПараметрТипОписание
fromstringНачало резерва (обязательно). Формат YYYY-MM-DD HH:MM:SS или RFC3339.
tostringКонец резерва (обязательно).
countintКоличество гостей.
item_idsarrayСписок ID столов. Если указаны, расчёт ведётся по этим столам.
waitlistbooleanПризнак листа ожидания. Если 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/)

Метод возвращает список временных слотов и их доступность для бронирования.

Параметры запроса

ПараметрТипОписание
datestringДата (обязательно), формат YYYY-MM-DD.
lengthintПродолжительность слота в минутах. По умолчанию 120.
shiftintСдвиг начала слота относительно прошлого, в минутах (от 30 до 1440). Если не указано — следующий слот начинается в конце предыдущего.
flooridintПолучить список слотов только выбранного зала.
dateFormatstringФормат даты/времени: 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 гость», «День рождения» и т.п.

Параметры запроса

ПараметрТипОписание
querystringПоисковый запрос. Например, query[checked]=1 для получения только активных меток.

Объекты бронирования (столы) (ресурс /items)

Получение списка объектов (GET /items)

Метод возвращает список объектов бронирования (столы, беседки, бильярд, домики, компьютеры и т.д.).

Параметры запроса

ПараметрТипОписание
querystringПоисковый запрос по полям объектов. Доступные поля: checked, floorid, type, reserve, view_hostess. Пример: /items?query[floorid]=100.
pageintСтраница выводимых объектов (по умолчанию 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)

Метод возвращает список типов объектов бронирования: Стол, Бильярд, Беседка и т.п.

Параметры запроса

ПараметрТипОписание
querystringПоисковый запрос. Например, query[lang]=en для выбора языка.

Залы (ресурс /halls)

Получение списка залов (GET /halls)

Метод позволяет получить список залов.

Параметры запроса

ПараметрТипОписание
querystringПоисковый запрос по полям залов. Доступные поля: checked, banquet, view_only_hostess. Пример: /halls?query[banquet]=1.
pageintСтраница выводимых объектов (по умолчанию 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/)

Метод возвращает список событий заведения.

Параметры запроса

ПараметрТипОписание
queryarrayПоисковый запрос, например: query[checked]=1&query[active]=1 для получения только активных будущих событий.
pageintСтраница выводимых объектов (по умолчанию 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/)

Метод позволяет получить список билетов на события.

Параметры запроса

ПараметрТипОписание
updatedAfterTimeintUnix timestamp. Вернёт билеты, обновлённые после указанного времени.
queryarrayПоисковый запрос по полям билетов. Доступные поля: 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 на Ваш сайт всего за несколько минут