API

Вебхуки

Вебхук — HTTP-запрос, который FoodSoul отправляет на адрес вашей системы, когда в аккаунте происходит событие: новый заказ, смена статуса, отзыв и другие.

Подписка с адресом и событиями создаётся методом:

POST Создать подписку на вебхук

Адрес — URL из подписки, метод — POST.

Формат, подпись и повторы

Тело запроса вебхука. Каждый запрос — POST с Content-Type: application/json на URL подписки. URL должен начинаться с https. Заголовки: X-Webhook-Event — код события, X-Webhook-ID — event_uuid, X-Webhook-Signature — sha256= и HMAC-SHA256 исходного тела запроса в hex с секретом филиала (webhooks_subscriptions.generate_secret). Проверяйте подпись по исходному телу до разбора JSON: hash_equals(hash_hmac('sha256', $body, $secret), substr($signature, 7)). Метки времени в подписи нет, канал защищён HTTPS. Доставка считается принятой при любом ответе 2xx в течение 10 секунд. Редиректы не выполняются. Иначе доставка повторяется: 7 попыток, первая сразу, затем через 1, 5, 15, 60, 180 и 360 минут. Все попытки одной доставки содержат один и тот же X-Webhook-ID. Повторная отправка из журнала (webhooks_logs.resend) содержит тот же X-Webhook-ID — по нему пропускайте уже обработанные доставки. 20 неудачных доставок подряд отключают подписку (blocked), а владелец и системный администратор аккаунта получают письмо. webhooks_subscriptions.unblock включает подписку снова. Тело содержит данные события: клиент, отзыв и карточка заказа передаются полностью. Бонусный баланс не передаётся: он общий для пула сетей, его нужно получить через API.

Заголовки

X-Webhook-Eventstringобязательный

Пример: order.created

X-Webhook-IDstringобязательный

Пример: 5f0c6b1e-6a1d-4c1e-9d6b-3a7f0e2b8c41

X-Webhook-Signaturestringобязательный

Пример: sha256=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

События

  • client.registered
  • client.updated
  • client.bonuses_changed
  • order.created
  • order.status_changed
  • order.payment_status_changed
  • feedback.created
  • courier.assigned
  • item.stop_list_changed
  • branch.work_status_changed

Тело запроса

object (WebhookPayload)
eventstringобязательный

Значения:client.registeredclient.updatedclient.bonuses_changedorder.createdorder.status_changedorder.payment_status_changedfeedback.createdcourier.assigneditem.stop_list_changedbranch.work_status_changed

Пример: order.status_changed

event_uuidstringобязательный

Пример: 5f0c6b1e-6a1d-4c1e-9d6b-3a7f0e2b8c41

date_creationstring (DataTimeFormatSQL) обязательный

Пример: 2024-05-02 08:31:16

branch_idintegerобязательный

Пример: 8412

dataoneOfобязательный
Один из вариантов
object (WebhookDataClientRegistered)

client.registered — новый телефон или первый вход аккаунта в этом филиале

client_branch_profile_idintegerобязательный

Пример: 730112

namestringможет быть null

Пример: John Doe

phonestringобязательный

Телефон в международном формате, без форматирования

Пример: +79114579423

genderstringможет быть null

Значения:womanman

Пример: man

date_of_birthstringможет быть null

Дата рождения в формате Y-m-d

Пример: 1982-01-03

Пример тела

{
  "event": "order.status_changed",
  "event_uuid": "5f0c6b1e-6a1d-4c1e-9d6b-3a7f0e2b8c41",
  "date_creation": "2024-05-02 08:31:16",
  "branch_id": 8412,
  "data": {
    "client_branch_profile_id": 730112,
    "name": "John Doe",
    "phone": "+79114579423",
    "gender": "man",
    "date_of_birth": "1982-01-03"
  }
}

Ответ вашей системы

2XX

Принято

default

Не принято, доставка повторяется