Skip to main content
Подпись — основа безопасности API и источник большинства ошибок на старте. Эта инструкция разбирает, как собрать подпись правильно, и показывает типичные грабли. Краткая справочная версия — Аутентификация.

Идея за 20 секунд

Каждый запрос несёт три заголовка:
  • X-Public-Id — кто вы (несекретный идентификатор ключа);
  • X-Timestamp — когда (unix‑секунды, окно ±5 минут);
  • X-Signature — доказательство, что запрос собрали именно вы, и он не изменён.
Подпись — это HMAC‑SHA256 от «канонической строки», склеенной из четырёх частей, на вашем secret.

Каноническая строка

Соберите строку из четырёх частей, разделённых \n (перевод строки):
Затем:
hex в нижнем регистре.

Золотое правило

Сериализуйте тело ОДИН раз в переменную и используйте её и для подписи, и для отправки.
Подпись считается по байтам тела. Если вы подписали один JSON, а отправили другой (пусть даже семантически такой же), подпись не сойдётся и вернётся 401.

Примеры на четырёх языках


Частые ошибки и как их поймать


Помните про идемпотентность

Окно подписи ±5 минут не защищает от повторной обработки внутри этого окна. Реальную защиту от дублей дают два механизма:
  • HTTP‑заголовок Idempotency-Key (рекомендуемый) — любое уникальное значение до 255 символов, одинаковое во всех попытках одного действия. Повтор вернёт тот же ответ и заголовок Idempotent-Replayed: true.
  • order_id/reference — ваш бизнес‑ключ, который тоже дедуплицирует (для выплат обязателен).
Заголовок Idempotency-Key в подпись НЕ входит. Подписывается только каноническая строка {timestamp}\n{METHOD}\n{path}\n{body} — добавление заголовка её не меняет и подпись не ломает.
Подробнее — Идемпотентность и Рецепт устойчивого клиента.

Связанные страницы

Аутентификация

справочная версия.

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

IP‑allowlist

Объект вебхука

другой алгоритм подписи.