Документация API Crynova
REST API для приёма криптоплатежей. Создавайте счета в крипте или фиате, получайте вебхуки об оплате, проверяйте статусы — за считанные минуты.
Безопасно
HMAC-подпись вебхуков, права ключа, IP-whitelist.
Крипто + фиат
Счёт в фиате — клиент выберет крипту при оплате.
Вебхуки
Мгновенные уведомления о статусах с ретраями.
Введение
Crynova API позволяет принимать криптоплатежи программно. Все запросы — через HTTPS, ответы — в формате JSON. Базовая интеграция: создать счёт, перенаправить клиента на checkout, получить вебхук об оплате.
Более 8 криптовалют и сетей: BTC, ETH, LTC, DOGE, TRON, USDT (TRC20/ERC20/BEP20).
Счета в 26 фиатных валютах с автоконвертацией в крипту по курсу.
Подписанные вебхуки на события invoice.created/paid/expired и другие.
Idempotency-ключи, права на ключ и защита по IP.
Базовый URL
Все эндпоинты начинаются с базового URL. Все ответы — JSON.
https://crynova.io/api/v1
- Только HTTPS. HTTP-запросы отклоняются.
- Все суммы передаются как строки (string) с точностью до 18 знаков — без float.
Аутентификация
Передавайте API-ключ в заголовке Authorization (Bearer) или X-Api-Key. Ключ создаётся в кабинете проекта.
Authorization: Bearer cryn_xxxxxxxxxxxxxxxx
# или через заголовок
X-Api-Key: cryn_xxxxxxxxxxxxxxxx
Никогда не передавайте ключ в query-параметрах или теле запроса — он попадает в логи и заголовки Referer. Только заголовок.
Настройка
-
1
Зарегистрируйтесь и создайте проект в кабинете Crynova.
-
2
Включите нужные валюты в настройках проекта.
-
3
Создайте API-ключ: Проект, API ключи, Create new key. Скопируйте ключ сразу — он показывается только один раз.
-
4
Укажите webhook URL в настройках, чтобы получать уведомления об оплате.
Права API-ключа
| Permission | Доступ |
|---|---|
| currencies.read | Читать список валют |
| invoices.create | Создавать счета |
| invoices.read | Читать счета и статусы |
| invoices.cancel | Отменять счета |
Если при создании ключа не выбрано ни одного права — ключ имеет полный доступ.
/api/v1/currencies
Возвращает активные криптовалюты (с сетями, мин/макс, комиссией) и список фиатных кодов, доступных для счетов.
curl https://crynova.io/api/v1/currencies \
-H "Authorization: Bearer cryn_xxx"
Ответ
{
"data": [
{
"code": "USDT_TRC20",
"name": "Tether USD (TRC-20)",
"network": "tron",
"contract_address": "TR7NHq...",
"decimals": 6,
"confirmations_required": 20,
"min_amount": "1",
"max_amount": null,
"estimated_fee": "1.4",
"supports_memo": false
}
],
"fiat": ["USD","EUR","GBP","JPY","CNY","RUB", ...]
}
/api/v1/balance
Возвращает балансы мерчанта по каждой валюте: доступно (available), в блокировке (locked) и всего (total). Нужно разрешение balance.read.
curl https://crynova.io/api/v1/balance \
-H "Authorization: Bearer cryn_xxx"
Ответ
{
"data": [
{
"currency": "USDT_TRC20",
"network": "tron",
"available": "152.40",
"locked": "0",
"total": "152.40"
},
{
"currency": "BTC",
"network": "bitcoin",
"available": "0.0123",
"locked": "0",
"total": "0.0123"
}
]
}
/api/v1/invoices
Создаёт счёт на оплату. В поле currency передайте крипто-код (прямая оплата) или фиат-код (клиент выберет крипту на checkout).
Параметры
| Поле | Тип | Обязат. | Описание |
|---|---|---|---|
| currency | string | да | Крипто-код из /currencies (напр. USDT_TRC20) или фиат-код (USD, EUR, UAH). |
| amount | string|number | да | Сумма в указанной валюте. |
| order_id | string | нет | Ваш идентификатор заказа (до 255). |
| description | string | нет | Описание (до 1000). |
| expires_in | integer | нет | TTL счёта в минутах (5–1440). |
| metadata | object | нет | Произвольные строковые пары, возвращаются в вебхуке. |
Пример: прямой крипто-счёт
curl -X POST https://crynova.io/api/v1/invoices \
-H "Authorization: Bearer cryn_xxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-1048" \
-d '{
"currency": "USDT_TRC20",
"amount": "25.00",
"order_id": "ORD-1048",
"description": "Order #1048",
"expires_in": 30,
"metadata": { "customer_id": "42" }
}'
Ответ
{
"invoice_id": "9ae4cd13-...",
"order_id": "ORD-1048",
"status": "pending",
"price_amount": "25",
"price_currency": "USDT_TRC20",
"pay_currency": "USDT_TRC20",
"currency": "USDT_TRC20",
"amount": "25.000000000000000000",
"amount_received": "0",
"pay_address": "TR7NHq...",
"pay_memo": null,
"expires_at": "2026-06-11T12:30:00+00:00",
"checkout_url": "https://crynova.io/pay/9ae4cd13-...",
"transactions": []
}
Счета в фиате
Передайте в currency фиатный код — счёт создаётся в фиате, а клиент сам выбирает криптовалюту на странице оплаты. Сумма конвертируется по текущему курсу (официальные источники) и фиксируется после выбора.
Поддерживаемые фиатные валюты:
USD, EUR, GBP, JPY, CNY, RUB, INR, AUD, CAD, SGD, HKD, TRY, AED, THB, MYR, PHP, IDR, VND, KZT, UAH, BYN, UZS, KGS, AMD, AZN, PLN
Запрос
{
"currency": "UAH",
"amount": "499.00",
"order_id": "ORD-1001"
}
Ответ
{
"status": "pending",
"price_amount": "499",
"price_currency": "UAH",
"pay_currency": null,
"amount": null,
"pay_address": null,
"checkout_url": "https://crynova.io/pay/..."
}
- 1 Создайте счёт с фиатным currency — получите checkout_url.
- 2 Перенаправьте клиента на checkout_url — он выберет крипту, увидит сумму по курсу.
- 3 После оплаты в вебхуке появятся pay_currency, amount, pay_address.
/api/v1/invoices/{invoice_id}
Возвращает полную информацию о счёте по его UUID.
curl https://crynova.io/api/v1/invoices/9ae4cd13-... \
-H "Authorization: Bearer cryn_xxx"
/api/v1/invoices/{invoice_id}/status
Лёгкий эндпоинт для опроса статуса оплаты (polling).
{
"invoice_id": "9ae4cd13-...",
"status": "paid",
"is_final": true,
"amount": "25.0",
"amount_received": "25.0",
"currency": "USDT_TRC20",
"confirmations": 20,
"confirmations_required": 20,
"paid_at": "2026-06-11T12:31:00+00:00"
}
Возможные статусы: pending, waiting_confirmations, paid, underpaid, overpaid, expired, refunded.
/api/v1/invoices
Возвращает список ваших счетов с пагинацией и фильтрами.
curl "https://crynova.io/api/v1/invoices?status=paid&per_page=50" \
-H "Authorization: Bearer cryn_xxx"
Фильтры: status, order_id, currency, per_page (1–100).
/api/v1/invoices/{invoice_id}/cancel
Отменяет счёт. Только для pending/waiting_confirmations без полученных средств.
curl -X POST https://crynova.io/api/v1/invoices/9ae4cd13-.../cancel \
-H "Authorization: Bearer cryn_xxx"
/api/v1/statistics
Агрегированная статистика по счетам за период: создано, оплачено, конверсия и оборот. Фильтры: date_from, date_to, currency. Нужно разрешение statistics.read.
curl "https://crynova.io/api/v1/statistics?date_from=2026-01-01&date_to=2026-06-30" \
-H "Authorization: Bearer cryn_xxx"
Ответ
{
"data": {
"invoices_total": 1280,
"invoices_paid": 1190,
"invoices_pending": 14,
"invoices_expired": 76,
"conversion": 92.97,
"paid_volume": [{ "currency": "USD", "amount": "84210.50" }],
"period": { "from": "2026-01-01", "to": "2026-06-30" }
}
}
/api/v1/withdrawals
Создаёт запрос на вывод средств. Сумма резервируется на балансе. Нужно разрешение withdrawals.create.
curl -X POST https://crynova.io/api/v1/withdrawals \
-H "Authorization: Bearer cryn_xxx" \
-H "Content-Type: application/json" \
-d '{"currency":"USDT_TRC20","amount":"50","to_address":"TR7NHq...","memo":null}'
Ответ
{
"withdrawal_id": "0c3f...",
"status": "pending",
"currency": "USDT_TRC20",
"amount": "50",
"to_address": "TR7NHq...",
"tx_hash": null,
"created_at": "2026-06-19T10:00:00+00:00"
}
Вывод создаётся со статусом pending и выполняется после подтверждения в админпанели. Список и детали — через GET-методы (разрешение withdrawals.read).
/api/v1/withdrawals
·
GET
/api/v1/withdrawals/{id}
/api/v1/static-wallets
Выдаёт постоянный (статический) адрес для пополнений по валюте — получи-или-создай. Подтверждённые переводы на этот адрес автоматически зачисляются на баланс и отправляют вебхук wallet.deposit. Нужны разрешения wallets.read / wallets.create.
curl -X POST https://crynova.io/api/v1/static-wallets \
-H "Authorization: Bearer cryn_xxx" \
-H "Content-Type: application/json" \
-d '{"currency":"BTC"}'
Ответ
{
"currency": "BTC",
"network": "bitcoin",
"address": "bc1q...",
"memo": null
}
H2H (host-to-host)
Прямой крипто-флоу без редиректа: создайте счёт с крипто-валютой (например BTC) — в ответе сразу возвращаются pay_address и pay_memo, которые можно показать клиенту в собственном интерфейсе. Подтверждение оплаты приходит вебхуком.
curl -X POST https://crynova.io/api/v1/invoices \
-H "Authorization: Bearer cryn_xxx" \
-H "Content-Type: application/json" \
-d '{"currency":"BTC","amount":"0.0025","order_id":"H2H-1"}'
Ответ
{
"invoice_id": "8a1c...",
"status": "pending",
"pay_currency": "BTC",
"amount": "0.0025",
"pay_address": "bc1q...",
"pay_memo": null,
"expires_at": "2026-06-19T10:30:00+00:00"
}
Встраивание чекаута (iframe)
Показывайте чекаут Crynova прямо на своей странице — без редиректа. Подключите загрузчик embed.js, смонтируйте инвойс, и ваша страница получит уведомление в реальном времени, как только он оплачен или истёк. Встраивание разрешено на всех страницах /pay/*.
Встроенный блок
<div id="crynova-checkout"></div>
<script src="https://crynova.io/embed.js"></script>
<script>
Crynova.checkout({
uuid: 'INVOICE_UUID',
mount: '#crynova-checkout',
onPaid: function () { window.location = '/thank-you'; },
onExpired: function () { alert('Payment expired'); }
});
</script>
Модальное (всплывающее) окно
Crynova.open({ uuid: 'INVOICE_UUID', onPaid: fn });
События
Iframe отправляет вашей странице сообщения (ready, resize, status). SDK превращает их в колбэки onReady, onResize, onStatus, onPaid и onExpired. Если слушаете вручную — всегда проверяйте, что event.origin совпадает с вашим хостом Crynova.
{ "source": "crynova", "type": "status", "uuid": "9ae4...", "status": "paid", "is_final": true }
onPaid в браузере — только для UX (редирект, чек). Всегда выполняйте заказ по подписанному вебхуку — именно он источник правды. Создавайте инвойс на сервере; никогда не раскрывайте API-ключ в браузере.
Вебхуки
Crynova отправляет POST-запрос на ваш webhook URL при изменении статуса счёта. Каждый запрос подписан HMAC-SHA256.
| Событие | Когда |
|---|---|
| invoice.created | Счёт создан. |
| invoice.waiting_confirmations | Транзакция в мемпуле/блоке, ожидает подтверждений. |
| invoice.paid | Оплачено полностью. |
| invoice.underpaid | Получено меньше суммы. |
| invoice.overpaid | Получено больше суммы. |
| invoice.expired | Время вышло или отменено. |
| invoice.refunded | Выполнен возврат. |
| wallet.deposit | Подтверждённый депозит на статический кошелёк (зачислено на баланс). |
Пример payload
POST {your_webhook_url}
X-Crynova-Event: invoice.paid
X-Crynova-Sig: sha256=hmac(secret, body)
X-Crynova-Delivery: 123
{
"event": "invoice.paid",
"invoice_id": "9ae4cd13-...",
"order_id": "ORD-1048",
"status": "paid",
"price_amount": "499",
"price_currency": "UAH",
"pay_currency": "USDT_TRC20",
"amount": "12.5",
"received": "12.5",
"metadata": { "customer_id": "42" }
}
Проверка подписи (PHP)
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_CRYNOVA_SIG'] ?? '';
$expected = 'sha256=' . hash_hmac('sha256', $payload, $YOUR_WEBHOOK_SECRET);
if (! hash_equals($expected, $signature)) {
http_response_code(403);
exit('Invalid signature');
}
// trusted — process the event
http_response_code(200);
Повторы при ошибке доставки: 5мин, 30мин, 2ч, 8ч, 24ч. Отвечайте кодом 2xx для подтверждения получения.
Коды ошибок
| HTTP | Значение |
|---|---|
| 200 | OK — успех. |
| 401 | Неверный или отсутствующий API-ключ. |
| 403 | Нет прав / IP не разрешён / мерчант неактивен. |
| 404 | Счёт не найден. |
| 422 | Ошибка валидации или недопустимое действие. |
| 429 | Превышен лимит запросов. |
Лимиты и безопасность
Rate limit: 60 запросов/мин на ключ (заголовки X-RateLimit-*).
Idempotency-Key: заголовок делает повторный POST безопасным — вернётся первый ответ в течение 24 часов.
IP-whitelist: можно ограничить ключ списком IP/CIDR в настройках ключа.
Права: выдавайте ключу только необходимые разрешения.
Готовы интегрироваться?
Создайте проект, получите API-ключ и примите первый платёж за считанные минуты.