Перейти к содержимому
PortunaPortunaPortunaДокументацияTestnet

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

Запрос может оборваться по таймауту уже после того, как сервис его принял. Чтобы повторить его и не создать второй sweep, давайте каждому заданию external_id — свой идентификатор, например id депозита в вашей системе.

{ "external_id": "dep-7f3a91", "chain_id": 11155111, "hot_wallet": "0x…", "account": "0x…", "token": "USDT" }
  • Первый запрос с external_id создаёт задание и отвечает 202 Accepted.
  • Любой следующий запрос с тем же external_id ничего не создаёт и отвечает 200 OK с заданием, созданным в первый раз, — в каком бы статусе оно ни было. SDK возвращают его с created: false.
  • external_id — до 128 символов, уникален среди всех ваших заданий на sweep. У снятий делегации свои external_id, отдельные от заданий.

Запрос проверяется до того, как ищется external_id: повтор с неверным телом получит свою ошибку, а не исходное задание.

Каждый запрос создаёт новое задание. Повтор после таймаута может поставить один и тот же sweep в очередь дважды. Без amount второе задание обычно ничего не найдёт и будет отклонено; с amount оно может перевести больше, чем вы хотели, если на адрес тем временем пришли новые средства. Всегда задавайте external_id.

  • Сетевые ошибки, таймауты и 5xx: повторяйте с тем же external_id и растущей паузой.
  • 4xx: не повторяйте тот же запрос — исправьте то, о чём говорит ошибка. См. Ошибки и повторы.
  • Задание закончилось rejected или failed: это окончательно. Чтобы попробовать снова — например, с новой авторизацией, — отправьте новый запрос с новым external_id.
ЗапросЧто будет при повторе
POST /v1/hot-walletsВернёт тот же горячий кошелёк (котёл) для той же сети и адреса. После failed перезапустит развёртывание.
PUT /v1/webhookЗадаст те же настройки ещё раз; секрет не меняется.
PATCH /v1/settingsЗадаст те же значения ещё раз.
DELETE /v1/webhookОтветит 404 not_found и ничего не изменит.
GET-запросыНичего не меняют.

POST /v1/webhook/test не идемпотентен: каждый вызов ставит в очередь ещё одно тестовое событие.