ДОКУМЕНТАЦИЯ

API anore

REST API для приёма платежей. Создавайте счёт, отправляйте клиента на готовую форму оплаты (СБП, карты, крипта) и получайте уведомление об оплате на свой сервер.

БАЗОВЫЙ URL
https://api.anore.cc/v1

Запросы и ответы - application/json. Суммы в рублях.

Быстрый старт

01Получите ключ

Создайте API-ключ в кабинете. Тестовый для проверки, боевой для приёма денег.

API-ключи →
02Создайте платёж

POST /payments с суммой и описанием - в ответе ссылка на форму оплаты.

Как создать →
03Получите вебхук

При оплате мы шлём payment.succeeded на ваш URL. Проверьте подпись.

Про вебхуки →

SDK

Официальные библиотеки для приёма платежей и проверки вебхуков - из коробки. Установка одной командой, создание счёта в один вызов.

PythonPyPI
pip install anore
pypi.org/project/anore →
Node.jsnpm
npm install anore-pay
npmjs.com/package/anore-pay →
PHPComposer
composer require anore/sdk
packagist.org/packages/anore/sdk →
Gogo module
go get github.com/anore-payments/sdk-go
github.com/anore-payments/sdk-go →
JavaJitPack
com.github.ANORE-PAYMENTS:sdk-java
github.com/anore-payments/sdk-java →

Авторизация

Каждый запрос требует API-ключ в заголовке. Ключи создаются в кабинете → API-ключи. Тестовый ключ (an_test_…) создаёт платежи в тестовом режиме, боевой (an_live_…) - настоящие.

Authorization: Bearer an_live_xxxxxxxxxxxxxxxx

Аккаунт-ключ обслуживает все кассы - тогда в теле нужен shopId.

Подпись запроса · необязательно

Bearer-ключа достаточно для авторизации. Для дополнительной защиты от подмены тела можно подписать запрос - передайте HMAC-SHA256 тела в заголовке Anore-Signature, сервер пересчитает его вашим секретным ключом и сверит.

Anore-Signature: hex( HMAC-SHA256( raw_body, SECRET_KEY ) )
import crypto from 'node:crypto'
const body = JSON.stringify({ amount: 1500, description: 'Pro plan', orderId: 'o_1', email: 'buyer@example.com' })
const sign = crypto.createHmac('sha256', SECRET_KEY).update(body).digest('hex')

Создать платёж

Создаёт счёт и возвращает ссылку на платёжную форму. Перенаправьте клиента на paymentUrl - счёт действителен 4 часа.

POST/payments
ПОЛЕТИПОПИСАНИЕ
amount
numberСумма счёта в выбранной валюте
currency
stringВалюта счёта: RUB или USD. По умолчанию RUB. USD фиксируется и конвертируется в рубли по курсу ЦБ при создании
description
stringОписание (видит клиент)
shopId
integerID кассы - обязателен для аккаунт-ключей (an_*)
orderId
stringВаш ID заказа
email
stringНеобязательная почта клиента (до 254 символов). Сохраняется в инвойсе для отправки чека и передаётся банк при создании счёта, включая H2H без пейформы. При отсутствии или null сохраняется прежнее поведение; пустая строка и некорректный адрес дают HTTP 400.
methods
string | string[]Методы через запятую или массивом: sbp, card, yoomoney, crypto. Ограничивает форму методами, разрешёнными кассе. Для банковского виджета передайте ["card"] и откройте paymentUrl. Пусто - все методы кассы; принудительная настройка методов кассы имеет приоритет
getbackurl
stringКуда ведёт кнопка «вернуться» на форме оплаты (http/https). Переопределяет сайт кассы
successurl
stringКуда направить клиента после успешной оплаты (http/https). Переопределяет URL кассы для этого платежа
failurl
stringКуда направить клиента при неуспешной оплате или истечении счёта (http/https). Переопределяет URL кассы для этого платежа
callbackUrl
stringКуда прислать webhook по этому платежу (http/https). Переопределяет URL вебхука кассы; подпись остаётся на её SECRET_KEY
ЗАПРОС
curl -X POST https://api.anore.cc/v1/payments \
  -H "Authorization: Bearer an_live_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"amount":1500,"description":"Pro plan","orderId":"order_8842","email":"buyer@example.com","shopId":1,"methods":"sbp,yoomoney","successurl":"https://shop.example/success","failurl":"https://shop.example/fail"}'
