База знаний Restoplace

Webhook событий — Restoplace

Эта инструкция для разработчиков и описывает формат webhook‑событий о создании и обновлении:
  • резервов (reserve.*)
  • билетов (ticket.*)
  • подарочных сертификатов (certificate.*)

Используйте её, чтобы принимать данные в свою CRM/ERP, триггерить автоматизации и синхронизировать статусы.

Для уведомлений гостей по шаблонам — есть webhook уведомлений

Типы webhook‑событий

В Restoplace поддерживаются следующие типы событий:
Резервы
  • reserve.created — создан новый резерв
  • reserve.updated — в резерве произошли изменения
Билеты
  • ticket.created — создан новый билет на событие
  • ticket.updated — в билете произошли изменения
Сертификаты
  • certificate.created — создан новый подарочный сертификат
  • certificate.updated — в сертификате произошли изменения

Где включить Webhook

1️⃣ В личном кабинете Restoplace перейдите в настройки адреса
2️⃣ В левом меню, раскройте пункт «Интеграции»
3️⃣ Перейдите в раздел «API / Webhook»
4️⃣ Включите тумблер «Включить Webhook»
5️⃣ Вставьте ваш HTTPS-endpoint в поле (URL вебхука)
6️⃣ Включите нужные типы событий:
  • «Отправлять события резервов»
  • «Отправлять события билетов»
  • «Отправлять события сертификатов»
7️⃣Нажмите «Сохранить»
Где включить webhook Restoplace

Общие принципы работы

Restoplace отправляет HTTP‑запрос POST с телом в формате JSON.
В поле event указывается тип события: reserve.created, ticket.updated, certificate.created и т.д.

Рекомендуется обрабатывать события идемпотентно:
  • использовать id и/или бизнес‑идентификаторы (reserve_id, ticket_id, number)
  • вместе с last_updated, чтобы применять только самые свежие изменения.

Endpoint должен принимать только HTTPS.
На успешную обработку события рекомендуется отвечать кодом 200 OK.

🎯 Webhook событий резервов

Что и когда отправляется

Restoplace отправляет webhook при следующих событиях:
  • reserve.created — создан новый резерв (бронь).
  • reserve.updated — в резерве произошли изменения (статус, депозит, объект бронирования, сумма заказа и т.п.).

Структура JSON и поля

Ниже перечислены поля, которые приходят в webhook‑событии. Названия и типы следует соблюдать строго — используйте их для сериализации/валидации на вашей стороне.

Пример JSON:

Restoplace отправляет на ваш endpoint POST с телом JSON. Пример структуры полей:
{
  "event": "reserve.updated",
  "id": 1000000,
  "userid": 1,
  "created": "2025-11-27 16:36:46",
  "last_updated": null,
  "reserve_id": 3234,
  "time_from": "2025-11-27 16:36:46",
  "time_to": "2025-11-27 17:50:00",
  "name": "Иван",
  "count": 2,
  "phone": "7919",
  "email": "",
  "text": "34r34r",
  "status": 4,
  "success": 1,
  "is_fast": 1,
  "source": "adminpanel",
  "tags": ["vip"],
  "getparams": {"utm_company": "yandex"},
  "depositPriceDesired": 1430,
  "depositPrice": 0,
  "depositPaid": 1,
  "depositOnline": 0,
  "order_sum": null,
  "item_ids": [1000, 1001],
  "item_type": "hookahzone",
  "floor_id": 58,
  "floor_name": "Основной зал",
  "time_see": "",
  "time_open": "2025-11-27 16: 36: 46",
  "time_close": "",
  "time_cancel": "",
  "cancel_reason": null,
  "is_banquet": 0,
  "Parent_ID": 0,
  "Next_ID": 0,
  "address_id": 147,
  "address_hash": "99fcee43c466423523tg",
  "organization_id": 100
}

🎫 Webhook событий билетов

Эта секция описывает события о создании и обновлении билетов на события в Restoplace.

Что и когда отправляется

Restoplace отправляет webhook при событиях:
  • ticket.created — создан новый билет на событие.
  • ticket.updated — в билете произошли изменения: (изменение статуса билета, успешная / неуспешная оплата, возврат средств, использование билета и т.д.)

Структура JSON и поля

Ниже перечислены поля, которые приходят в webhook‑событии. Названия и типы следует соблюдать строго — используйте их для сериализации/валидации на вашей стороне.

Пример JSON:

