Адрес
GET
https://api.perfektpak.ru/v1/webhooks/{id}/deliveries
Тот же адрес и в песочнице — режим выбирает ключ: pp_live_… отвечает боевыми данными, pp_test_… — данными песочницы.
Описание метода
Каждая доставка — одно событие для одной подписки: попытки, код ответа вашего адреса, причина неудачи по-русски, время следующей попытки. Ответ на «мы ничего не получали» — здесь, а не в переписке.
Авторизация
Authorization: Bearer <ключ>
Ключ выдаёт менеджер (боевой) или песочница (тестовый).
Параметры запроса
id
обязательный
в пути
status
в строке запроса
Значения:
PENDING DELIVERED FAILEDlimit
в строке запроса
Размер страницы. Значение вне диапазона молча округляется до ближайшей границы (0 и меньше — до значения по умолчанию, больше максимума — до максимума); ошибка
400 bad_request — только если значение вообще не целое число.Пример:
50cursor
в строке запроса
Непрозрачный курсор страницы из
next_cursor предыдущего ответа. Не передавайте для первой страницы. Курсор, который мы не выдавали сами, — это 400 bad_cursor, а не тихий возврат к первой странице.Ответы
200 Доставки, новые первыми.
-
itemsмассивполя элемента — Delivery
-
idстрока -
webhook_idстрока -
event_idстрока -
event_typeстрока -
statusстрокаЗначения:PENDINGDELIVEREDFAILED -
attemptsцелое число -
last_attempt_atстрока или null -
last_status_codeцелое числоКод ответа вашего адреса; 0 — ответа не было. -
last_errorстрокаПричина по-русски, например «Адрес не ответил за 10 секунд». -
next_attempt_atстрока или null -
created_atстрока -
payloadобъектEventТолько в ответе по одной доставке — событие, как оно было отправлено.поля Event
-
idстрока -
typeстрокаЗначения:receipt.createdreceipt.confirmedreceipt.status_changedreceipt.completedshipment.status_changedorder.status_changedwebhook.ping -
occurred_atстрока -
dataлюбой
-
-
-
totalцелое число -
next_cursorстрока или null
404 Ресурса с таким идентификатором нет — в том числе если он существует, но принадлежит не вашему client_id. API намеренно не различает эти два случая (подробнее — в /docs), поэтому чужой объект тоже отвечает 404, а не 403.
Схема: ErrorResponse
-
errorобъектErrorобязательнополя Error
-
codeстрокаErrorCodeобязательноМашинный, стабильный код ошибки — ветвитесь в коде по нему, а не по текстуmessage(он на русском и может измениться).unauthorized— ключ не передан или не существует;key_revoked— ключ существует, но отозван;bad_request— параметры запроса не прошли валидацию;bad_cursor— курсор не наш или испорчен (в отличие от обычногоbad_request, здесь нужно перезапросить страницу заново, а не повторять тот же курсор);not_found— ресурса нет либо он принадлежит не вашему client_id (специально неразличимо);rate_limited— превышен лимит запросов;internal— ошибка на нашей стороне. С v1.1:validation_error— поле тела запроса не прошло проверку (поле названо вmessage);cabinet_required— у вас несколько кабинетов, укажитеcabinet_id;mixed_marking— в одной заявке позиции и с маркировкой, и без, разделите на две;write_disabled— заявки через API ещё не включены для вашего ключа;warehouse_unavailable— склад временно не принял заявку, повторите через минуту (заявка не создана);webhook_url_unverified— адрес не ответил 2xx на проверочное событие;webhook_limit— больше 10 подписок;webhooks_unavailable— вебхуки временно выключены;sandbox_only— операция только для тестового ключа.Значения:unauthorizedkey_revokedrate_limitednot_foundbad_requestbad_cursorinternalvalidation_errorcabinet_requiredmixed_markingwrite_disabledwarehouse_unavailablewebhook_url_unverifiedwebhook_limitwebhooks_unavailablesandbox_only -
messageстрока обязательноТекст ошибки на русском для лога и для человека — не для ветвления в коде. -
request_idстрока обязательноТот же идентификатор, что и в заголовкеX-Request-Id. Присылайте его в поддержку, чтобы нашли конкретный вызов.
-