ОТВЕТ · 200
{
  "success": true,
  "id": "b5b773de-b7f4-4c20-93da-2ab5f8679ba5",
  "orderId": "order_8842",
  "amount": 1500,
  "rubAmount": 1500,
  "currency": "rub",
  "status": "new",
  "paymentUrl": "https://pay.anore.cc/b5b773de-...",
  "sbpUrl": "https://qr.nspk.ru/...",   // H2H only
  "expiresIn": 14400
}

Статус платежа

Статусы: new · paid · expired. Опрос - не чаще раза в 3 секунды.

GET/payments/{id}
ЗАПРОС
curl https://api.anore.cc/v1/payments/b5b773de-... \
  -H "Authorization: Bearer an_live_xxxxxxxxxxxxxxxx"
ОТВЕТ · 200
{
  "success": true,
  "id": "b5b773de-...",
  "amount": 1500,
  "rubAmount": 1500,
  "currency": "rub",
  "status": "paid",
  "paid": true
}

Список платежей

Возвращает платежи вашей кассы, свежие сверху. Аккаунт-ключу нужен shopId; ключ, привязанный к кассе, уже ограничен ей. Можно фильтровать по статусу и датам.

GET/payments
ПАРАМЕТРТИПОПИСАНИЕ
shopId
integerID кассы - обязателен для аккаунт-ключей (an_*)
status
stringФильтр: paid (успешный) · pending (в обработке) · failed (неуспешный) · written_off (списанный)
from
stringС даты включительно, YYYY-MM-DD
to
stringПо дату включительно, YYYY-MM-DD
limit
integerРазмер страницы, 1–200 (по умолчанию 50)
offset
integerСмещение для пагинации (по умолчанию 0)
ЗАПРОС
curl "https://api.anore.cc/v1/payments?shopId=1&status=paid&from=2026-06-01&to=2026-06-30&limit=50" \
  -H "Authorization: Bearer an_live_xxxxxxxxxxxxxxxx"
ОТВЕТ · 200
{
  "success": true,
  "shopId": 1,
  "total": 128,
  "limit": 50,
  "offset": 0,
  "payments": [
    {
      "id": "b5b773de-...",
      "orderId": "order_8842",
      "amount": 1500,
      "baseAmount": 1500,
      "rubAmount": 1500,
      "currency": "rub",
      "description": "Pro plan",
      "status": "paid",
      "paid": true,
      "method": "sbp",
      "createdAt": "2026-06-09T12:00:00.000Z",
      "paidAt": "2026-06-09T12:01:12.000Z"
    }
  ]
}

Вебхуки

Настраиваются в кабинете → Вебхуки. При смене статуса платежа или выплаты anore отправляет подписанный POST на URL соответствующей кассы.

payment.succeededСчёт оплачен
payment.expiredСчёт истёк по времени без оплаты
payout.createdЗаявка на выплату создана и ожидает обработки
payout.processingЗаявка принята оператором в работу
payout.succeededВыплата успешно исполнена
payout.failedВ выплате отказано
ЗАГОЛОВКИ
Content-Type: application/json
Anore-Event: payout.succeeded
Anore-Delivery-Id: payout.succeeded:WD-42
Anore-Signature: hex( HMAC-SHA256( raw_body, SECRET ) )
ТЕЛО · ПЛАТЁЖ
{
  "event": "payment.succeeded",
  "id": "b5b773de-...",
  "orderId": "order_8842",
  "amount": 1500,
  "rubAmount": 1500,
  "currency": "rub",
  "status": "paid",
  "description": "Pro plan",
  "shop": "shop-anore.cc",
  "createdAt": "2026-06-09T12:00:00.000Z"
}
ТЕЛО · ВЫПЛАТА
{
  "event": "payout.succeeded",
  "id": "WD-42",
  "externalId": "wd_88",
  "shopId": 1,
  "status": "paid",
  "amount": 10000,
  "currency": "RUB",
  "method": "usdt_ton",
  "fee": 240,
  "netRub": 9760,
  "amountUsdt": 119.388379,
  "txHash": "993e41b84318...",
  "createdAt": "2026-07-05T21:37:11.000Z",
  "processedAt": "2026-07-06T11:51:04.000Z"
}

Ответьте любым HTTP 2xx. При сетевой ошибке или другом статусе доставка повторяется с увеличивающейся задержкой. Семантика доставки - at-least-once: сохраняйте Anore-Delivery-Id и не обрабатывайте его повторно.

Пересчитайте HMAC по сырому телу своим SECRET и сравните с Anore-Signature. Не совпало - отклоните запрос.

Баланс