Restoplace отправляет на ваш endpoint POST с телом JSON. Пример структуры полей:
{
  "event": "ticket.created",
  "id": 12345,
  "ticket_id": 100,
  "event_id": 5,
  "event_name": "Гастро-ужин по мотивам зимы",
  "created": "2025-01-22 18:30:00",
  "last_updated": "2025-01-22 18:30:00",
  "time_from": "2025-01-25 20:00:00",
  "time_to": "2025-01-25 23:00:00",
  "name": "Иван Петров",
  "phone": "79191234567",
  "email": "ivan@example.com",
  "text": "Столик у сцены",
  "status": 2,
  "source": "widget",
  "getparams": {
    "utm_source": "instagram",
    "utm_campaign": "newyear"
  },
  "paymentPriceDesired": 2000,
  "paymentPrice": 1800,
  "paymentTotal": 2000,
  "paymentPaid": 1,
  "paymentOnline": 1,
  "paymentRefund": 0,
  "time_open": null,
  "time_close": null,
  "time_cancel": null,
  "cancel_reason": null,
  "Parent_ID": 0,
  "Next_ID": 0,
  "info": {
    "paid": [
      {
        "date": "2025-01-22 18:35:00",
        "who": "online",
        "price": 1800
      }
    ]
  },
  "currency": 643,
  "address_id": 147,
  "address_hash": "99fcee43c466423523tg",
  "organization_id": 100
}

🔖 Webhook событий сертификатов

Эта секция описывает события о создании и обновлении подарочных сертификатов в Restoplace.

Что и когда отправляется

Restoplace отправляет webhook при событиях:
  • certificate.created — создан новый сертификат.
  • certificate.updated — в сертификате произошли изменения: изменение статуса (активирован, использован, отменён), успешная / неуспешная оплата, частичное или полное использование, возврат средств.

Структура JSON и поля

Ниже перечислены поля, которые приходят в webhook‑событии. Названия и типы следует соблюдать строго — используйте их для сериализации/валидации на вашей стороне.

Пример JSON:

Restoplace отправляет на ваш endpoint POST с телом JSON. Пример структуры полей:
{
  "event": "certificate.created",
  "id": 5678,
  "number": "123456789",
  "guid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "certificate_id": 3,
  "certificate_name": "Подарочный сертификат на 5000 руб.",
  "created": "2025-01-22 14:00:00",
  "last_updated": "2025-01-22 14:00:00",
  "start": "2025-01-22 00:00:00",
  "end": "2025-07-22 23:59:59",
  "name": "Мария Иванова",
  "phone": "79031234567",
  "email": "maria@example.com",
  "text": "Подарок на день рождения",
  "status": 2,
  "source": "widget",
  "getparams": {
    "utm_source": "vk"
  },
  "paymentPrice": 5000,
  "paymentPriceTotal": 5000,
  "paymentPaid": 1,
  "paymentOnline": 1,
  "paymentUsed": 0,
  "paymentRefund": 0,
  "time_activate": null,
  "time_cancel": null,
  "info": {
    "paid": [
      {
        "date": "2025-01-22 14:05:00",
        "who": "online",
        "price": 5000
      }
    ]
  },
  "currency": 643,
  "address_id": 147,
  "address_hash": "99fcee43c466423523tg",
  "organization_id": 100
}

Рекомендации по приёму и обработке

Идентификация записей.
  • Резервы: используйте id и/или reserve_id + last_updated.
  • Билеты: используйте id и/или ticket_id + last_updated.
  • Сертификаты: используйте id и/или number + last_updated.

Источники. Для аналитики каналов используйте source и блок getparams.

Групповые покупки билетов. При покупке нескольких билетов на одно событие каждый билет приходит отдельным webhook‑событием.

Частичное использование сертификатов.
  • Остаток = paymentPriceTotalpaymentUsed.
  • История использования доступна в info.used (если включена опция частичного использования).

Частые вопросы

Как понять, подтверждён ли резерв?

Смотрите поле success:
  • true — выбран конкретный стол/зал.
  • false — резерв пока не подтверждён.

Как понять, оплачен ли билет/сертификат?

Смотрите поле paymentPaid:
  • 1 — успешная оплата,
  • 0 — не оплачен,
  • 2 — оплата отменена,
  • 3 — ошибка оплаты.

Когда приходит reserve.updated / ticket.updated / certificate.updated ?

При любых значимых изменениях:
  • смена статуса,
  • успешная/неуспешная оплата,
  • возврат средств,
  • использование билета/сертификата,
  • частичное использование сертификата,
  • изменение данных гостя и т.п.

Когда приходит order_sum у резервов?

Если подключены интеграции с iiko или R‑Keeper — сумма заказа передаётся при закрытии счёта.

Прочитайте ещё