Для разработчиков
API вебхука
Ваша система передаёт заказ в ADelivo одним POST-запросом, а мы присылаем статусы доставки на ваш адрес: курьер назначен, в пути, доставлен, отменён.
Шаг 1
Подключение
Адрес для заказов и токен выдаёт ADelivo — они видны администратору в кабинете: Компания → магазин → Настроить. Там же указывается ваш адрес для статусов и есть кнопка проверки.
Все запросы — JSON в UTF-8. Все времена — ISO 8601 по Москве, например 2026-10-01T14:15:00+03:00.
| Что | Значение |
|---|---|
| Адрес заказов | https://adelivo.ru/api/webhooks/custom/{shopId} |
| Авторизация | Authorization: Bearer <токен> или X-Api-Key: <токен> |
| Адрес статусов | ваш HTTPS-адрес, принимает POST с JSON |
Вы → ADelivo
Создание заказа
| Поле | Описание | |
|---|---|---|
orderId | обязательно | Ваш номер заказа. По нему отсекаются дубли и он приходит во всех статусах |
address | обязательно | Адрес доставки |
phone | желательно | Телефон получателя |
slot | — | Интервал "14:00-15:00". Вместо него "asap": true — как можно быстрее. Нет ни того, ни другого — тоже «как можно быстрее» |
date | — | "2026-10-01"; по умолчанию — сегодня |
items | — | Строка или [{ "name": "Клубника", "qty": 2 }] |
name, comment | — | Имя получателя, комментарий курьеру |
Ответ — 201
id — наш номер заказа, orderId — ваш. warnings есть, только если что-то не так, — заказ при этом всё равно создан. Повтор с тем же orderId дубль не создаёт: ответ 200, тот же id, "duplicate": true. Поэтому при любом сбое запрос можно смело повторить.
Ошибки
| HTTP | code | Когда |
|---|---|---|
| 400 | bad_body | Пустое тело или не JSON |
| 400 | missing_order_id, missing_address | Нет обязательного поля |
| 400 | bad_slot | Слот не разобрать |
| 401 | unauthorized | Неверный токен |
| 403 | integration_disabled | Подключение выключено в ADelivo |
| 404 | shop_not_found | Неверный адрес |
| 500 | internal | Сбой у нас — повторите с тем же orderId |
Вы → ADelivo
Отмена
Тот же адрес и токен, в теле — номер заказа и действие.
Заказ снимается с биржи; если курьер уже взял его, ему приходит уведомление. Этот ответ и есть подтверждение — хук cancelled на вашу собственную отмену не приходит. Уже доставленный заказ отменить нельзя: 409 already_finished.
ADelivo → вы
Статусы
POST на ваш адрес при каждом шаге доставки. Порядок: assigned → in_delivery → delivered, либо cancelled на любом шаге до доставки.
Общие поля всех событий: event, eventId, orderId (ваш), adelivoId (наш), at — когда это произошло.
assigned — курьер взял заказ
courierAtStoreAt — когда курьер будет у вас на базе: время, которое он выбрал в приложении (или время выезда от диспетчера). Пока не выбрано — оценка по геопозиции курьера, если нет и её — null. Курьер часто выбирает время уже после того, как взял заказ: тогда придёт ещё один assigned с новым eventId и точным временем — применяйте последний.
in_delivery — курьер забрал заказ
at — когда забрал, eta — когда привезёт: через 5 минут, если адрес в пределах ~500 м от базы, иначе через 10 минут.
delivered — доставлен
cancelled — отменён у нас
Надёжность
Повторная отправка
| Правило | |
|---|---|
| Когда уходит | В течение пары секунд после изменения заказа. Плюс сверка раз в минуту — событие не потеряется. |
| Успех | Любой ответ 2xx за 8 секунд. Тело ответа не читаем. Тяжёлую обработку делайте после ответа. |
| Ошибка | 4xx, 5xx, таймаут, сеть, редирект 3xx (по редиректам не идём). |
| Паузы | 30 с, 1, 2, 5, 10, 15, 30, 30, 60, 60, 120 мин — 12 попыток, ~5,5 часа. Фактически пауза может быть до минуты дольше. |
| Конец | После 12 неудач событие больше не шлём. Не доставленное за сутки — тоже. |
| Дубли | Повтор приходит с тем же eventId и тем же телом — отсекайте по eventId. |
| Порядок | Строгий внутри заказа: пока assigned не принят, in_delivery ждёт. Если статус перескочил, пропущенные события придут по порядку. |
Безопасность
Проверка подписи
X-Adelivo-Signature — HMAC-SHA256 от сырого тела запроса, ключ — ваш токен. Считайте подпись от байтов тела до разбора JSON.
Перед запуском
Проверка
1. Заказ к нам. Отправьте тестовый заказ — готовый curl с вашим токеном есть в кабинете. Ожидаемый ответ — 201 с "status": "new".
2. Статусы к вам. В кабинете у поля «Адрес для статусов» есть кнопка «Отправить тест»: на ваш адрес уходит образец выбранного события с "test": trueи "orderId": "TEST-1", подписанный токеном. Ответьте 2xx — в кабинете будет видно код, время ответа и что именно отправили. Настоящие события поля test не содержат.
3. Живой прогон. Создайте заказ, курьер берёт его с биржи и отмечает «На базе в» — по нему придут assigned, in_delivery и delivered.
Запасной путь
Опрос статуса
status: new / assigned / in_delivery / delivered / cancelled — с теми же полями, что в последнем событии. Без orderId запрос просто проверяет токен.
Вопросы по подключению — в Telegram. Другие способы подключения — на странице интеграций.