Merchant APIv1
Документация для разработчиков
ПРИЁМ ПЛАТЕЖЕЙ ДЛЯ МАГАЗИНА

API для вашего магазина

Четыре метода, чтобы подключить оплату криптовалютой.
Принимайте BTC, LTC, TRX и USDT TRC20 и переводите средства, когда вам удобно.

АДРЕС API${URL}/api/v1

Что понадобится для подключения

Попросите у менеджера три вещи:

  • URL — адрес API, который начинается с https://.
  • ACCOUNT_ID — ID вашего аккаунта.
  • Transfer Key — секретный ключ для переводов и настройки уведомлений.

Подставьте эти данные в примеры ниже. В URL уберите слеш в конце адреса. Transfer Key храните на сервере вашего магазина.

Как указывать суммы

API принимает целые числа в минимальных единицах валюты:

  • 1 BTC или LTC = 100 000 000 единиц
  • 1 TRX или USDT = 1 000 000 единиц

Например, для 0,001 BTC укажите 100000, а для 1 USDT — 1000000.

Как проходит оплата: настройте уведомления → получите адрес для заказа → проверьте поступление. Перевести средства можно в удобный момент.

ВЫБЕРИТЕ ВАЛЮТУПримеры ниже обновятся автоматически

В примерах — условные данные. Подставьте свои значения; сама страница ничего не отправляет.

01

Получить адрес

Без Transfer Key
POST/accounts/{account}/addresses

Получите адрес и покажите его покупателю при оплате. Сохраните адрес вместе с заказом — так вы поймёте, за какую покупку пришли деньги.

Тело запроса · JSON
ПараметрОписание
currencyобязательноbtc, ltc, trx или usdt@trx.
callbackнеобязательноОтдельное уведомление для этого адреса. В data можно передать номер заказа.
addr-typeнеобязательноBTC: p2sh-p2wpkh по умолчанию или p2wpkh. LTC: p2wpkh. TRX/USDT: generic.

Каждый успешный запрос создаёт новый адрес. Если ответ не пришёл, не повторяйте запрос автоматически: адрес уже мог быть создан.

У TRX и USDT общий список адресов TRON. Всегда указывайте валюту, которую хотите принять.

Запрос cURL
curl --request POST "${URL}/api/v1/accounts/${ACCOUNT_ID}/addresses" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "currency": "btc",
  "callback": {
    "url": "https://merchant.example/payments/callback",
    "method": "POST",
    "data": {
      "order_id": "ORDER_1001"
    }
  }
}'
Ответ 200 JSON
{
  "account": "00000000000000000000000000000001",
  "currency": "btc",
  "address": "YOUR_RECEIVING_ADDRESS",
  "created": "2026-09-05T12:00:00.000000",
  "type": "p2sh-p2wpkh",
  "callback": {
    "url": "https://merchant.example/payments/callback",
    "method": "POST",
    "data": {
      "order_id": "ORDER_1001"
    }
  }
}
02

Перевести средства

Нужен Transfer Key
POST/accounts/{account}/transfer

Переведите средства на нужный адрес. В примере переводится весь доступный баланс выбранной валюты за вычетом комиссии сети и сервиса.

Тело запроса · JSON
ПараметрОписание
currencyобязательноВалюта перевода.
transfer-keyобязательноВаш секретный Transfer Key из 32 символов.
destinationsобязательноАдрес получателя address и сумма amount. Укажите "100%" для всего баланса или целое число для конкретной суммы.
feeнеобязательноИспользуйте normal.
addressesнеобязательноСписок ваших адресов, с которых нужно списать средства. Можно не передавать: сервис выберет их сам. Для конкретной суммы TRON может выбрать один адрес с достаточным балансом.
fee-limit
processing-fee-limitнеобязательно
Максимальная комиссия сети и сервиса в минимальных единицах валюты. Если лимиты не заданы, используются комиссии, рассчитанные перед переводом.

Сохраните id из ответа. Статус success означает, что транзакция отправлена в сеть. Подтверждение проверяйте методом 03. У TRX/USDT сначала может прийти pending, ещё без TXID.

Комиссии и ответ, который не пришёл

Для одного получателя с суммой 100% обе комиссии вычитаются автоматически. Для конкретной суммы комиссии добавляются сверху; чтобы вычесть их из суммы, передайте subtract-fee-from-amount: true. Комиссии USDT оплачиваются в USDT, а необходимый для исполнения TRX предоставляет платформа.

Не повторяйте POST автоматически: можно отправить средства ещё раз. Если ответ потерялся или пришла ошибка 500/503, сначала проверьте результат перевода. Отсутствие ID или ответ 404 ещё не означают, что перевод не принят. Если результат неизвестен, обратитесь к менеджеру перед новой отправкой.

У TRON возможен частичный перевод: часть средств уже отправлена. Проверьте сохранённую операцию; повторять POST нельзя.

