kokiwa

Справочник API

Вызывайте все методы со своего сервера. Запросы и ответы в формате JSON. Адреса вебхуков и API-ключи управляются в кабинете мерчанта.

МетодНазначение
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}Получить пользователя (необязательно)

Основные правила

Базовый URLhttps://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" }
  }
}
HTTPcodeЗначение
400invalid_*Неверный параметр; message указывает поле.
400chain_not_enabledУ проекта нет активного адреса получения в этой сети, или приём выключен.
400chain_not_availableЭта сеть сейчас не принимает платежи.
400chain_not_supportedВ этой сети нет адресов пополнения.
400token_not_enabledПроект не выбрал этот токен.
400currency_not_availableПроект не может принять эту валюту ни в одной сети.
400deposits_disabledПроект выключил адреса пополнения.
400amount_below_minimumНиже минимальной суммы, она указана в details.min_amount.
401unauthorizedAPI-ключ отсутствует, неверен или отозван.
403project_disabledПроект отключён.
404not_foundРесурс не существует или принадлежит другому проекту.
409request_in_progressЗапрос с тем же Idempotency-Key ещё выполняется. Повторите чуть позже.
422idempotency_key_reusedТот же Idempotency-Key использован для другого запроса.
500internal_errorОшибка сервера. Повторите позже с тем же Idempotency-Key.

Платежи

Платёж — это заказ, который должен оплатить пользователь. Пользователь платит на странице оплаты, а результат приходит вебхуком.

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

POST/v1/payment_intents
ПараметрОписание
currency обязательноВалюта, например USDT. См. currencies в GET /v1/chains.
amount обязательноСумма в единицах токена, до 6 знаков после запятой, например "25.00".
chainsПринимать только в этих сетях, например ["bsc", "base"]. По умолчанию — все сети, где проект принимает эту валюту.
customerID пользователя в вашей системе: от 1 до 128 букв, цифр или _ - . : @.
expires_inСрок действия в секундах, от 60 до 604800 (7 дней). По умолчанию 1800 (30 минут).
metadataЛюбой объект JSON, до 50 ключей и 8 КБ, возвращается без изменений в API и вебхуках. Подходит для номера заказа.
success_urlhttps-адрес, куда страница оплаты вернёт пользователя после оплаты.
cancel_urlhttps-адрес, куда страница оплаты вернёт пользователя при нажатии «Отмена».

Сети, где сумма ниже минимума, исключаются; если не осталось ни одной, запрос завершается ошибкой. Минимум по умолчанию — 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_optionoptions[].id, который пользователь фактически оплатил.
depositsВсе поступления по этому платежу, сначала самые старые. См. объект поступления.
livemodetrue в основной сети, 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"
  }
}
ПолеОписание
methodwallet: оплата кошельком. deposit_address: перевод на адрес.
customerПереданный вами ID пользователя или null.
payment_intentПлатёж, к которому относится; null для адресов пополнения.
amount、fee、netСколько заплатил пользователь, комиссия и сколько получаете вы. В статусе held значение fee равно 0 и определяется при сборе.
usd_valueamount в долларах по цене токена, заданной 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_afterid последнего элемента предыдущей страницы.
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БлокчейнВалютыСпособы оплаты
bscBNB ChainUSDT, USDCwallet, deposit_address
ethereumEthereumUSDT, USDCwallet
arbitrumArbitrumUSDT, USDCwallet
baseBaseUSDT, USDCwallet
polygonPolygonUSDT, USDCwallet
optimismOptimismUSDT, USDCwallet
tonTONUSDTwallet
solanaSolanaUSDT, USDCwallet

В тестовой сети доступен только 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 (адреса пополнения по сетям).

Connect a wallet with WalletConnect