# Доставка и повторы

> Учтите 11 попыток доставки вебхука примерно за 16 часов, отсекайте повторы, разбирайте ошибки и повторяйте событие после восстановления.

Если ваш адрес вернёт статус не из группы 2xx или превысит таймаут 10 секунд, Paymos повторяет доставку с удвоением задержки. Всего **11 попыток** (1 начальная + 10 повторов) примерно за 16 часов.

## Расписание повторов

| Попытка | Задержка после предыдущей | Накопленная задержка |
|---------|---------------------------|----------------------|
| 1 | сразу | 0 |
| 2 | 1 мин | 1 мин |
| 3 | 2 мин | 3 мин |
| 4 | 4 мин | 7 мин |
| 5 | 8 мин | 15 мин |
| 6 | 16 мин | 31 мин |
| 7 | 32 мин | ~1 час |
| 8 | 1 час | ~2 часа |
| 9 | 2 часа | ~4 часа |
| 10 | 4 часа | ~8 часов |
| 11 | 8 часов | ~16 часов |

После 11 попыток событие помечается как неудавшееся. Такие события можно отправить повторно из дашборда — повторная отправка обнуляет счётчик попыток и снова ставит событие в очередь на доставку.

## Идемпотентность

:::info
Доставка идёт не реже одного раза. Одно и то же событие с тем же `event_id` может прийти несколько раз — при повторах это нормально. Обработчик должен быть идемпотентным: сохраняйте уже обработанные `event_id`, а на повторы отвечайте `200 OK`, ничего не делая.
:::

## Что считается успешной доставкой

- Ответ HTTP `2xx` за 10 секунд → доставка успешна
- HTTP `4xx` или `5xx` → ошибка, будет повтор
- Отказ в соединении, ошибка DNS, ошибка TLS → ошибка, будет повтор
- Ответ позже 10 секунд → ошибка, будет повтор (ваш обработчик может получить дубль)

Возвращайте `2xx`, как только событие сохранено на вашей стороне. Тяжёлую обработку откладывайте в фоновую очередь, чтобы обработчик вебхука укладывался в таймаут.