Запрос cURL
curl --request POST "${URL}/api/v1/accounts/${ACCOUNT_ID}/transfer" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "currency": "btc",
  "transfer-key": "YOUR_TRANSFER_KEY",
  "destinations": [
    {
      "address": "YOUR_DESTINATION_ADDRESS",
      "amount": "100%"
    }
  ],
  "fee": "normal"
}'
Ответ 200 · основные поля JSON
{"account":"00000000000000000000000000000001","currency":"btc","type":"payment","id":"8312c94cb8d4a9025f7d1c783f2be9a446c0e837965219b46792ac8523d9f068","status":"success","txs":["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]}
03

Проверить транзакцию

Без Transfer Key
GET/accounts/{account}/history/{id}

Проверьте поступление или исходящий перевод вашего аккаунта. Для поступления передайте TXID из уведомления, а для исходящего перевода — id из ответа метода 02. Этот ID работает и до появления TXID.

Параметры адреса запроса
ПараметрОписание
idв пути запросаTXID поступления или ID перевода: 64 шестнадцатеричных символа в нижнем регистре.
currencyв строке запросаРекомендуем передавать всегда. Для USDT TRC20 укажите usdt@trx.

Найдите адрес заказа в items[].address и сложите суммы его поступлений из items[].amount. Перед выдачей товара сверьте аккаунт, валюту и сумму, проверьте is_confirmed и свежесть данных as_of. Общая сумма ответа может включать несколько адресов.

ID перевода и TXID блокчейна — разные значения. Метод показывает операции вашего аккаунта, которые уже обнаружил сервис.

503 означает, что сейчас проверить подтверждение не удалось. Повторите проверку через время из Retry-After. Не считайте заказ неоплаченным только из-за этой ошибки. 404 — операция не найдена для этого аккаунта.

Запрос cURL
curl --get "${URL}/api/v1/accounts/${ACCOUNT_ID}/history/${TXID_OR_PAYMENT_ID}" \
  --data-urlencode 'currency=btc'
Ответ 200 · входящий платёж JSON
{
  "account": "00000000000000000000000000000001",
  "currency": "btc",
  "created": "2026-09-16T12:00:00.000000",
  "type": "receipt",
  "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "items": [
    {
      "txid": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
      "created": "2026-09-16T12:00:00.000000",
      "vout": 0,
      "event_kind": "utxo_output",
      "address": "YOUR_RECEIVING_ADDRESS",
      "amount": 100000,
      "block": {
        "hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
        "height": 101,
        "deleted": false
      },
      "is_confirmed": true
    }
  ],
  "amount": 100000,
  "is_confirmed": true,
  "observation_status": "recorded",
  "as_of": {
    "height": 120,
    "block_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
    "checked_at": "2026-09-16T12:00:01.000000",
    "source_height": 120,
    "lag_blocks": 0
  }
}
04

Настроить уведомления

Нужен Transfer Key
PATCH/accounts/{account}

Укажите, куда присылать вашему магазину уведомления об оплате. Такой callback будет использоваться для новых адресов, если вы не задали отдельный для заказа.

Тело запроса · JSON
ПараметрОписание
currencyобязательноВалюта, для которой настраиваются уведомления. У TRX и USDT общие настройки, у BTC и LTC — отдельные.
transfer-keyобязательноВаш секретный Transfer Key.
callback.urlобязательноАдрес обработчика на вашем сайте, доступный по HTTPS. Переадресации и адреса локальной сети не поддерживаются.
callback.methodнеобязательноPOST по умолчанию: данные в JSON. Либо GET: данные в строке запроса.
callback.dataнеобязательноВаши данные, которые вернутся вместе с уведомлением. Например, номер заказа.

Чтобы выключить уведомления, передайте callback: {}. Значение null у callback адреса включает общие настройки аккаунта. Изменения действуют на новые события; уже созданные уведомления отправляются по прежним настройкам.

Что делать с уведомлением
  1. Сохраните уведомление. Повторную доставку можно определить по X-Coinkun-Event-ID. Одно и то же поступление в транзакции учитывайте только один раз.
  2. Проверьте TXID методом 03: валюта, адрес и сумма должны соответствовать заказу. Заголовки callback не являются криптографической подписью.
  3. Ответьте кодом 200, с Content-Type: text/plain и телом ровно *ok*, включая звёздочки.

Если ответить *ok* на pending, уведомление confirmed уже не придёт: подтверждение нужно будет проверять методом 03. Чтобы дождаться подтверждения через callback, не возвращайте *ok* для pending. Уведомления об изменениях, например dropped, могут прийти и после подтверждения доставки.

Пока вы не подтвердили доставку, сервис повторяет уведомление после нового обработанного блока BTC/LTC или каждых пяти блоков TRON в пределах срока доставки. Возможны повторы и изменение порядка уведомлений.

Запрос cURL
curl --request PATCH "${URL}/api/v1/accounts/${ACCOUNT_ID}" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "currency": "btc",
  "transfer-key": "YOUR_TRANSFER_KEY",
  "callback": {
    "url": "https://merchant.example/payments/callback",
    "method": "POST",
    "data": {}
  }
}'
Ответ 200 · основные поля JSON
{"account":"00000000000000000000000000000001","currency":"btc","callback":{"url":"https://merchant.example/payments/callback","method":"POST","data":{}}}
Пример уведомления JSON
{"account":"00000000000000000000000000000001","currency":"btc","value":100000,"input_address":"YOUR_RECEIVING_ADDRESS","confirmations":1,"input_transaction_hash":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","network":"mainnet","event":"confirmed","status":"confirmed","event_kind":"utxo_output","position":0,"data":{"order_id":"ORDER_1001"}}