Возвращает состояние баланса для вывода: сколько доступно, сколько в холде, размер комиссии и курс выплат Rapira USDT/RUB по фиксингу на 09:00 МСК с наценкой магазина. Для новых заявок USDT окончательный курс сохраняется при взятии заявки в работу. Доступно только если у кассы включён API выплат.

GET/balance
ЗАПРОС
curl "https://api.anore.cc/v1/balance?shopId=1" \
  -H "Authorization: Bearer an_live_xxxxxxxxxxxxxxxx"
ОТВЕТ · 200
{
  "currency": "RUB",
  "available": 12750.42,
  "hold": 3100.00,
  "matured": 15850.42,
  "paidAmount": 15850.42,
  "withdrawn": 5000.00,
  "reserved": 0.00,
  "fee": {
    "flatRub": 240,
    "thresholdRub": 25000,
    "percentAbove": 1.0,
    "trc20SurchargeRub": 60
  },
  "minAmount": 500,
  "minAmountByMethod": {
    "sbp_rub": 500,
    "usdt_ton": 500,
    "usdt_bep20": 500,
    "usdt_erc20": 500,
    "usdt_trc20": 500
  },
  "maxAmount": 1500000,
  "maxAmountByMethod": {
    "sbp_rub": 500000,
    "usdt_ton": 1500000,
    "usdt_bep20": 1500000,
    "usdt_erc20": 1500000,
    "usdt_trc20": 1500000
  },
  "usdtRateRub": 83.39,
  "rapiraMarketUsdtRub": 81.75,
  "rapiraMarkupPercent": 2.0,
  "sbpBanks": ["Сбербанк", "Т-Банк", "Альфа-Банк", "..."],
  "cbrRateRub": 78.50
}

Комиссии на вывод

Возвращает актуальные комиссии на вывод, настроенные для авторизованного мерчанта. До thresholdRub используется flatRub; начиная с thresholdRub - percentAbove от суммы плюс surchargeRub. Настройки едины для всех касс мерчанта.

GET/payouts/fees
ЗАПРОС
curl "https://api.anore.cc/v1/payouts/fees?shopId=1" \
  -H "Authorization: Bearer an_live_xxxxxxxxxxxxxxxx"
ОТВЕТ · 200
{
  "shopId": 1,
  "currency": "RUB",
  "thresholdRub": 25000,
  "minAmountRub": 500,
  "minAmountRubByMethod": {
    "sbp_rub": 500,
    "usdt_ton": 500,
    "usdt_bep20": 500,
    "usdt_erc20": 500,
    "usdt_trc20": 500
  },
  "maxAmountRub": 1500000,
  "maxAmountRubByMethod": {
    "sbp_rub": 500000,
    "usdt_ton": 1500000,
    "usdt_bep20": 1500000,
    "usdt_erc20": 1500000,
    "usdt_trc20": 1500000
  },
  "methods": [
    {
      "method": "sbp_rub",
      "label": "СБП",
      "flatRub": 240,
      "percentAbove": 1.0,
      "surchargeRub": 0
    },
    {
      "method": "usdt_ton",
      "label": "USDT TON",
      "flatRub": 240,
      "percentAbove": 1.0,
      "surchargeRub": 0
    },
    {
      "method": "usdt_bep20",
      "label": "USDT BEP20",
      "flatRub": 240,
      "percentAbove": 1.0,
      "surchargeRub": 0
    },
    {
      "method": "usdt_erc20",
      "label": "USDT ERC20",
      "flatRub": 240,
      "percentAbove": 1.0,
      "surchargeRub": 0
    },
    {
      "method": "usdt_trc20",
      "label": "USDT TRC20",
      "flatRub": 300,
      "percentAbove": 1.0,
      "surchargeRub": 60
    }
  ]
}

Курсы выплат

Возвращает предварительные курсы выплат. rapiraUsdtRub - фиксинг Rapira на 09:00 МСК с наценкой магазина; rapiraMarketUsdtRub - тот же фиксинг без наценки; rateBasis=fixed_0900_msk, rapiraFixing=09:00 Europe/Moscow. rubToUsdt - USDT за рубль чистой суммы. Для новых заявок USDT ratePolicy=approval: действующий фиксинг с наценкой и окончательная сумма сохраняются при взятии заявки в работу. usdtToRub и rubToRubSettlement относятся только к СБП с пересчётом фиксинга Rapira 09:00 МСК → ЦБ при исполнении (sbpRatePolicy=execution).

GET/payouts/rates
ЗАПРОС
curl "https://api.anore.cc/v1/payouts/rates?shopId=1" \
  -H "Authorization: Bearer an_live_xxxxxxxxxxxxxxxx"
