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

Повторы и расписание

Событие доставлено, когда ваш эндпоинт ответил 2xx в течение 15 секунд. Всё остальное — другой статус, таймаут, отказ в соединении — повторяется. Редиректы не выполняются.

Попытка После предыдущей
2 10 секунд
3 30 секунд
4–7 1, 2, 5, 10 минут
8–10 15, 30 минут, 1 час
дальше каждый час, пока не пройдёт 24 часа с первой попытки

Retry-After дольше следующей паузы учитывается, но не больше часа. Через 24 часа доставка переходит в failed. 410 Gone сразу завершает доставку как failed и выключает эндпоинт.

События, доставки и попытки хранятся 30 дней.

Доставленную или неудавшуюся доставку можно отправить снова — то же событие, тот же webhook-id, новое расписание — после того как вы исправили эндпоинт:

examples/curl/webhooks/deliveries/get.sh
#!/usr/bin/env bash
# One delivery: the exact body sent and every attempt.
set -euo pipefail
. "$(dirname "$0")/../../signed-request.sh"
delivery_id=$(mka_required DELIVERY_ID)
mka_request GET "/v1/webhook-deliveries/$delivery_id"
examples/curl/webhooks/deliveries/retry.sh
#!/usr/bin/env bash
# Send a delivered or failed event again, under the same event ID.
set -euo pipefail
. "$(dirname "$0")/../../signed-request.sh"
delivery_id=$(mka_required DELIVERY_ID)
mka_request POST "/v1/webhook-deliveries/$delivery_id/retry"

Доставка, которая ещё идёт по расписанию, — это 409 delivery_not_retryable.

Пока эндпоинт выключен, события ждут и уходят, как только его снова включат, — ничего не теряется.

examples/curl/webhooks/endpoint/set-status.sh
#!/usr/bin/env bash
# Turn the endpoint off (ENABLED=false) or on; events wait while it is off.
set -euo pipefail
. "$(dirname "$0")/../../signed-request.sh"
body=$(cat <<JSON
{
"enabled": ${ENABLED:-true}
}
JSON
)
mka_request POST "/v1/webhook-endpoint/status" "$body"
examples/curl/webhooks/endpoint/roll-secret.sh
#!/usr/bin/env bash
# Replace the signing secret; the old one keeps signing for an hour.
set -euo pipefail
. "$(dirname "$0")/../../signed-request.sh"
body=$(cat <<JSON
{
"expire_current_in": 3600
}
JSON
)
mka_request POST "/v1/webhook-endpoint/secret/roll" "$body"

Ответ содержит новый секрет один раз. До previous_secret_expires_at — через expire_current_in секунд, не больше суток, 0 — сразу — каждое событие подписывается обоими секретами, поэтому вы переключаете серверы без потери доставок. Новая смена до этого момента отбрасывает более старый секрет.

examples/curl/webhooks/endpoint/delete.sh
#!/usr/bin/env bash
# Remove the endpoint; events stop going anywhere.
set -euo pipefail
. "$(dirname "$0")/../../signed-request.sh"
mka_request DELETE "/v1/webhook-endpoint"

Доставки в пути завершаются неудачей. Новый эндпоинт получает новый секрет.