Журнал изменений API
Все изменения публичного API: новые маршруты, поля, события вебхуков и коды ошибок. Новые записи добавляются сверху, даты указаны по UTC. Изменение, ломающее совместимость, отмечается словом несовместимо и объясняет, что должен сделать интегратор.
2026-10-14, сумма в стейблкоине не пересчитывается, прежняя сумма засчитывается 10 минут
- Токен, привязанный к доллару США (
USDT_*,USDC_*): сумма инвойса с ценой в долларах, зафиксированная при выборе, действует до дедлайна инвойса и после окна котировки больше не пересчитывается, остаток после частичной оплаты — тоже.quote.expires_atу такого инвойса равенexpires_atинвойса, в том числе у инвойса, выбранного раньше. Раньше сумма сдвигалась на центы каждые 30 минут, и покупатель, заплативший ровно показанное, получалpartially_paid. - Остальные токены пересчитываются после окна, как раньше, но перевод в блоке не позже 10 минут после конца окна прежней котировки оценивается и по её сумме. Если он её покрыл, инвойс становится
confirmed, аamount_requested,amount_expectedиquote(с еёnumber) — снова те, что у прежней котировки. См. окно котировки. - Поля и коды ошибок не менялись.
2026-10-14, остаток меньше минимального депозита оплачивает инвойс
- Перевод меньше минимального депозита актива больше не теряется, если это остаток инвойса
per_invoice: когда по инвойсу уже пришёл платёж, аamount_expectedещё не набран, перевод в активе инвойса на его адрес — платёж (kind: payment) любой суммы больше нуля. Раньше он становился пылью, и инвойс, которому не хватало центов, оставалсяunderpaid. См. частичная оплата. - Первый перевод по инвойсу, перевод после того, как сумма набрана, нулевой перевод и перевод на адрес
per_userменьше минимального депозита — по-прежнему пыль. - Поля и коды ошибок не менялись.
2026-10-14, нативная монета из смарт-контракта засчитывается
- Нативная монета EVM-сети, которую отправил смарт-контракт, теперь засчитывается — со смарт-кошелька, мультиподписи, вывода с биржи: она оплачивает инвойс, попадает в ответ
GET /v1/deposits/{tx_hash}и даёт вебхукиdeposit.*, как обычный перевод с кошелька. Сервис находит такой перевод трейсом блока и засчитывает, только если трейс объясняет весь рост баланса адреса; перевод, который объяснить не удалось, по-прежнему разбирает оператор, — см. что приходит на адрес. - У такого перевода
log_index=-2,-3и далее, как уже у перевода, сделанного контрактом в TRON. В одной транзакции их может быть несколько, и рядом — её собственная сумма с-1. Проверьте интеграцию, если она считает, чтоlog_indexнативной монеты всегда-1или что транзакция платит адресу один раз. - Маршруты, поля, тела вебхуков и коды ошибок не менялись. Решение — ADR-0055.
2026-10-14, страница оплаты оценивает ожидание подтверждений
- Новое поле
confirmation_estimateвGET /checkout/v1/invoices/{id}и в ответеPOST /checkout/v1/invoices/{id}/select: пока перевод ждёт подтверждений — сколько блоков ему ещё нужно, сколько это секунд по времени блока сети и ждёт ли сеть ещё и окончательного блока (страница оплаты). Страница показывает это как «Осталось около N минут», а не обещает около минуты в любой сети.
2026-10-14, у нативной монеты нет стандарта токенов
token_standard—nullу нативной монеты вGET /checkout/v1/invoices/{id}и в ответеPOST /checkout/v1/invoices/{id}/select, и у инвойса, и у каждого элементаchoices: BNB — не токен BEP-20, SOL — не токен SPL (страница оплаты). Раньше поле называло стандарт сети для любого актива.
2026-10-06, цена в долларах в выбранной монете
- Новое поле
price_currencyвPOST /v1/invoices. Единственное значение —USD, и только вместе сasset. С нимamount— цена в долларах, а не количество монет: сервис сам пересчитывает её в названный актив по своему курсу (ADR-0070, цена в долларах в выбранной монете). - Ответ на создание сразу готов к оплате:
address,amount_expected,price,quote.rateиexpires_atприходят в ответе наPOST, без страницы оплаты и без выбора покупателя. - Поле необязательное, прежний смысл сохранён: без
price_currencyamountпо-прежнему сумма в единицах актива. Существующие интеграции менять не нужно. price_currencyбезassetотклоняется (400 validation_failed): тамamountи так цена в долларах.- Курс недоступен — инвойс не создаётся:
503 rate_unavailable, и в базе ничего не остаётся. - Новый маршрут
GET /v1/rates: по каждому активу проекта курс, по которому будет посчитан инвойс (рыночный за вычетом наценки сервиса), сам рыночный курс, процент наценки, время наблюдения и признак свежести. Чтобы «≈ 0,45 SOL» рядом с ценой совпадало с суммой инвойса.
2026-10-05, интеграция настраивает проект своим ключом
- Новые маршруты
GETиPATCH /v1/project,GETиPUT /v1/project/assets. Интеграция — или ассистент, которому дали один ключ API — сама указывает адрес вебхука, адреса возврата и принимаемые токены. В кабинет для этого заходить не нужно (ADR-0067, аутентификация). - Секрет подписи вебхуков эти маршруты не возвращают. Он показывается один раз, при создании проекта; ключ API — не доступ к секрету.
- Адрес вебхука можно задать и заменить, но не удалить:
null—400. События, уже поставленные в очередь, должны куда-то уходить. - Режим адресов и режим хранения средств этими маршрутами не меняются: их разрешает оператор.
2026-10-05, режим адресов разрешается по проектам
- Новый код ошибки
422 mode_not_allowedнаPOST /v1/addresses,POST /v1/invoicesиPOST /checkout/v1/invoices/{id}/select: режим адресов этого проекта ему не разрешён. Оператор разрешает ограниченный режим по проектам, а не всей платформе сразу (ADR-0066). Прежний422 address_mode_disabledостался и значит другое: платформа приостановила режим для всех. - Режим адресов проекта стало можно менять. Раньше он выбирался один раз при создании. Теперь оператор разрешает режим, и владелец проекта переключается на него в кабинете. Смена решает, где будет собран следующий платёж, и никогда — где собран прежний: уже выданные адреса остаются при своём, зачисляются и переносятся как раньше.
- Создать проект сразу в
per_userиз кабинета нельзя:422 mode_not_allowed. Создавайте вper_invoiceи переключайтесь после того, как оператор разрешит режим.
2026-10-05, Solana
Solana — четвёртое семейство сетей, с которым работает сервис. Ни один маршрут, ни одно поле и ни одно событие вебхука не изменили форму; изменился набор сетей и активов, которые они несут.
- Приём платежей работает в десяти сетях: к
tron,ethereum,bsc,polygon,base,arbitrum,optimism,avalancheиtonдобавиласьsolana. Её активы —USDT_SOLANA,USDC_SOLANAи нативная монетаSOL_SOLANA, каждому нужно 1 подтверждение; mint'ы и число знаков — в активах Solana. - Выплат в Solana нет, как нет их в EVM-сетях и TON:
422 asset_not_payable. tx_hashперевода в Solana — не шестнадцатеричный хэш. Это первая подпись транзакции: 86–88 знаков base58, у которых регистр несёт смысл и должен сохраняться. В колонку, рассчитанную на 64 шестнадцатеричных знака, она не поместится, а приведение к нижнему регистру уничтожает значение. Это касаетсяGET /v1/deposits/{tx_hash}, поляdepositsинвойса и вебхуковdeposit.*— см. адреса в Solana.- Адрес Solana — тоже base58 из 32–44 знаков и тоже регистрозависим. Храните, сравнивайте и показывайте его ровно таким, каким его вернул API; регистр не нормализуйте никогда.
wallet_urlна странице оплаты в Solana остаётсяnull: ссылку-диплинк кошелька сервис собирает только в TON — см. прочитать инвойс для страницы.- Токен в Solana лежит в associated token account, а не на самом адресе; этот аккаунт сервис создаёт и наблюдает сам. Кошелёк покупателя платит на адрес как обычно, а код, который проверяет платёж чтением цепи, должен знать:
getSignaturesForAddressна адрес перевода SPL не покажет.
2026-10-05, какие сети и токены работают на самом деле
Запись исправляет документацию, а не поведение API: ни один маршрут и ни одно поле не менялись. Прежние записи журнала говорили, что EVM-сети в разработке, а TON планируется; это перестало быть правдой раньше, чем документация это отразила.
- Приём платежей работает в девяти сетях:
tron,ethereum,bsc,polygon,base,arbitrum,optimism,avalanche,ton. Их активы перечисляетGET /v1/assets, контракты и число знаков — в активах. - Нативные монеты принимаются наравне с токенами, по курсу:
TRX_TRON,GRAM_TON,ETH_ETHEREUM,BNB_BSC,POL_POLYGON,ETH_BASE,ETH_ARBITRUM,ETH_OPTIMISM,AVAX_AVALANCHE. Засчитывается только обычный перевод с кошелька. - USDT в Polygon, Arbitrum и OP Mainnet — это USDT0, отдельный актив с собственным контрактом:
USDT0_POLYGON,USDT0_ARBITRUM,USDT0_OPTIMISM. USDC_TRONвыключен оператором целиком, а не только для новых счетов: выплаты в нём тоже выключены и отклоняются с422 asset_payouts_disabled. Документация до этой записи обещала, что выплаты в нём работают, — это было неверно.- Выплаты по-прежнему только в сети TRON, и только в
USDT_TRON. В EVM-сетях и TON выплат нет:422 asset_not_payable. - Список сетей и токенов больше не описывается статусами «работает / в разработке / планируется»: сети и токены говорят, что сервис делает в каждой сети, а что доступно проекту в данный момент — ответ
GET /v1/assets. Актив, выключенный оператором или настройками проекта, в этом ответе не появляется.
2026-10-05, кошелёк сборов виден в API
- API кабинета: у объекта проекта появилось
custody_mode—custodial(деньги хранит сервис) илиpass_through(деньги идут на кошелёк самого проекта). Меняет его только оператор. - API кабинета:
GET /cabinet/v1/merchants/{id}/settlement-walletsотдаёт кошельки проекта, на которые пересылаются принятые средства, по одному на актив: адрес целиком, с какого момента он годен и годен ли уже. У кастодиального проекта список пуст. См. куда уходят деньги. - Административный API:
GET /admin/v1/merchants/{id}/settlement-walletsотдаёт то же плюс кто внёс запись и отпечаток ключа, которым она подписана. - API мерчантов и тела вебхуков не изменились. Запись кошелька по-прежнему делается командой с подписью оператора, а не через API.
2026-10-05, некастодиальный режим в административном API
- Административный API: у объекта мерчанта появилось
custody_mode—custodial(наше хранилище) илиpass_through(кошелёк сборов самого мерчанта).PATCH /admin/v1/merchants/{id}его принимает; перевод вpass_throughбез действующего кошелька сборов отвечает422 settlement_wallet_missing. - Административный API:
GET /admin/v1/custody-modesиPATCH /admin/v1/custody-modes/{mode}— тумблер сквозного режима на платформе. Кастодиальный режим выключить нельзя:422 custody_mode_last_enabled. - API мерчантов, API кабинета и тела вебхуков не изменились. Кошелёк, на который пересылаются деньги мерчанта, вносит оператор подписью вне сервиса, а не через API.
- Для интеграций описано: что значит
settledу проекта с прямыми сборами, почему его баланс остаётся нулевым и что мелкие платежи копятся на адресе приёма, пока перевод не начнёт стоить своих затрат, — см. куда уходят деньги.
2026-10-04, баланс проекта по API
- API мерчантов:
GET /v1/balanceотдаёт баланс по реестру каждого актива, в котором у проекта что-то есть, рядом — что ещё не подтверждено, и те же деньги в долларах по принятым сервисом курсам. Актив без свежего курса попадает в список и вtotal.unpriced_assets, а не оценивается по устаревшему. В ответе естьETag. См. баланс. - Ни один существующий маршрут или поле не изменились.
2026-10-04, QR-код инвойса и условные чтения
- API мерчантов:
POST /v1/invoicesиGET /v1/invoices/{id}принимают параметр строки запросаinclude=qrи тогда отдаютqr.address— QR-код адреса оплаты в виде SVG-картинки вdata:-ссылке, около 11 КБ. Это та же картинка, которую рисует страница оплаты, поэтому продукту, который рисует свою страницу оплаты, библиотека QR не нужна. Без параметра поля нет; лента изменений этот параметр не принимает. См. QR-код. - API мерчантов:
GET /v1/assets,GET /v1/invoices,GET /v1/invoices/{id}иGET /v1/deposits/{tx_hash}отвечают заголовкомETag. Запрос, который вернул его вIf-None-Match, получает304 Not Modifiedбез тела, пока ответ не изменился;*совпадает всегда. Ошибки метки не получают. См. условные чтения. - Ломающее для клиента, который присылал свои параметры строки запроса:
POST /v1/invoicesиGET /v1/invoices/{id}теперь принимают толькоincludeи отклоняют любой другой параметр с400 validation_failed. В документации таких параметров не было; клиенту, который добавлял к этим двум адресам свои метки, нужно перестать.
2026-10-04, лента изменений инвойсов
- API мерчантов:
GET /v1/invoicesотдаёт инвойсы проекта в порядке изменения состояния — догон после пропущенного вебхука. Параметрыupdated_since,status,limit(1–100, по умолчанию 50) иcursor; в ответеinvoicesбез поляdepositsиnext_cursor. Страницы keyset'ом: инвойс, изменившийся во время обхода, страницу не сдвигает. См. ленту изменений. - Прежние маршруты и поля не изменились.
2026-10-04, шаг суммы у токена, привязанного к доллару
- API мерчантов: сумма инвойса в токене, привязанном к доллару, округляется вверх до цента этого токена, а не до его последнего знака. Цена $229.00 при курсе 0.9999 просит
229.03, а не229.024488. Округление по-прежнему вверх: покупатель платит не меньше цены, разница меньше цента и в пользу мерчанта. У токенов, не привязанных ни к чему, шаг прежний — 0.00000001 единицы. Так же шагает остаток, пересчитанный после истечения окна котировки. См. цену и курс и ADR-0053. - Поля и коды ошибок не изменились.
2026-10-04, реквизиты оплаты для своей страницы
- API мерчантов: в ответе инвойса появилось поле
payment_uri— ссылка, открывающая кошелёк с заполненным переводом. Она есть, пока запрошена точная сумма: инвойс ждёт денег, дедлайн не прошёл и котировка держится. Сейчас ссылку даёт только TON; у остальных сетейnull, потому что схемы ссылок, которой сервис доверяет, там нет. - API мерчантов: в
GET /v1/assetsпоявилисьconfirmations— сколько подтверждений нужно переводу в активе, иicon— метка актива в каталоге. По ним мерчант рисует «2 из 20» и список монет на своей странице оплаты, не придумывая эти значения. - Совместимость сохранена: прежние поля не изменились и не исчезли.
- Внутренние маршруты первичной настройки
/setup/*убраны изGET /v1/openapi.json: документ описывает только маршруты самого мерчанта.
2026-09-20, отметка строки вывода выплаченной вручную
- Административный API:
POST /admin/v1/withdrawals/{id}/lines/{line_id}/force-paidотмечает строку заявки выплаченной, не дожидаясь подтверждения из цепи, с обязательной причиной. Это единственное решение сотрудника по заявке, которое двигает деньги: проводится то же, что провела бы сверка, и теми же ключами. В объекте заявки у строк появилисьforced_by,forced_atиforce_reason. См. вывод средств мерчанта и ADR-0058. - API мерчантов, API кабинета и тела вебхуков не изменились.
2026-09-20, плата за вывод в долларах
- Административный API:
POST /admin/v1/withdrawal-feesиPOST /admin/v1/merchants/{id}/withdrawal-feesпринимаютamount_usdвместоamount— фиксированную часть в долларах. Сервис переводит её в монету по свежему курсу при каждой заявке и замораживает в строке; сумма в монете хранится рядом и действует, когда свежего курса нет. В ответе у действующей платы и у строк тарифа появилось полеamount_usd. Без свежего курса запись такой строки отвечает503 rate_unavailable. См. плата за вывод средств и ADR-0059. - API мерчантов, API кабинета и тела вебхуков не изменились. Совместимость административного API сохранена:
amountпо-прежнему принимается.
2026-09-20, своя плата за вывод
- Административный API: у платы за вывод средств мерчанта свой тариф —
GET /admin/v1/withdrawal-fees,POST /admin/v1/withdrawal-fees,GET /admin/v1/merchants/{id}/withdrawal-fees,POST /admin/v1/merchants/{id}/withdrawal-fees— и оверрайд по отдельному проекту. Новые коды ошибокwithdrawal_fee_confirmation_requiredиwithdrawal_fee_valid_from_in_past— см. плата за вывод средств. Решение — ADR-0059. - Несовместимо для клиентов административного API, которые задавали плату за вывод через
POST /admin/v1/payout-fees: теперь это только тариф выплат третьим лицам, а плату за вывод задают маршруты выше. История прежнего тарифа перенесена в новый, поэтому действующие числа не изменились. - API мерчантов, API кабинета и тела вебхуков не изменились.
2026-09-19, вывод средств мерчанта
- API кабинета: заявки на вывод средств проекта на кошельки владельца —
GET /cabinet/v1/withdrawals/assets,GET /cabinet/v1/withdrawals,POST /cabinet/v1/withdrawals/preview,POST /cabinet/v1/withdrawals,GET /cabinet/v1/withdrawals/{id},POST /cabinet/v1/withdrawals/{id}/cancel. В заявке несколько токенов и кошельков, суммы с платами откладываются сразу, создание требует подтверждённого кабинетом кода второго фактора — см. вывод средств. Решение — ADR-0058. - Административный API:
GET /admin/v1/withdrawals/summary,GET /admin/v1/withdrawals,GET /admin/v1/withdrawals/{id}, внесение хэша ручного переводаPOST /admin/v1/withdrawals/{id}/lines/{line_id}/txи отказыPOST /admin/v1/withdrawals/{id}/lines/{line_id}/reject,POST /admin/v1/withdrawals/{id}/reject— см. вывод средств мерчанта. Тариф выплатPOST /admin/v1/payout-feesзадаётся любому активу каталога, а не только тому, где есть выплаты: он же — плата за вывод;GET /admin/v1/payout-feesперечисляет все действующие активы. - Новые коды ошибок этих маршрутов:
withdrawal_not_found,withdrawal_insufficient_balance,withdrawal_not_cancelable,withdrawal_line_not_found,withdrawal_line_not_open,withdrawal_tx_in_use,withdrawal_code_required. - API мерчантов и тела вебхуков не изменились.
2026-09-19, средства в долларах в кабинете
- API кабинета:
GET /cabinet/v1/balancesвозвращает рядом сbalancesновые поляassets,projectsиtotal. Это балансы по активам всех проектов, по проектам и в сумме, с оценкой в долларах США по рыночному курсу. Актив без свежего курса в суммы не входит и перечислен вunpriced_assets— см. API кабинета. - API мерчантов, тела вебхуков и коды ошибок не изменились.
2026-09-18, TON
- Новая сеть
ton— боевая сеть TON с активамиUSDT_TON(6 знаков) иGRAM_TON— Gram, нативная монета TON (9 знаков).USDT_TONоплачивает инвойсы;GRAM_TON— после того как платформа включит приём в нём, какTRX_TRON. Выплат в TON нет.GET /v1/assetsперечисляет активы TON, когда оператор включит сеть, — см. сети и токены и активы. - Адрес в TON возвращается в user-friendly форме: 48 символов base64url, без флага bounce —
UQ…, в тестовой сети0Q…. В этой формеaddressприходит вPOST /v1/addresses, в инвойсах, вGET /v1/deposits/{tx_hash}и в вебхукахdeposit.*, и так его показывают покупателю, ничего не меняя, — см. адреса в TON.contractтокена TON вGET /v1/assets— мастер-контракт жетона в raw-форме:0:и 64 шестнадцатеричные цифры. Проверьте интеграцию, если она сверяет адрес с формами TRON и EVM-сетей: форму TON тоже нужно принимать. - Хэш транзакции TON — 64 шестнадцатеричных символа без
0x, как в TRON;GET /v1/deposits/{tx_hash}его принимает. В TONlog_indexу перевода токена0, у перевода GRAM-1— см. проверить перевод. - Маршруты страницы оплаты отдают новое поле
wallet_url: в TON — ссылкуton://transfer, которая открывает приложение кошелька с адресом, оставшейся суммой и токеном; в других сетяхnull. Страница показывает её кнопкой «Открыть в кошельке» — см. прочитать инвойс для страницы. Мерчантам эти маршруты не нужны. - Административный API: семейство
ton, у которогоchain_id— глобальный идентификатор сети;chain_symbolв предпросмотре токена бываетnull, если жетон хранит символ вне цепи; мастер-контракт жетона TON принимается в raw-форме и в user-friendly; порог газового кошелька иgas_walletесть и у TON — см. административный API. - Коды ошибок и тела вебхуков
invoice.*не изменились.
2026-09-16, платежи в нативных монетах EVM-сетей
- Платформа может принимать к оплате нативные монеты EVM-сетей —
ETH_ETHEREUM,BNB_BSC,POL_POLYGON,ETH_BASE,ETH_ARBITRUM,ETH_OPTIMISM,AVAX_AVALANCHE, — когда включит их сеть и приём в них. Они ведут себя какTRX_TRON: цена по курсу,GET /v1/assetsперечисляет их, пока в них можно выставить инвойс, 18 знаков, выплат нет — см. сети и токены и активы. EVM-сети по-прежнему в разработке. - Засчитывается только обычный перевод с кошелька. Монета, отправленная смарт-контрактом (смарт-кошельком, некоторыми биржами), автоматически не засчитывается, не попадает в ответ
GET /v1/deposits/{tx_hash}, и вебхука нет — см. что приходит на адрес. - У перевода такой монеты
log_index=-1вGET /v1/deposits/{tx_hash}и в вебхукахdeposit.*, как уже у перевода TRX. Проверьте интеграцию, если она считает, чтоlog_indexне бывает отрицательным. - Маршруты, поля, тела вебхуков и коды ошибок не изменились. Административный API:
PATCH /admin/v1/assets/{id}включаетaccepts_paymentsу нативной монеты EVM-сети вместе с еёrate_symbol, иpayments_supportedу неё —true, — см. административный API. Решение — ADR-0055.
2026-09-16, платежи в TRX
- Платформа может принимать к оплате
TRX_TRON— нативную монету TRON, когда платформа включает приём в нём.GET /v1/assetsперечисляетTRX_TRON, пока в нём можно выставить инвойс: список берите оттуда — см. список активов и активы. - Такие инвойсы и выбор работают так же, как у любого актива, цена в который переводится по курсу. Инвойс, созданный без
assetи оплачиваемый вTRX_TRON, переводится по курсу, пониженному на наценку платформы, а остаток долга после окна котировки пересчитывается — см. цену и курс. У инвойса, созданного сasset=TRX_TRON, сумма в TRX, её задаёт мерчант. - Выплаты в
TRX_TRONневозможны:POST /v1/payoutsотвечает422 asset_not_payable. - Проверьте интеграцию, если она сверяет
assetинвойса, перевода или вебхука с фиксированным перечнем: примитеTRX_TRON. Число знаков берите изGET /v1/assets, а не из кода. - Маршруты, поля, тела вебхуков и коды ошибок не изменились. Административный API:
PATCH /admin/v1/assets/{id}включаетaccepts_paymentsуTRX_TRON, а для нативной монеты EVM-сети и для снятияrate_symbolу актива, принимаемого без привязки к доллару США, отвечает409 asset_flag_locked— см. административный API. Решение — ADR-0054.
2026-09-16, цены в долларах США по курсу
- Инвойс, созданный без
asset, переводится в выбранный токен по курсу, который собирает сервис, в том числе стейблкоин: 1 USDT больше не считается равным 1 USD. Сумма округляется вверх до последнего знака токена, а у токена, у которого знаков больше 8, — до 8 знаков, поэтому покупатель платит не меньше цены. Токен, не привязанный к доллару США, переводится по курсу, пониженному на наценку платформы. См. цену и курс; решение — ADR-0053. - Несовместимо для кода, который сравнивает свою цену с
amount_requestedинвойса, созданного безasset: цена, переведённая по курсу, не равнаprice.amount. Сравнивайте сprice.amount. - Несовместимо для кода, который читает
amount_expectedилиamount_remainingтакого инвойса один раз. После окна котировки, пока инвойс в статусеcreatedилиpartially_paidи дедлайн не прошёл, остаток долга пересчитывается по текущему курсу, и эти суммы иamount_requestedменяются. Вебхука об этом нет: читайте суммы изGET /v1/invoices/{id}. См. окно котировки. - Цена, которая не записывается в токене точно, больше не отклоняется с
400 validation_failed: она округляется вверх. - Новое поле
quoteв ответахPOST /v1/invoicesиGET /v1/invoices/{id}:rate,market_rate,markdown_percent,currency,numberиexpires_at. Оноnullу инвойса, созданного сasset, до выбора и у инвойса, токен которого выбран до этого изменения. См. котировку. - Проверьте интеграцию на новый код ошибки:
POST /v1/invoicesбезassetотвечает503 rate_unavailable, когда ни у одного разрешённого токена нет свежего курса, и инвойс не создаётся. Повторите позже с тем жеorder_id.422 asset_not_offeredтеперь значит, что у токена изcurrenciesнет курса, а422 no_payable_assets— что мерчант не принимает ни одного токена с курсом. См. коды ошибок. - Маршруты страницы оплаты:
GET /checkout/v1/invoices/{id}отдаётrate,rate_idиrate_expires_atв каждом элементеchoices, а у инвойса —rates_unavailableиquoteсrate,currencyиexpires_at.POST /checkout/v1/invoices/{id}/selectпринимает необязательныйrate_idи может ответить503 rate_unavailable. См. сохранение выбора токена. Мерчантам эти маршруты не нужны. - API кабинета:
quoteу инвойсов;POST /cabinet/v1/invoicesможет ответить503 rate_unavailable. Административный API:quoteу инвойсов, новые маршрутыGET /admin/v1/ratesиPATCH /admin/v1/rates/settingsи поле активаrate_symbol— см. административный API. - Тела вебхуков не изменились. Инвойсы, созданные с
asset, работают как раньше.
2026-09-14, газовый кошелёк в реестре
- Административный API: новый вид счёта реестра
gas_walletвGET /admin/v1/balancesи в проводкахGET /admin/v1/ledger/transactions— газовый кошелёк EVM-сети в её нативной монете. Проводка газа переноса в хранилище —reason=fee, ключsweep_gas:{network}:{tx_hash}: дебетnetwork_fees, кредитgas_wallet. См. административный API. - Публичный API, вебхуки и коды ошибок не изменились.
2026-09-14, управление сетями и токенами
- Административный API управляет сетями и токенами — административный API. Новые маршруты:
POST /admin/v1/networks,PATCH /admin/v1/networks/{id},GET /admin/v1/networks/{id}/tokens/{contract},POST /admin/v1/assetsиDELETE /admin/v1/assets/{id}.PATCH /admin/v1/assets/{id}меняет ещё минимумы, подтверждения, порог свипа, флаги приёма и выплат, архив и знак, аGET /admin/v1/assetsпринимает параметрnetwork. - Новые поля в ответах административного API: у сети —
icon_slugиrpc_configured, у актива —pegged_to,sweep_min_amount,icon_slugиpayouts_supported. Новые коды ошибок:asset_exists,asset_in_use,asset_referenced,asset_confirmations_below_finality,asset_symbol_required,contract_invalid,contract_not_token,network_not_found,network_exists,network_without_assets,network_family_not_supported,network_rpc_not_configured,network_chain_id_mismatch,network_rpc_unavailable. - Маршруты страницы оплаты
GET /checkout/v1/invoices/{id}иPOST /checkout/v1/invoices/{id}/selectотдаютnetwork_icon_slug— slug знака сети — у инвойса и в каждом элементеchoices, см. прочитать инвойс для страницы. API мерчантов не изменился. Новые EVM-сети появляются в реестре выключенными, и их активы мерчантам не предлагаются.
2026-09-14, список активов, хэши EVM-сетей, ссылки на обозреватель
Новые поля с названием сети и ссылками на её обозреватель. Инвойсы (
POST /v1/invoices,GET /v1/invoices/{id}):network_name,address_explorer_urlиexplorer_urlв каждом элементеdeposits.GET /v1/deposits/{tx_hash}:explorer_url. Выплаты:network_nameиexplorer_url. Ссылка собирается из шаблона обозревателя сети и равнаnull, если шаблона у сети нет — см. создать инвойс.Маршрут страницы оплаты
GET /checkout/v1/invoices/{id}отдаётaddress_explorer_urlиexplorer_urlвdeposits, аaddress— в том виде, в каком его видит покупатель: в EVM-сетях с контрольной суммой EIP-55 — см. прочитать инвойс для страницы. API мерчанта отдаёт EVM-адреса в нижнем регистре.Новый маршрут
GET /v1/assets: активы, в которых мерчант может выставить инвойс сейчас, сnetwork,network_name,token_standard,contract,decimalsиmin_amount. По нему решают, какие токены предложить, вместо списка в коде — см. список активов.GET /v1/deposits/{tx_hash}принимает и хэш в форме EVM-сетей:0xи 64 шестнадцатеричных символа. Хэш ищется ровно в той форме, в которой передан, в любом регистре; хэш TRON по-прежнему пишется без0x— см. проверить перевод.EVM-сети по-прежнему в разработке: пока оператор не включил ни одной,
GET /v1/assetsперечисляет только активы TRON, и для интеграции с TRON ничего не меняется. Коды ошибок не изменились.
2026-09-14, сеть в событиях вебхуков
- Новое поле
networkвdataсобытийinvoice.*иdeposit.*: идентификатор сети актива, напримерtron, — то же значение, чтоnetworkинвойса и перевода в API. Вinvoice.expiredинвойса, покупатель которого не выбрал токен, оноnull. См. вебхуки. - Поле добавлено, ничего не удалено и не переименовано. Проверьте интеграцию, если она отклоняет неизвестные поля в теле вебхука: примите
network. - Сервис готовится принимать платежи в EVM-сетях, где один хэш транзакции может быть в нескольких сетях. Перевод определяют
network,tx_hashиlog_indexвместе. - Маршруты и коды ошибок не изменились.
2026-09-14, USDC в TRON только для выплат
- Проверьте интеграцию, если она создаёт инвойсы в
USDC_TRONили передаёт его вcurrencies. Circle прекратила выпуск USDC в сети TRON, и оператор выключил приём вUSDC_TRON:POST /v1/invoicesв этом активе и с ним вcurrenciesотвечает422 asset_payments_disabled. Уберите актив из запросов или обрабатывайте этот код. См. активы. - Страница оплаты не предлагает
USDC_TRONпокупателю, аPOST /v1/addressesне включает его вassets. - Выплаты в
USDC_TRONработают. Уже открытые инвойсы вUSDC_TRONоплачиваются, а перевод USDC на постоянный адресper_userзачисляется, как раньше. - Маршруты, поля и коды ошибок не изменились. Обоснование — ADR-0026, поправка от 2026-09-14.
2026-09-14, частичная оплата
- Новый статус инвойса
partially_paid: до дедлайна подтверждённые переводы покрыли частьamount_expected, и ни один перевод не ждёт подтверждений. Покупатель может дослать остаток на тот же адрес до дедлайна. Допуска недоплаты нет:confirmedпо-прежнему означает всю сумму, а после дедлайна без остатка приходитunderpaid. См. частичную оплату. - Новое событие вебхука
invoice.partially_paid— при каждом переходе в этот статус. См. события. - Новое поле
amount_remainingв ответахPOST /v1/invoicesиGET /v1/invoices/{id}:amount_expectedминусamount_received, не меньше нуля;null, пока покупатель не выбрал токен. То же поле — в ответе маршрута страницы оплатыGET /checkout/v1/invoices/{id}. - Несовместимо для кода, который разбирает
statusили тип события строгим перечнем. Раньше частично оплаченный инвойс до дедлайна оставалсяseen; теперь онpartially_paid, аseenозначает, что перевод ждёт подтверждений. Добавьтеpartially_paidв перечень и не отдавайте при нём товар. Наinvoice.partially_paid, если обработчик его не обрабатывает, отвечайте2xx. - Проверьте интеграцию. Кнопка «Вернуться в магазин» ведёт на
cancel_urlи соstatus=partially_paid: инвойс открыт и ещё может быть оплачен — см. переход до исхода. - Страница оплаты при
partially_paidпросит дослатьamount_remainingна тот же адрес, а приseenбольше не пишет, что ничего отправлять не нужно. См. страницу оплаты. - API кабинета и административный API:
partially_paidсреди статусов инвойса и в фильтреstatus. Коды ошибок не изменились.
2026-09-14, проверка перевода и пауза режима адресов
- Новый маршрут
GET /v1/deposits/{tx_hash}: переводы транзакции на адреса мерчанта сkind,status,confirmationsиcredited. Пополнениеper_userбез инвойса теперь проверяется через API, как требует главное правило вебхуков, — см. проверку перевода. Новый код404 deposit_not_found. - Проверьте интеграцию. Платформа может приостановить режим адресов. Пока режим на паузе, его проекты получают
422 address_mode_disabledотPOST /v1/addresses,POST /v1/invoicesиPOST /checkout/v1/invoices/{id}/select, а новый проект не может выбрать этот режим, — см. режим на паузе. Переводы на уже выданные адреса зачисляются как обычно. Обрабатывайте код как любой другой422: сообщите покупателю, что оплата сейчас недоступна. - API кабинета:
GET /cabinet/v1/address-modes;POST /cabinet/v1/merchantsиPOST /cabinet/v1/invoicesмогут ответить422 address_mode_disabled. Административный API:GET /admin/v1/address-modesиPATCH /admin/v1/address-modes/{mode}, код422 address_mode_last_enabled— административный API.
2026-09-13, событие о неудавшейся выплате
- Вебхук
payout.failedприходит при каждом переходе выплаты вfailed. Раньше — только когда сканер находил её транзакцию неуспешной. Теперь ещё: когда сервер подписи отказался её подписывать; когда попытки исчерпаны; когда неуспешную транзакцию прежней попытки нашёл сам сервер подписи. Событие одно на выплату. См. события. - Несовместимо для кода, который разбирает
payout.failedстрого:tx_hashв нём бываетnull— у выплаты, для которой ничего не подписывалось. Полеreason— текст для человека. - Выплата больше не становится
failed, если узел ответил на отправку её транзакции ошибкой или не ответил вовсе: деньги могли уйти. Она остаётся вqueuedс тем жеtx_hash, пока транзакция не найдётся в цепи или не истечёт, не попав в блок. См. статусы выплат. - Маршруты и коды ошибок не изменились.
2026-09-13, документация на английском
- Документация публикуется на двух языках. Английская — основная, по прежним адресам:
/docs,/docs/<раздел>.md,/llms.txtи/llms-full.txt. Русская — под/ru:/ru/docs,/ru/docs/<раздел>.md,/ru/llms.txtи/ru/llms-full.txt. Интеграциям, которые читают русский Markdown по прежним адресам, нужно перейти на адреса с/ru. - Страница оплаты открывается на языке покупателя: параметр
langвcheckout_url, затем выбор покупателя на странице, затем язык браузера, иначе английский. См. страницу оплаты. - API, коды ошибок и события вебхуков не изменились.
2026-09-13, токен выбирает покупатель
assetвPOST /v1/invoicesстал необязательным. Без него токен и сеть выбирает покупатель на странице оплаты, аamount— цена в долларах США. Новое необязательное полеcurrencies— из каких активов выбирать. См. токен выбирает покупатель, решение — ADR-0042.У инвойса новые поля
price,currenciesиasset_selected_at.Несовместимо для кода, который разбирает инвойсы строго. У инвойса без выбранного токена равны
null:asset,network,address;amount_requested,amount_expected,amount_received,amount_credited;fees.service.fixedиfees.service.amount.
Интеграции, которые всегда передают
asset, таких инвойсов не создают, и менять им ничего не нужно. Те жеnull— в событииinvoice.expiredинвойса, срок которого вышел без выбора, и в ответах API кабинета и консоли.Повтор
POST /v1/invoicesбезassetсравнивает цену и наборcurrencies: другой набор —409 order_id_conflict.Новые коды:
422 asset_required,422 no_payable_assets,422 asset_not_offered; у маршрута страницы оплаты ещё409 asset_already_selectedи409 invoice_expired.Маршрут страницы оплаты
GET /checkout/v1/invoices/{id}: поляpriceиchoices, поля актива и сумм допускаютnull. Новый маршрутPOST /checkout/v1/invoices/{id}/select. Мерчантам они не нужны.POST /cabinet/v1/invoices:assetнеобязателен, новое полеcurrencies.Административный API: в инвойсе поля
price,currenciesиasset_selected_at; актив, адрес и суммы допускаютnull.
2026-09-13, срок инвойса и адреса возврата
expires_inвPOST /v1/invoicesстал необязательным: без него инвойс ждёт платежа 3600 секунд (1 час).- Несовместимо для запросов со сроком меньше 5 минут или больше 72 часов. Границы
expires_inтеперь от 300 до 259200 секунд — вPOST /v1/invoicesи вPOST /cabinet/v1/invoices. Раньше были от 60 до 604800 (7 дней). Запрос вне границ получает400 validation_failed, в том числе повтор запроса, принятого раньше: форма проверяется до поиска инвойса. Если интеграция ставит срок больше 72 часов, уменьшите его. Уже созданные инвойсы сохраняют свой срок. - Переопределения
return_urlиcancel_urlвPOST /v1/invoicesдопускаются и в пределах сайта проекта из заявки (site_url): origin должен совпасть с адресом проекта того же вида или с сайтом проекта. Наt.meиtelegram.meсовпасть должно и имя бота или канала — первый сегмент пути, без учёта регистра; это же правило теперь действует и для адреса проекта того же вида. Раньше без адреса того же вида в настройках проекта переопределение отклонялось с422 redirect_url_not_allowed. Требования к форме адреса не изменились — см. адреса возврата. - Проверьте интеграцию. Пока инвойс можно оплатить, страница оплаты показывает кнопку «Вернуться в магазин», если у инвойса или проекта есть адрес отмены. Кнопка ведёт на
cancel_urlс подписью иstatus=createdилиstatus=seen: инвойс при этом открыт и ещё может быть оплачен. Если обработчик адреса отмены отменяет заказ, пусть сначала проверит статус черезGET /v1/invoices/{id}— см. переход до исхода. Сама страница, пока инвойс открыт, никуда не переводит. POST /cabinet/v1/invoices: необязательныеreturn_urlиcancel_urlпо тем же правилам.- Маршрут страницы оплаты
GET /checkout/v1/invoices/{id}: новое полеback_url— подписанный адрес для кнопки «Вернуться в магазин». - Соответствие параметров Heleket — в странице оплаты.
2026-09-13, процент и фиксированная сумма комиссий
- У комиссии сервиса инвойса появилась фиксированная сумма по активу. Новое поле
fees.service.fixed— сумма, записанная в инвойс при создании;fees.service.amount— по-прежнему всё удержанное, теперь это процент и фиксированная сумма вместе. Поля только добавлены. То же — в данных событийinvoice.*, в ответах API кабинета и страницы оплаты. См. комиссии. - Проверьте интеграцию. Если комиссию сервиса платит покупатель,
amount_expected= цена + процент + фиксированная сумма. Сравнивайте свою цену сamount_requested, как и раньше. Пока оператор фиксированную сумму не задал, она равна нулю, и ничего не меняется. - Фиксированная сумма удерживается один раз на инвойс и не больше полученного: платёж меньше неё удерживается целиком. Пополнение
per_userбез инвойса — отдельная операция со своей фиксированной суммой. - У комиссии выплаты появился процент от суммы: новые поля
fees.network.percentиfees.network.fixed, аfees.network.amount— вся комиссия, фиксированная сумма плюс процент отamount, округлённый вниз. То же — в данных событийpayout.confirmedиpayout.failed. См. комиссию за выплату. - Административный API: маршруты
GET /admin/v1/invoice-feesиPOST /admin/v1/invoice-fees, кодыinvoice_fee_confirmation_requiredиinvoice_fee_valid_from_in_past— административный API. Несовместимо для клиентов административного API:POST /admin/v1/payout-feesтребует полеpercentи принимаетconfirm_high_rate, а в ответе у действующей комиссии и у строк тарифа появилось полеpercent. Консоль обновлена в том же изменении.
2026-09-13, комиссия сети
- Несовместимо для кода, который проверяет
fees.network.statusинвойса по перечнюquoted,pending,settled. У инвойса нет отдельной комиссии сети: затраты сети на приём входят в комиссию сервиса, иfees.network.statusтеперь всегдаincluded. Прежние значения больше не приходят. Ключи сохранены:quote,quote_rateиactual— всегдаnull,payer— всегдаmerchant. Если интеграция проверяет перечень строго, добавьтеincluded. См. комиссии. То же — в событияхinvoice.*и в ответах API кабинета и страницы оплаты. - Коды
422 network_fee_payer_not_supportedи503 network_fee_quote_unavailableостаются: покупатель комиссию сети не несёт. Изменились только их сообщения. - У выплаты новое поле
fees.network:payer— всегдаmerchant,amount— фиксированная комиссия сети, записанная в выплату при создании,charged— сколько списано с баланса проекта. То же — в данных событийpayout.confirmedиpayout.failed. См. комиссию за выплату. - Комиссия сети списывается с баланса проекта при подтверждении выплаты, отдельной проводкой реестра; выплата, провалившаяся в цепи, её не несёт. Получатель по-прежнему получает ровно
amount. - Административный API: тариф комиссии сети за выплату —
GET /admin/v1/payout-feesиPOST /admin/v1/payout-fees, кодыpayout_fee_confirmation_requiredиpayout_fee_valid_from_in_past; новый вид счёта реестраnetwork_cost_recoveryвGET /admin/v1/balancesи в проводках — административный API.
2026-09-13, комиссия сервиса
- У инвойса новые поля:
amount_requested— цена мерчанта,amount_credited— полученное за вычетом удержанных комиссий,fees— комиссия сервиса и комиссия сети. Поля только добавлены, прежние не меняют смысла:amount_expected— по-прежнему сумма, которую должен заплатить покупатель. См. комиссии. - Проверьте интеграцию. Если в проекте комиссию сервиса платит покупатель,
amount_expectedбольше цены на эту комиссию. Код, который сравниваетamount_expectedсо своей ценой заказа, должен сравниватьamount_requested. В проектах, где комиссию платит мерчант (так по умолчанию),amount_expectedравен цене, как раньше. - Идемпотентность
POST /v1/invoicesпоorder_idсравниваетamountзапроса с ценойamount_requested: повтор присылает цену, а не сумму с комиссией. - Комиссия сервиса удерживается с каждого подтверждённого платежа отдельной проводкой реестра и уменьшает баланс мерчанта. Ставка записывается в инвойс при создании: смена тарифа не меняет уже выставленные инвойсы.
- Те же поля — в данных событий
invoice.*(вебхуки) и в ответе маршрута страницы оплаты; страница оплаты показывает разбивку «Цена · Комиссия сервиса · Итого», когда комиссию платит покупатель (страница оплаты). - Новый код
503 network_fee_quote_unavailable: проект настроен так, что комиссию сети платит покупатель, а посчитать её сейчас нельзя. Такую настройку API кабинета больше не принимает —422 network_fee_payer_not_supported. - Административный API: тарифы комиссии сервиса —
GET /admin/v1/service-fees,POST /admin/v1/service-fees/platform,GET /admin/v1/merchants/{id}/service-fees,POST /admin/v1/merchants/{id}/service-fees, кодыservice_fee_confirmation_requiredиservice_fee_valid_from_in_past— административный API.GET /admin/v1/feesостался отчётом о комиссиях сети.
2026-09-13, проверка проектов и настройки проекта
- Проект, который бизнес заводит сам, принимает платежи только после проверки. Пока он не одобрен или если отклонён,
POST /v1/invoicesиPOST /v1/addressesотвечают новым кодом403 merchant_not_approved. Ключи API при этом работают, чтение инвойсов тоже. Все мерчанты, созданные раньше, одобрены: для существующих интеграций ничего не меняется. - Владелец может выключить приём в активе для своего проекта. Тогда
POST /v1/invoicesв этом активе отвечает новым кодом422 asset_disabled_by_merchant, аPOST /v1/addressesне включает актив в списокassets. Уже открытые инвойсы оплачиваются и закрываются, повтор принятого запроса возвращает инвойс. 403 merchant_disabledтеперь означает выключение и оператором, и владельцем проекта.- Проект без адреса вебхуков событий не получает: они не ставятся в очередь и после появления адреса не досылаются (вебхуки).
- Административный API: у мерчанта новые поля —
review_status,review_reason,reviewed_at,reviewed_by,site_url,description,network_fee_payer,service_fee_payer,disabled_by. Появились фильтрGET /admin/v1/merchants?review_status=, маршрутыPOST /admin/v1/merchants/{id}/approveиPOST /admin/v1/merchants/{id}/reject— административный API. Несовместимо для клиентов административного API:webhook_urlмерчанта может бытьnull. Консоль обновлена в том же изменении. - Маршруты
/cabinet/v1для приложения кабинета: служебные, снаружи недоступны и вGET /v1/openapi.jsonне входят.
2026-09-13, переключатели приёма и выплат
- Оператор может временно выключить приём или выплаты в активе. Пока приём выключен,
POST /v1/invoicesв этом активе отвечает новым кодом422 asset_payments_disabled, аPOST /v1/addressesне включает актив в списокassets. Пока выключены выплаты,POST /v1/payoutsотвечает новым кодом422 asset_payouts_disabled. - Повторы запросов, принятых раньше, отвечают как прежде: инвойс по тому же
order_idи выплата по тому жеreferenceвозвращаются. - Уже открытые инвойсы оплачиваются и закрываются, уже созданные выплаты исполняются: переключатель касается только нового.
- Административный API:
PATCH /admin/v1/assets/{id}, поляpayments_enabledиpayouts_enabledв объекте актива, новые кодыasset_not_foundиasset_flag_locked— административный API.
2026-09-13, административный API консоли
- Маршруты
/admin/v1для консоли оператора: мерчанты и их ключи, инвойсы, остатки счетов реестра, движение средств, комиссии сети, каталог активов, доставки вебхуков и журнал аудита — административный API. Доступ по токену консолиADMIN_API_TOKENи заголовку оператораX-Operator; без токена маршрутов нет (ADR-0033). - Адреса возврата мерчанта
return_urlиcancel_urlвидны в объекте мерчанта и меняютсяPATCH /admin/v1/merchants/{id}по правилам страницы оплаты. - Новые коды ошибок, только у этих маршрутов:
merchant_not_found,api_key_not_found,delivery_not_found,delivery_not_failed. - Маршруты
/v1и описаниеGET /v1/openapi.jsonне изменились: административные маршруты в него не входят.
2026-09-13, страница оплаты и адреса возврата
- У инвойса новое поле
checkout_url— ссылка на страницу оплаты, если оператор её настроил, иначеnull. - Необязательные поля
return_urlиcancel_urlвPOST /v1/invoices: куда страница оплаты вернёт покупателя. Допускаются только в пределах origin адресов, заданных у мерчанта оператором; иначе новый код422 redirect_url_not_allowed. Те же поля появились в ответе инвойса. - Повтор
POST /v1/invoicesс другимиreturn_urlилиcancel_url—409 order_id_conflict, как повтор с другой суммой. Запросы без этих полей ведут себя как раньше. - Возврат покупателя подписан: параметры
invoice_id,order_id,status,ts,signature, подпись HMAC-SHA256 секретом вебхуков. Формат и код проверки — в странице оплаты. Решение — ADR-0032. GET /checkout/v1/invoices/{id}— служебный маршрут сервера страницы оплаты, без ключа API, в приватной сети. Мерчантам он не нужен.
2026-09-12, USDC в сети TRON
- Новый актив
USDC_TRON: инвойсы и выплаты в USDC принимаются наравне с USDT, 6 знаков после запятой, 20 подтверждений. КонтрактTEkxiTehnzSmSe2XqrBj4w32RUN966rdz8— прочитан в сети, а не взят из статьи:symbol() = USDC,name() = USD Coin,decimals() = 6. Обоснование и граница решения — в ADR-0026. - USDC на адресе приёма больше не считается неожиданным активом сам по себе.
unexpected_asset— актив каталога, который адрес не принимает: на адресе инвойса — актив, отличный от актива инвойса, на постоянном адресе — актив, не принимаемый к оплате (TRX). Токен, которого нет в каталоге, не записывается вовсе. Первая редакция этого пункта называлаunexpected_assetтокеном вне каталога; это было неверно и исправлено 2026-09-14. - TRX платёжным активом пока не стал: в режиме сжигания энергии (
SWEEP_ENERGY_MODE=burn) комиссию за свип платит сам адрес приёма, поэтому TRX на него кладёт оператор — и с включённым флагом эти операционные деньги были бы зачислены как чей-то платёж. Сначала правило, отличающее переводы с наших адресов, и тест; потом флаг. Выплаты в TRX не появятся и после: суточные лимиты складывают суммы в одной единице, что верно только для привязанных к доллару активов. - Активы тестовых сетей не изменились: проверяемого контракта USDC в Nile и Shasta нет.
2026-09-12, домен в установщике
POST /setup/domain— панель находит у провайдера DNS зону, которой принадлежит указанное имя, создаёт или исправляет запись A на адрес этого сервера и возвращает то, что видно в публичном DNS прямо сейчас. Проверяется не своя запись, а ответ сети: записанное и видимое — разные утверждения, и работает только второе.- Если зоны у провайдера нет, панель создаёт её сама и показывает NS-серверы, которые нужно прописать у регистратора домена: без делегирования зону не видит никто, какими бы правильными ни были записи в ней. Зона создаётся под регистрируемым именем — последние две метки.
- Ответ маршрута говорит, видит ли провайдер делегирование (
delegated), создавалась ли зона (zone_created) и какие NS-серверы нужны (nameservers). - Шаг «Домен» стоит первым и необязателен: без домена сервис доступен по адресу сервера. Переменные
SETUP_DOMAINиBUNNY_API_KEYпишет сама панель; ключ провайдера используется только для записи и проверки и обратно не показывается. - Панель первого запуска теперь открывается в браузере по адресу сервера — порт API публикуется на время установки одной переменной и возвращается на loopback после неё (ADR-0025). Маршруты
/v1не изменились.
2026-09-12, установщик записывает конфигурацию сам
- Страница первого запуска больше не печатает блок переменных для вставки руками: она записывает файл окружения на сервере —
POST /setup/env. Значения проверяются теми же разборщиками, которыми сервис читает конфигурацию при старте, поэтому записанный файл — это файл, с которым сервис запускается. Маршруты/v1не изменились. POST /setup/signer-valuesиGET /setup/signer-env— выбор владельца для сервера подписи и готовый файл окружения для него вместе с командами по порядку. Пароль роли базы и два значения сида в него не попадают: первый уже есть на этом сервере, вторые создаются на том.- Шаги «Сеть и узлы» и «Файл окружения» — новые и обязательные. Второй закрывается только когда значения не просто записаны, но и применены: переменные читаются один раз, при старте.
- Секрет, принятый страницей, обратно не отдаётся: в ответе
GET /setup/stateу него только признак «задано». Пустое поле означает «не менять». - Поле, в которое вставили 12 или 24 коротких слова, отвергается: мнемоника не вводится на этой странице ни в одно поле. Обоснование и границы — в ADR-0024.
2026-09-12, страница первого запуска
- Пока настройка сервиса не завершена, API отдаёт страницу
GET /setup, которая ведёт по шагам и проверяет каждый. Когда все обязательные шаги закрыты, её маршруты отвечают404. Мерчантов это не касается: маршруты/v1не изменились. - Служебные маршруты страницы:
GET /setup/state,POST /setup/verify,POST /setup/steps/{key},POST /setup/merchant. Доступны только из приватной сети и только с одноразовым кодом из лога сервиса. См. первый запуск. - Страница не принимает и не создаёт мнемонику, парольную фразу и приватную половину операторского ключа — обоснование в ADR-0024.
2026-09-12, отправка выплат
- События
payout.confirmedиpayout.failed: выплата подтверждена сетью или её транзакция попала в блок неуспешной. Поля — в вебхуках. Как и раньше, тело вебхука — сигнал «сходи проверь»: состояние выплаты берите изGET /v1/payouts/{id}. - Выплата в
failedне повторяется автоматически: новая попытка требует новогоreference. - Остальное в этом обновлении внутреннее: подпись выплат с горячего кошелька, вторая независимая проверка вайтлиста вместе с подписью оператора, предохранитель, останавливающий выплаты сам. Публичные маршруты не изменились.
2026-09-12, выплаты
POST /v1/payouts— создание выплаты, идемпотентное поreference. Ответ202у созданной выплаты,200у повтора. См. выплаты.GET /v1/payouts/{id}— текущее состояние выплаты с её статусом и причинами ожидания.- Выплата возможна только на адрес из вайтлиста мерчанта и только после задержки перед первым использованием. Переход лимита выплату не отклоняет: она принимается со статусом
pending_reviewи ждёт подтверждения человека, аreview_reasonsназывает перейденные пределы. См. лимиты. - Новые коды ошибок:
payout_not_found,reference_conflict,asset_not_payable,address_not_whitelisted,payouts_halted. См. коды ошибок. - Отправка выплат в сеть и события вебхуков
payout.confirmedиpayout.failedпоявятся в следующем обновлении: пока выплата доходит до статусаqueuedи ждёт исполнения.
2026-09-12, свипы
- Инвойс доходит до статуса
settled: средства по нему перенесены в холодное хранилище. Для мерчанта это то же, чтоconfirmed, вебхука у перехода нет — товар отдаётся наconfirmed, как и раньше. См. статусы. - Остальное в этом обновлении внутреннее: подпись и отправка свипов, подтверждение их в цепи и проводки в реестре. Публичные маршруты и события вебхуков не изменились.
2026-09-11, операционные маршруты
GET /admin/health— состояние сервиса для оператора и мониторинга: отставание сканера в блоках и глубина очереди вебхуков. См. операционное состояние.GET /metrics— те же показатели в текстовом формате Prometheus.- Оба маршрута служебные: аутентификации не требуют, данных мерчантов не содержат и доступны только в приватной сети.
2026-09-11, доставка вебхуков
- События из очереди уходят на URL мерчанта с подписью
X-Signatureи заголовкомX-Timestamp, с повторами по расписанию из описания вебхуков. До этого события только записывались. - Заголовок
User-Agentисходящих вебхуков содержит название продукта. - Ответ
3xxне считается успешной доставкой и не выполняется.
2026-09-11, сканер платежей
- Инвойсы меняют статус по переводам в сети:
seen,confirmed,underpaid,expired,paid_late. См. статусы. - В ответе
GET /v1/invoices/{id}полеdepositsзаполняется платежами по инвойсу. - Сервис формирует события вебхуков
invoice.seen,invoice.confirmed,invoice.overpaid,invoice.underpaid,invoice.expired,invoice.paid_late,deposit.confirmedиdeposit.orphaned. См. события. Отправка событий на URL мерчанта включится в следующем обновлении.
2026-09-11, адреса и инвойсы
- Аутентификация по заголовку
X-Api-Keyи лимиты запросов по ключу и по IP-адресу — см. аутентификацию. POST /v1/addresses— постоянный адрес пользователя для мерчантов в режимеper_user. См. адреса.POST /v1/invoices— создание инвойса, идемпотентное поorder_id. См. инвойсы.GET /v1/invoices/{id}— текущее состояние инвойса с его платежами.GET /v1/openapi.json— машиночитаемое описание API в формате OpenAPI 3.1.- Новые коды ошибок:
validation_failed,unauthorized,merchant_disabled,invoice_not_found,address_mode_mismatch,order_id_conflict,asset_not_supported,amount_below_minimum,rate_limited,addresses_exhausted. См. коды ошибок.
2026-09-11, служебные маршруты
- Добавлены служебные маршруты
GET /healthzиGET /readyz— см. мониторинг. - Введён единый формат ошибок
{ "error": { "code", "message" } }и кодыbad_request,route_not_found,internal_error,service_unavailable— см. коды ошибок. - Каждый ответ содержит заголовок
X-Request-Idдля поиска запроса в логах.