Справочник API
Вызывайте все методы со своего сервера. Запросы и ответы в формате JSON. Адреса вебхуков и API-ключи управляются в кабинете мерчанта.
Нужен готовый код? Примеры интеграции на Node.js, Python, PHP, Go и Java
| Метод | Назначение |
|---|---|
POST /v1/payment_intents | Создать платёж |
GET /v1/payment_intents/{id} | Получить платёж |
POST /v1/deposit_addresses | Получить адрес пополнения пользователя |
GET /v1/deposits | Список поступлений |
GET /v1/deposits/{id} | Получить поступление |
GET /v1/chains | Узнать сети и токены проекта |
PUT /v1/customers/{external_id} | Добавить пользователю теги и заметки (необязательно) |
GET /v1/customers/{external_id} | Получить пользователя (необязательно) |
Основные правила
| Базовый URL | https://api.kokiwa.com, один для основной и тестовой сети. |
| Аутентификация | Заголовок Authorization: Bearer sk_…. Ключи с sk_live_ работают с основной сетью, ключи с sk_test_ — с тестовой; данные полностью разделены. Ключ имеет доступ только к своему проекту. |
| Суммы | Строки в единицах токена, например "25.00". В запросах до 6 знаков после запятой; ответы сохраняют точность блокчейна, поэтому число знаков может быть разным. Исходное значение из блокчейна есть только в transaction.raw_amount. |
| Время | ISO 8601 UTC, например 2026-11-02T08:30:00Z. |
| Адреса | EVM-адреса возвращаются в формате контрольной суммы EIP-55. Показывайте их без изменений и сравнивайте без учёта регистра. |
| Идемпотентность | POST-запросы могут передавать Idempotency-Key (до 255 символов). Повтор с тем же ключом вернёт первый результат с заголовком Idempotent-Replayed: true. |
Ошибки
При сбое возвращается 4xx или 5xx. Ориентируйтесь на code; message нужен только для отладки.
{
"error": {
"code": "amount_below_minimum",
"message": "options[0].amount is below the minimum",
"details": { "min_amount": "5.00" }
}
}| HTTP | code | Значение |
|---|---|---|
| 400 | invalid_* | Неверный параметр; message указывает поле. |
| 400 | chain_not_enabled | У проекта нет активного адреса получения в этой сети, или приём выключен. |
| 400 | chain_not_available | Эта сеть сейчас не принимает платежи. |
| 400 | chain_not_supported | В этой сети нет адресов пополнения. |
| 400 | token_not_enabled | Проект не выбрал этот токен. |
| 400 | currency_not_available | Проект не может принять эту валюту ни в одной сети. |
| 400 | deposits_disabled | Проект выключил адреса пополнения. |
| 400 | amount_below_minimum | Ниже минимальной суммы, она указана в details.min_amount. |
| 401 | unauthorized | API-ключ отсутствует, неверен или отозван. |
| 403 | project_disabled | Проект отключён. |
| 404 | not_found | Ресурс не существует или принадлежит другому проекту. |
| 409 | request_in_progress | Запрос с тем же Idempotency-Key ещё выполняется. Повторите чуть позже. |
| 422 | idempotency_key_reused | Тот же Idempotency-Key использован для другого запроса. |
| 500 | internal_error | Ошибка сервера. Повторите позже с тем же Idempotency-Key. |
Платежи
Платёж — это заказ, который должен оплатить пользователь. Пользователь платит на странице оплаты, а результат приходит вебхуком.
Создать платёж
POST/v1/payment_intents| Параметр | Описание |
|---|---|
currency обязательно | Валюта, например USDT. См. currencies в GET /v1/chains. |
amount обязательно | Сумма в единицах токена, до 6 знаков после запятой, например "25.00". |
chains | Принимать только в этих сетях, например ["bsc", "base"]. По умолчанию — все сети, где проект принимает эту валюту. |
customer | ID пользователя в вашей системе: от 1 до 128 букв, цифр или _ - . : @. |
expires_in | Срок действия в секундах, от 60 до 604800 (7 дней). По умолчанию 1800 (30 минут). |
metadata | Любой объект JSON, до 50 ключей и 8 КБ, возвращается без изменений в API и вебхуках. Подходит для номера заказа. |
success_url | https-адрес, куда страница оплаты вернёт пользователя после оплаты. |
cancel_url | https-адрес, куда страница оплаты вернёт пользователя при нажатии «Отмена». |
Сети, где сумма ниже минимума, исключаются; если не осталось ни одной, запрос завершается ошибкой. Минимум по умолчанию — 5 USD; ваши комиссии указаны в разделе «Комиссии» проекта в кабинете.
Токен и сумма для каждой сети
Чтобы принимать несколько валют или разные суммы в разных сетях, передавайте options вместо currency, amount и chains. До 16 элементов; token — символ или адрес контракта.
"options": [
{ "chain": "bsc", "token": "USDT", "amount": "25.00" },
{ "chain": "bsc", "token": "USDC", "amount": "25.00" }
]Ответ
Возвращает 201 и платёж. Откройте checkout_url для пользователя.
{
"id": "pi_7Gm4Rk2Wp9Ls1Qv8Bd3Zt6",
"object": "payment_intent",
"status": "pending",
"livemode": true,
"customer": "user_42",
"checkout_url": "https://pay.kokiwa.com/p/pi_7Gm4Rk2Wp9Ls1Qv8Bd3Zt6",
"metadata": { "order_id": "10086" },
"success_url": "https://your-shop.com/orders/10086",
"cancel_url": null,
"created_at": "2026-11-02T08:30:00Z",
"expires_at": "2026-11-02T09:00:00Z",
"paid_at": null,
"paid_option": null,
"options": [
{
"id": "pio_5Hq2Tz8rLw0aVb3Kc9XyN1",
"chain": "bsc",
"token": { "symbol": "USDT", "address": "0x55d3…7955", "decimals": 18 },
"amount": "25.00",
"received": "0.00",
"deposit_address": "0x8b1F…c04E"
},
{
"id": "pio_2Mn7Xc4bQe6uJs1Ga8RvK3",
"chain": "base",
"token": { "symbol": "USDT", "address": "0xfde4…9bb2", "decimals": 6 },
"amount": "25.00",
"received": "0.00",
"deposit_address": null
}
],
"deposits": []
}| Поле | Описание |
|---|---|
options | Варианты для пользователя: один токен в одной сети на элемент. |
options[].received | Сумма, полученная по этому элементу. |
options[].deposit_address | Отдельный адрес для перевода по этому платежу, его можно показать и на своей странице. null, если такого способа нет (сети кроме BNB Chain или слишком малая сумма). |
paid_option | options[].id, который пользователь фактически оплатил. |
deposits | Все поступления по этому платежу, сначала самые старые. См. объект поступления. |
livemode | true в основной сети, false в тестовой. |
Получить платёж
GET/v1/payment_intents/{id}Возвращает платёж. Используйте для сверки или проверки статуса, если вебхук не пришёл.
Статус платежа
| status | Описание |
|---|---|
pending | Ожидает оплаты. |
partially_paid | Переводов на отдельный адрес не хватает: осталось amount − received. Не отгружайте; статус станет paid, когда пользователь доплатит. |
paid | Оплачен полностью, можно отгружать. Переплата тоже входит в received, и kokiwa её не возвращает. |
expired | Срок истёк без оплаты. |
paid_late | Средства пришли на отдельный адрес после истечения срока. Деньги уже ваши: решите, отгрузить товар или вернуть средства. |
Адреса пополнения
Получить адрес пополнения клиента
POST/v1/deposit_addresses| Параметр | Описание |
|---|---|
customer обязательно | ID пользователя в вашей системе, правила как у платежей. Пользователь создаётся при первом использовании. |
chain | Пока только bsc, это же значение по умолчанию. |
{
"object": "deposit_address",
"customer": "user_42",
"chain": "bsc",
"address": "0x3c9A…71d2",
"tokens": [
{ "symbol": "USDT", "address": "0x55d3…7955", "decimals": 18, "min_settle_amount": "5.00" }
]
}Один пользователь всегда получает один и тот же адрес, поэтому его можно показывать долго. Зачисляются только токены из tokens.
Каждый перевод отправляет deposit.confirmed. Переводы меньше min_settle_amount тоже зачисляются, со статусом held; когда на адресе накопится минимум, они вместе собираются на ваш адрес получения за одну фиксированную комиссию.
Поступления
Поступление (deposit) — это один зачисленный платёж в блокчейне по платежу или на адрес пополнения. У одного платежа их может быть несколько.
{
"id": "dep_9Kx2Pa6Wn3Ty8Lq5Rb1Ms4",
"object": "deposit",
"status": "settled",
"method": "wallet",
"chain": "bsc",
"customer": "user_42",
"payment_intent": "pi_7Gm4Rk2Wp9Ls1Qv8Bd3Zt6",
"token": { "symbol": "USDT", "address": "0x55d3…7955", "decimals": 18 },
"amount": "25.00",
"fee": "0.0875",
"net": "24.9125",
"usd_value": "25.00",
"confirmed_at": "2026-11-02T08:41:07Z",
"transaction": {
"hash": "0x4e7a…91c3",
"log_index": 212,
"block_number": 44718235,
"block_time": "2026-11-02T08:40:58Z",
"from": "0x1f9C…a2B0",
"to": "0x7d3E…09f1",
"raw_amount": "25000000000000000000"
},
"settlement": {
"tx_hash": "0x4e7a…91c3",
"by": "payment",
"settled_at": "2026-11-02T08:40:58Z"
}
}| Поле | Описание |
|---|---|
method | wallet: оплата кошельком. deposit_address: перевод на адрес. |
customer | Переданный вами ID пользователя или null. |
payment_intent | Платёж, к которому относится; null для адресов пополнения. |
amount、fee、net | Сколько заплатил пользователь, комиссия и сколько получаете вы. В статусе held значение fee равно 0 и определяется при сборе. |
usd_value | amount в долларах по цене токена, заданной kokiwa. |
transaction | Платёж пользователя в блокчейне, его можно проверить в обозревателе блоков. Если в транзакции несколько переводов, один определяется парой hash + log_index. from не всегда кошелёк пользователя: при выводе с биржи это адрес биржи. raw_amount — исходное значение перевода в блокчейне в наименьших единицах токена, только для сверки с обозревателем блоков. |
settlement | Транзакция, дошедшая до вашего адреса получения, или null до расчёта. by: payment (расчёт самим платежом), kokiwa (сбор kokiwa) или owner (возврат своим кошельком, без комиссии). У поступлений, собранных вместе, один tx_hash. |
| status | Описание |
|---|---|
confirmed | Подтверждено в блокчейне, ожидает сбора на ваш адрес получения. Можно зачислять пользователю. |
held | Подтверждено в блокчейне, сумма пока мала для сбора. Можно зачислять пользователю. |
settled | Дошло до вашего адреса получения. |
Получить пополнение
GET/v1/deposits/{id}Список пополнений
GET/v1/depositsСначала самые новые.
| Параметр запроса | Описание |
|---|---|
customer | Только этот пользователь. |
tx_hash | Поиск по хешу транзакции платежа или расчёта. |
limit | Размер страницы, от 1 до 100. По умолчанию 20. |
starting_after | id последнего элемента предыдущей страницы. |
curl "https://api.kokiwa.com/v1/deposits?tx_hash=0x4e7a…91c3" \
-H "Authorization: Bearer $KOKIWA_KEY"
{ "object": "list", "data": [ { "id": "dep_9Kx2…", "object": "deposit", ... } ], "has_more": false }Сети и токены
kokiwa поддерживает перечисленные ниже сети и валюты. В chains и options[].chain указывайте значение из столбца chain, а в currency — из столбца валют.
chain | Блокчейн | Валюты | Способы оплаты |
|---|---|---|---|
bsc | BNB Chain | USDT, USDC | wallet, deposit_address |
ethereum | Ethereum | USDT, USDC | wallet |
arbitrum | Arbitrum | USDT, USDC | wallet |
base | Base | USDT, USDC | wallet |
polygon | Polygon | USDT, USDC | wallet |
optimism | Optimism | USDT, USDC | wallet |
ton | TON | USDT | wallet |
solana | Solana | USDT, USDC | wallet |
В тестовой сети доступен только USDT. Токен называется tUSDT, но в currency по-прежнему указывается USDT.
Это полный диапазон значений, а не то, что доступно конкретному проекту. Настройки у продавцов разные, поэтому фактически доступные сети и валюты запрашивайте через метод ниже.
Получить сети и токены проекта
GET/v1/chainsВозвращает, что проект этого ключа может принимать в текущей сети.
{
"object": "list",
"livemode": true,
"currencies": ["USDT"],
"data": [
{
"object": "chain", "chain": "bsc", "name": "BNB Smart Chain", "chain_id": 56, "testnet": false, "native": "BNB",
"payout_registered": true, "active": true,
"methods": { "wallet": true, "deposit_address": true },
"tokens": [
{ "symbol": "USDT", "asset": "USDT", "address": "0x55d398326f99059fF775485246999027B3197955", "decimals": 18, "accepted": true },
{ "symbol": "USDC", "asset": "USDC", "address": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", "decimals": 18, "accepted": false }
]
}
]
}| Поле | Описание |
|---|---|
currencies | Валюты, которые сейчас можно передать в currency. |
data[].chain | Значение для chain и options[].chain: bsc, ethereum, arbitrum, base, polygon, optimism, ton, solana. |
data[].active | Может ли сеть принимать платежи сейчас: адрес зарегистрирован, способ приёма включён и токен выбран. |
data[].tokens[].asset | Валюта токена. Токены с одинаковым asset равнозначны в разных сетях. |
data[].tokens[].accepted | Выбрал ли проект этот токен. |
Клиенты
Необязательно. Клиент создаётся, когда значение customer появляется впервые; эти методы нужны только для фильтрации по тегам в кабинете.
Задать метку и заметку
PUT/v1/customers/{external_id}| Параметр | Описание |
|---|---|
tags | До 20 тегов длиной от 1 до 64 букв, цифр или _ - . :. |
metadata | Любой объект JSON, до 50 ключей и 8 КБ. |
Получить клиента
GET/v1/customers/{external_id}Возвращает теги, заметки и deposit_addresses (адреса пополнения по сетям).