Балансы мерчанта по валютам. Требует API-ключ.
Пример ответа
{
"success": true,
"data": {
"availableBalance": "100000",
"holdBalance": "50000"
}
}Exenta Pay API позволяет создавать счета на оплату, проверять статусы и получать уведомления на ваш сервер. Все запросы выполняются в формате JSON по протоколу HTTPS.
Базовый URL
https://exenta.pro/api/v1Ответы обёрнуты в объект { "success": true, "data": { ... } }. Суммы передаются строкой целого числа в копейках — например "249000" это 2 490,00 ₽.
Для запросов к API передайте ключи в заголовках. Ключи создаются в кабинете в разделе API.
| Key | Value |
|---|---|
X-Api-Key | Публичный ключ, формат pk_… |
X-Api-Secret | Секретный ключ, формат sk_… |
После успешной оплаты средства зачисляются на холд. Через 2 дня они автоматически переходят на доступный баланс — только с него можно создавать выплаты.
| Поле | Тип | Описание |
|---|---|---|
availableBalance | string | Доступно для вывода, в копейках |
holdBalance | string | На холде, станет доступным через 2 дня |
Балансы мерчанта по валютам. Требует API-ключ.
{
"success": true,
"data": {
"availableBalance": "100000",
"holdBalance": "50000"
}
}Создаёт счёт и возвращает uuid для ссылки на оплату /pay/{uuid}.
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
currencyCode | string | да | Код валюты. Сейчас: RUB |
amount | string | да | Сумма счёта в копейках |
description | string | нет | Назначение платежа |
successUrl | string | нет | Редирект после успешной оплаты |
failedUrl | string | нет | Редирект при ошибке или отмене |
curl -X POST https://exenta.pro/api/v1/payments \
-H "X-Api-Key: pk_ваш_ключ" \
-H "X-Api-Secret: sk_ваш_секрет" \
-H "Content-Type: application/json" \
-d '{
"currencyCode": "RUB",
"amount": "249000",
"description": "Заказ #48291",
"successUrl": "https://shop.example.com/success",
"failedUrl": "https://shop.example.com/failed"
}'{
"success": true,
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"amount": "249000",
"status": "PENDING"
}
}Список платежей вашего аккаунта.
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
page | number | нет | Страница, по умолчанию 1 |
limit | number | нет | Записей на странице, по умолчанию 20 |
status | string | нет | PENDING, SUCCESS, FAILED, CANCELLED |
Данные и текущий статус платежа.
| Статус | Описание |
|---|---|
PENDING | Ожидает оплаты |
SUCCESS | Оплачен |
FAILED | Ошибка |
CANCELLED | Отменён |
Публичные данные для страницы оплаты. API-ключ не нужен.
| Поле | Тип | Описание |
|---|---|---|
amount | string | Сумма к оплате |
qrPayload | string | Данные QR-кода СБП |
expiresAt | string | Срок действия ссылки (15 мин) |
successUrl | string | Редирект после успеха |
failedUrl | string | Редирект при ошибке |
Exenta Pay отправляет POST на ваш URL при изменении статуса платежа. URL настраивается в кабинете → Webhooks.
Настройка URL для получения событий.
{
"projectId": 1,
"webhookUrl": "https://your-site.com/webhooks/exenta"
}Каждый webhook содержит заголовки:
| Заголовок | Описание |
|---|---|
X-Webhook-Event | Тип события, например payment.success |
X-Webhook-Signature | HMAC-SHA256 подпись тела запроса |
Content-Type | application/json |
{
"event": "payment.success",
"data": {
"paymentUuid": "550e8400-e29b-41d4-a716-446655440000",
"amount": "249000",
"netAmount": "236550",
"status": "SUCCESS"
},
"timestamp": "2026-06-08T14:30:00.000Z"
}const crypto = require("crypto");
function verifyWebhook(rawBody, signature, secret) {
const expected = crypto
.createHmac("sha256", secret)
.update(rawBody)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}| Событие | Описание |
|---|---|
payment.success | Платёж оплачен. Средства зачислены на холд-баланс |
webhook.test | Тестовое событие из кабинета |
| Поле | Тип | Описание |
|---|---|---|
paymentUuid | string | UUID платежа |
amount | string | Сумма оплаты в копейках |
netAmount | string | Зачисление мерчанту после комиссии |
status | string | SUCCESS |