ОТВЕТ · 200
{
  "shopId": 1,
  "ratePolicy": "approval",
  "rateBasis": "fixed_0900_msk",
  "sbpRatePolicy": "execution",
  "rapiraUsdtRub": 83.39,
  "rapiraMarketUsdtRub": 81.75,
  "rapiraMarkupPercent": 2.0,
  "cbrUsdRub": 78.50,
  "rubToUsdt": 0.01199185,
  "usdtToRub": 78.50,
  "rubToRubSettlement": 0.94135988,
  "rapiraFixing": "09:00 Europe/Moscow"
}

Создать выплату

Создаёт заявку на вывод в целых рублях: от 500 ₽; максимум 1 500 000 ₽ для USDT или 500 000 ₽ для СБП. Лимиты по способам возвращаются в maxAmountByMethod и maxAmountRubByMethod. Комиссия мерчанта удерживается из суммы заявки. Для USDT курс и amountUsdt при создании предварительные, окончательные значения сохраняются при взятии заявки в работу. Для СБП используется пересчёт Rapira → ЦБ при исполнении. Выплаты на карты недоступны до подключения токенизации провайдера; PAN и CVV передавать запрещено. Начальный статус заявки pending.

POST/payouts
ПОЛЕТИПОПИСАНИЕ
amount
integerСумма в целых рублях: от 500; максимум 1 500 000 для сетей USDT или 500 000 для СБП. Комиссия удерживается из суммы
method
stringМетод выплаты - см. список ниже
address
stringНомер телефона СБП или адрес USDT (максимум 190 символов). PAN и CVV передавать запрещено
bank
stringНазвание банка получателя. Обязательно для method=sbp; актуальный список возвращается в sbpBanks метода GET /balance
shopId
integerID кассы - обязателен для аккаунт-ключей (an_*)
externalId
stringВаш внутренний ID заявки (сохраняется, возвращается в статусе выплаты и приходит в вебхуках)
МЕТОДЫ
sbpСБП - ручная выплата по российскому мобильному номеру; сумма к зачислению рассчитывается по курсам Rapira +2% → ЦБ
usdt_tonUSDT в сети TON - при подключённом авто-выводе уходит сразу и возвращает txHash
usdt_bep20USDT в сети BEP20 - обрабатывается вручную оператором
usdt_erc20USDT в сети ERC20 - обрабатывается вручную оператором
usdt_trc20USDT в сети TRC20 - ручная выплата на валидный TRON-адрес, начинающийся с T; к стандартной комиссии добавляется 60 ₽
ЗАПРОС
curl -X POST https://api.anore.cc/v1/payouts \
  -H "Authorization: Bearer an_live_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"amount":10000,"method":"sbp","address":"+79991234567","bank":"Т-Банк","shopId":1,"externalId":"wd_88"}'
ОТВЕТ · 200
{
  "id": "WD-42",
  "status": "pending",
  "amount": 10000,
  "method": "sbp",
  "address": "+79991234567",
  "bank": "Т-Банк",
  "fee": 240,
  "netRub": 9760,
  "amountUsdt": 119.388379,
  "rapiraRate": 81.75,
  "cbrRate": 78.50,
  "settlementRub": 9372.00,
  "quoteType": "estimate",
  "ratePolicy": "execution",
  "externalId": "wd_88"
}

Статус выплаты

Статусы: pending · approved · paid · rejected. У успешных TON-выплат в ответе будет txHash.

GET/payouts/{id}
ЗАПРОС
curl https://api.anore.cc/v1/payouts/WD-42 \
  -H "Authorization: Bearer an_live_xxxxxxxxxxxxxxxx"
ОТВЕТ · 200
{
  "id": "WD-42",
  "status": "paid",
  "amount": 10000,
  "method": "СБП",
  "methodCode": "sbp",
  "address": "+79991234567",
  "bank": "Т-Банк",
  "fee": 240,
  "netRub": 9760,
  "settlementRub": 9372.00,
  "quoteType": "executed",
  "ratePolicy": "execution",
  "externalId": "wd_88",
  "createdAt": "2026-07-05T21:37:11.000Z",
  "processedAt": "2026-07-06T11:51:04.000Z"
}

Коды ошибок

400Ошибка валидации (amount / method / address / bank / description / shopId / JSON)
401Нет или неверный ключ · неверная подпись
403Касса заблокирована · API выплат не включён для кассы
404Касса, платёж или выплата не найдены
503Курс Rapira +2% или ЦБ временно недоступен

Нужна помощь с интеграцией?

Напишите нам - поможем подключиться и разобраться с вебхуками.

Написать в Telegram →