1. Заголовок Idempotency-Key (рекомендуемый)
Как пользоваться:
- Значение — любая уникальная строка до 255 символов (обычно UUID v4). Сгенерируйте его до первой отправки запроса и передавайте одно и то же во всех повторах одного действия. Новое действие — новый ключ.
- Где работает — на всех создающих операциях: платёж, выплата, возврат, статический кошелёк, перевод, батч.
- Поведение повтора — повтор с тем же ключом вернёт тот же ответ, что и первая успешная попытка (второй объект не создаётся), и заголовок ответа
Idempotent-Replayed: true— по нему видно, что это переигранный результат, а не новая операция.
2. Ваш order_id
Второй, бизнес-уровень дедупликации — он работает, даже если заголовок забыли:
- Платежи —
order_idнеобязателен, но настоятельно рекомендуется. Повтор сorder_id, для которого уже есть живой счёт, вернёт этот же счёт, а не создаст дубль (терминальный или просроченный счёт создание нового не блокирует). Проверка-и-создание защищены advisory-локом по паре(мерчант, order_id)от гонки одновременных запросов. - Выплаты —
order_idобязателен (без него —400 payout.order_id_required). Идемпотентность по(мерчант, order_id): повтор вернёт уже созданную выплату.
order_id дедуплицирует на уровне бизнес-сущности, а заголовок Idempotency-Key защищает сам HTTP-вызов. Заголовок поддерживают: POST /v1/payment, /v1/payment/refund, /v1/payment/resolve, /v1/payment/batch, /v1/refund/batch, /v1/payout, /v1/payout/mass, /v1/payout/batch, /v1/transfer/to-personal. На выплатных ссылках заголовок не действует — там дедупликация через поле reference.