Changelog
Сентябрь 2026
10 сентября
HTML-форма передает подписанный контейнер. Вместо отдельных полей счета — data (base64url от JSON) и signature (HMAC-SHA256 от строки data). Адрес приема сменился с invoices/createFromForm на invoices/form. Прежние формы не работают, их нужно пересобрать: раздел «Подпись HTML-формы».
8 сентября
Числовые поля в теле вебхука стали числами. Шесть полей раньше передавались строками, теперь передаются числами: project.commissionRate, invoice.commissionFiatUSD, invoice.amountFiatUSD, invoice.amountFiat, invoice.calcAmountFiat, payment.amount. Состав полей, их имена и порядок не изменились.
Что учесть: незначащие нули пропадают, сумма 10.00 придет как 10. Суммы меньше 0.0001 приходят в экспоненциальной записи, например 1.0e-6 — штатный разбор JSON отдаст правильное число, сломается только ручной разбор строки.
Уведомления, собранные до выкатки и еще не доставленные, придут в прежнем формате. Приемник должен принимать оба варианта, пока очередь не опустеет — это занимает не больше двух суток.
6 сентября
Числовые поля в ответах API стали числами. Затрагивает invoices/list, payments/list и invoices/create.
| Поле | Было | Стало |
|---|---|---|
commissionFiatUSD | "0.10" | 0.1 |
amountFiatUSD | "10.00" | 10 |
amountFiat | "1000.00" | 1000 |
views | "0" | 0 |
payment.amount | "10.500000000" | 10.5 |
Ключ, ограниченный проектом, применяет ограничение во всех методах. Раньше часть методов проект не учитывала. Теперь в методах выдачи это фильтр, а обращение к счету или кошельку чужого проекта отклоняется с ответом Restricted project. Метод, который не умеет работать с ограничением по проекту, такому ключу закрыт. Подробности — в разделе «Область действия».
Список платежей отдает непривязанные платежи. Раньше метод payments/list возвращал только платежи, связанные со счетом. Теперь в выдачу попадают все платежи по вашим кошелькам, у непривязанного отсутствует блок invoice. Именно такие платежи нужны для ручной привязки через invoices/bindPayment.
Отмена счета различает причины отказа. Раньше и на отсутствие счета, и на невыполненные условия приходил общий Invoice not found. Теперь Invoice not found означает только отсутствие счета, а невыполненные условия дают Invoice cannot be canceled.
Идентификаторы неверного формата отклоняются. invoices/list проверяет invoiceId, invoiceUid и projectId, payments/list — walletId и invoiceId. Не подошедшее значение дает Parameter is filled in incorrectly с именем поля. Раньше такой параметр молча отбрасывался, и приходила выдача без фильтра.
Границы периода включают весь названный день. startDate и endDate трактуются от 00:00:00 до 23:59:59. Раньше конечный день отсекался целиком, и запрос за одни сутки возвращал только записи, созданные ровно в полночь. Затрагивает invoices/list, payments/list, statistics/invoices и statistics/payments.
В историю изменения балансов добавлено поле проекта. В каждой операции метода billing/history появилось поле projectId. У операций уровня аккаунта — пополнений и бонусов — оно равно null.
4 сентября
Описание и служебные данные возвращаются в исходном виде. Поля description и serviceData раньше хранились закодированными, и в ответах API кавычка приходила как ", а знак меньше — как <. Теперь возвращается ровно то, что передал продавец. При выводе в HTML экранируйте значение на своей стороне.
HTML-формы принимают только POST. Создание счета переходом по ссылке с параметрами в адресной строке больше не работает — параметры читаются только из тела запроса. Если вы использовали ссылки, замените их на форму с method="post".
3 сентября
Уведомления вебхука подписываются. Добавлены заголовки X-Timestamp и X-Signature, подпись считается алгоритмом HMAC-SHA256 на секрете вебхука. Проверка подписи позволяет отличить настоящее уведомление от подделки. Механика и примеры — в разделе «Проверка подписи вебхука».
Изменение обратно совместимо: если проверку не добавлять, обработчик продолжит работать как раньше.