Как подключить приём криптоплатежей через API Ketmus
Один POST-запрос создаёт счёт и возвращает ссылку на оплату. Разбираем поля запроса, ответ и статусы счёта.

Приём платежей в Ketmus строится вокруг одной сущности — счёта. Вы создаёте счёт в своей валюте цены, Ketmus показывает плательщику страницу оплаты со списком доступных монет, отслеживает перевод в сети и сообщает вам о результате.
Шаг 1. Получите ключ API
Ключ создаётся в кабинете, в разделе «Мерчант» для каждого проекта отдельно. Передавайте его в заголовке Authorization: Bearer. Ключ даёт право создавать и читать счета проекта и не должен попадать в код фронтенда.
Шаг 2. Создайте счёт
Обязательное поле только одно — amount. Валюта цены по умолчанию USD. Остальные поля помогают связать счёт с вашим заказом и настроить поведение страницы оплаты.
curl -X POST https://app.ketmus.com/api/merchant/v1/invoices \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"amount": 49.90,
"currency": "USD",
"order_id": "order-1024",
"description": "Order #1024",
"callback_url": "https://shop.example/webhooks/ketmus",
"success_url": "https://shop.example/thanks",
"fail_url": "https://shop.example/cart"
}'
Необязательные поля: rail — сразу зафиксировать монету и сеть; rails — ограничить список доступных монет; lifetime_sec — время жизни счёта от 60 секунд до 30 дней; fee_payer — кто платит комиссию, merchant или payer; underpaid_coverage_bps — допустимая недоплата; metadata, payer_email, customer_id и return_url.
Повторный запрос с тем же order_id идемпотентен: вместо дубликата вы получите уже созданный счёт. Это позволяет безопасно повторять запрос при сетевых ошибках.
Шаг 3. Отправьте плательщика на pay_url
{
"invoice": {
"id": "7c7b4b2e-…",
"status": "new",
"pay_url": "https://app.ketmus.com/checkout/Xk3…",
"price": { "amount": "49.9", "currency": "USD" },
"payment": null,
"available_rails": [{ "id": "usdt_tron", "asset": "USDT", "network": "tron", … }],
"expires_at": "2026-10-26T13:00:00.000Z"
}
}
В ответе приходит ссылка pay_url — на неё нужно перенаправить покупателя. На странице оплаты он выбирает монету из available_rails, получает адрес и точную сумму. После оплаты Ketmus вернёт его на success_url, при отмене или истечении срока — на fail_url.
Статусы счёта
- new — счёт создан, плательщик ещё не выбрал монету.
- pending — монета выбрана, ждём перевод в сети.
- confirming — перевод найден, ждём подтверждений сети.
- paid и paid_over — оплачен; второй статус означает переплату.
- wrong_amount_waiting и wrong_amount — пришла неверная сумма; пока счёт не истёк, плательщик может доплатить.
- expired и cancelled — срок истёк или счёт отменён через API.
Проверить статус можно запросом GET /api/merchant/v1/invoices/{id} или по order_id, но для рабочей интеграции надёжнее получать webhook-уведомления — о них следующая статья.

