Перейти к содержимому
CRYPTOSHA DEVELOPERS

Документация API

Методы, параметры, схемы данных и примеры интеграции. Готовая платёжная страница или ваша форма оплаты — с одним API.

REST API · HTTPS · JSON

Приём платежей в вашем продукте

Справочник всех внешних методов CRYPTOSHA: счета, реквизиты, управляемые кошельки, отправка и сбор средств, баланс ресурсов и webhook-события.

Base URLhttps://cryptosha.netOpenAPI
  1. В кабинете подтвердите email, включите MFA и пополните баланс ресурсов. Для EVM, TRON, Solana и Sui адрес счёта создаётся автоматически; для XRP создайте главный кошелёк и активируйте пополнением либо подключите внешний адрес с destination tag.
  2. Создайте API-ключ проекта и сохраните его только на вашем сервере. Выдавайте права на переводы отдельно.
  3. Получите доступные активы и создайте счёт. Направьте покупателя по checkout_url либо отобразите реквизиты в своей форме.
  4. Настройте подписанные уведомления. Выдавайте заказ после проверки подтверждённой оплаты.

Адреса, ID, даты и подписанные транзакции в примерах — иллюстрации. Не отправляйте на них средства. Реальные реквизиты берите из ответа API.

Авторизация и права

Методы /v1/* требуют Authorization: Bearer YOUR_API_KEY. Ключ принадлежит одному проекту; передавать ID проекта не нужно. Ключ другого проекта не получит ваши счета и переводы. Создание ключей, управление проектом, MFA и webhook URL выполняются в кабинете.

Храните ключ в окружении или хранилище секретов вашего backend. Его нельзя добавлять в JavaScript сайта, мобильное приложение, URL или QR. Межсайтовый CORS для merchant API не предоставляется. Отзывайте скомпрометированный ключ в кабинете.

ПравоЧто разрешает
Обычный ключАктивы, счета, баланс, чтение адресов/переводов, публикация уже подписанной транзакции. Дополнительные custody-права для чтения не нужны.
wallets:createСоздание управляемого адреса EVM/TRON/Solana/Sui/XRP.
wallets:exportВместе с wallets:create разрешает returnPrivateKey=true. Ключ адреса выдаётся только один раз.
transfers:createПереводы, сборы и отмена неподписанных заявок.

Владелец аккаунта должен подтвердить email и включить MFA для реального приёма и исходящих операций. Код MFA не передаётся в каждом запросе merchant API. Отсутствие подготовки аккаунта даёт 403 ACCOUNT_SECURITY_REQUIRED.

Своя форма оплаты

Один ответ на создание содержит и платёжную ссылку, и полные реквизиты. Ваш сервер привязывает id к заказу и отдаёт покупателю данные только этого заказа. Сумму и актив определяйте на сервере по вашему каталогу, а не по неподтверждённым значениям из браузера.

201 Created · сокращённый пример
{
  "id": "inv_example",
  "asset": {
    "id": "bsc:usdt",
    "chain": "bsc",
    "symbol": "USDT",
    "name": "Tether USD",
    "decimals": 18,
    "contract": "0x55d398326f99059ff775485246999027b3197955",
    "chain_id": 56
  },
  "amount": "12.5",
  "received": "0",
  "remaining": "12.5",
  "address": "0x1111111111111111111111111111111111111111",
  "memo": null,
  "payment_uri": "0x1111111111111111111111111111111111111111",
  "checkout_url": "https://cryptosha.net/pay/EXAMPLE_TOKEN_DO_NOT_PAY_00000000000000000000",
  "can_pay": true,
  "test_mode": false,
  "expires_at": "2026-09-28T10:30:00.000Z"
}
  1. Покажите название/тикер, asset.chain, remaining, address и срок expires_at. Если memo не null, отобразите его как обязательную часть реквизитов.
  2. Сформируйте QR из payment_uri. Для EVM URI — только адрес. При вызове кошелька отдельно используйте asset.chain_id, контракт и точную сумму с asset.decimals; не отправляйте нативную монету вместо токена.
  3. Показывайте реквизиты для оплаты только при can_pay=true и до срока. При недоплате используйте remaining, при confirming остановите приглашение к повторной оплате.
  4. Ваш backend получает состояние через GET /v1/invoices/{id}. Для активной страницы начните с интервала 10–15 секунд; централизуйте опрос и учитывайте общий лимит всех покупателей.
  5. Webhook обновляет заказ на вашем сервере. Возврат пользователя со страницы оплаты, QR, хеш перевода и HTTP 201 сами по себе не подтверждают оплату.

Ссылка checkout_url остаётся готовым вариантом оплаты. Не публикуйте её в общих логах: токен предоставляет доступ к конкретному счёту. Ответ на публичный запрос по токену имеет отдельную схему.

Главные кошельки и сбор

Включённые сети EVM, TRON, Solana и Sui автоматически выдают отдельный управляемый адрес каждому счёту. Заранее создавать главный кошелёк не нужно. Если проект использует внешний пул или HD-кошелёк, счета продолжают получать адреса из него; создание главного кошелька переключает новые счета этой сети на управляемые адреса. В XRP создайте главный кошелёк этого магазина: каждый счёт получит этот же адрес и уникальный Destination Tag в memo. Теги не повторяются между магазинами и не освобождаются после оплаты, истечения срока или отмены. До активации главного адреса пополнением создание счёта вернёт 409 XRP_ACTIVATION_REQUIRED; без главного кошелька или внешнего источника — 409 XRP_MAIN_WALLET_REQUIRED.

У каждого магазина один собственный активный главный кошелёк на сеть. Адреса, архив и история переводов изолированы между магазинами, включая магазины одного владельца. Создайте недостающие адреса одной кнопкой в кабинете либо через POST /v1/main-wallets/bulk; для отдельной сети используйте POST /v1/main-wallets. Для API нужно право wallets:create ключа этого магазина. Ключ одного магазина не может видеть или использовать кошельки другого. Первое создание после подтверждения email не требует повторного пароля или MFA; замена действующего адреса и перевод в кабинете требуют дополнительного подтверждения. Приватный ключ главного адреса не экспортируется.

В XRP ручное пополнение без тега счёта не создаёт webhook. Перевод с точным тегом относится только к закреплённому счёту. При замене главного кошелька старые счета сохраняют реквизиты и обычное расписание проверки, новые используют новый адрес. Баланс XRP возвращает reserve, spendable и activated; резерв определяется по сети и при выводе не расходуется. Для перевода на биржу передайте destinationTag числом, включая 0 при необходимости. Система подписывает только нативные XRP Payment и проверяет подтверждённую доставленную сумму. Неизвестный результат или истёкшая подпись не приводят к созданию новой транзакции.

  1. Пополните главный адрес нативной монетой: ETH, BNB, TRX, SOL, SUI или XRP. Это запас для комиссий; баланс ресурсов USDT пополняется отдельно.
  2. В XRP средства сразу находятся на главном адресе и отдельного сбора нет. В EVM, TRON, Solana и Sui счета получают отдельные временные адреса. После подтверждённой оплаты создайте сбор с wallet_id из счёта и бюджетом комиссии.
  3. Для токена fundGas=true по умолчанию. При нехватке нативной монеты создаётся перевод комиссии с главного адреса: purpose=gas_funding, parentTransferId указывает на сбор. Сумма — нехватка до feeBudget. Сбор продолжается после подтверждения пополнения. При экспортированном ключе автоматического пополнения нет.
  4. Для вывода используйте POST /v1/transfers с ID главного кошелька, активом, получателем, суммой и feeBudget. История относится к проекту, создавшему заявку.

На заявку допускается одно пополнение комиссии. Его бюджет задаёт fundingFeeBudget, по умолчанию feeBudget. За пополнение списывается 0.01 USDT ресурсов за заявку и 0.01 за отправку. При отмене сбора его неподписанное пополнение отменяется вместе с ним; после подписи пополнения нужно дождаться результата. Остаток gas на временном адресе автоматически не возвращается.

Баланс и архив

GET /v1/main-wallets читает кеш. Ручной refresh обращается к сети не чаще раза в пять минут на адрес, независимо от IP и ключа. Повтор возвращает HTTP 200, cached=true и сохранённый снимок. Пустой balances означает, что успешной проверки ещё не было. При ошибке остаются прежние значения и balanceError; показывайте balanceCheckedAt. Ручные пополнения без тега счёта и обновление баланса не создают webhook. В XRP оплата с тегом счёта создаёт обычное событие этого счёта.

Для замены передайте chain и replaceWalletId актуального кошелька с новым Idempotency-Key. Старый адрес уходит в архив, его средства и ключ сохраняются. Перевод остатков выполняется отдельно; архивный адрес доступен для проверки и вывода. Незавершённые операции блокируют замену. Реквизиты ранее созданных счетов сохраняются.

Форматы данных

Тип / правилоКонтракт
JSON / UTF-8Для POST с телом передавайте Content-Type: application/json. Максимум 32768 байт на всё тело. Входные объекты создания строго проверяются: неизвестные поля запрещены.
Денежные значенияСтроки десятичных чисел: "12.5", "0.000001". В суммах создания запрещены экспонента, запятые, пробелы, знак и JSON-number. Сумма >0; дробная часть не длиннее decimals, целая часть до 48 цифр. Не используйте float/Number для расчётов.
Минимальные единицыДля операций кошелька используйте целые единицы: сумма × 10^decimals. Точность берите у конкретного assetId, а не из тикера.
ВремяГлавные кошельки, счета, checkout, webhook и Health: ISO 8601 UTC с Z. createdAt кошельков/переводов: UTC YYYY-MM-DD HH:mm:ss.SSS; добавьте UTC при разборе, не считайте локальным временем.
null и отсутствиеnull — явное отсутствие значения. Необязательные поля могут не присутствовать: wallet_id, privateKey, sentAmount, txid broadcast. В merchant-счёте address/memo/payment_uri всегда присутствуют, иногда равны null.
Имена полейВходные параметры исторически camelCase. Merchant-счёт использует snake_case, кошельки/переводы/checkout — camelCase. Точные имена приведены в схемах; автоматически менять регистр нельзя.
СовместимостьИгнорируйте неизвестные поля ответа. Неизвестный status не трактуйте как оплату. /api/* — внутренние маршруты кабинета; используйте документированные merchant-методы.

Лимиты запросов

Лимиты считаются по IP, а не по API-ключу. Запросы нескольких проектов с одного сервера делят соответствующий счётчик. Базовые маршруты используют одно общее окно; специальные маршруты ниже имеют собственные счётчики вместо базового.

Маршрут / уровеньОграничение
По умолчанию120 запросов за 60 секунд на IP суммарно для маршрутов без отдельной настройки (включая чтение и создание счетов).
POST /v1/main-wallets5 запросов за 60 секунд на IP.
POST /v1/main-wallets/{id}/refresh10 запросов за 60 секунд на IP; RPC-проверка раз в пять минут на адрес, включая ошибки.
POST /v1/addresses20 запросов за 60 секунд на IP.
POST /v1/transfers15 запросов за 60 секунд на IP.
POST /v1/sweeps15 запросов за 60 секунд на IP, отдельный счётчик.
POST /v1/broadcast15 запросов за 60 секунд на IP.
GET /status-api/rpc60 запросов за 60 секунд на IP.
Внешний проксиДополнительно 5 запросов в секунду на IP, допустимый burst — 50. Применяется до приложения и может вернуть HTML 429.
Тело запроса32768 байт в приложении. signedTransaction — до 30000 символов; JSON-экранирование также занимает место в теле.
ЗаголовокЗначение
x-ratelimit-limitМаксимум текущего счётчика.
x-ratelimit-remainingОстаток запросов в текущем окне.
x-ratelimit-resetСекунды до сброса окна; это не Unix timestamp.
Retry-AfterПри 429 приложения — секунды до повторной попытки. Прокси может вернуть ответ без заголовка.

После 429 остановите запросы до указанного времени. Если заголовка нет, используйте экспоненциальную задержку со случайным разбросом. После 503 или тайм-аута POST не меняйте ключ операции. Кешируйте доступные активы, централизуйте опрос и используйте webhooks.

Повторы запросов

Обязательный Idempotency-Key — 8–100 символов из A–Z a–z 0–9 _ . : -. Создайте и сохраните ключ на вашем сервере до первого запроса. Повтор после тайм-аута возвращает уже созданный ресурс, если параметры совпадают. Изменение параметров с тем же ключом даёт 409; для нового действия нужен новый ключ.

Ключи идемпотентности изолированы по магазину, включая главные кошельки. Счета, адреса и broadcast имеют свои области; переводы и сборы разделяют одну область. Используйте уникальный ключ на каждое действие во всём проекте. Не полагайтесь на срок удаления ключей и не используйте старые ключи для новых операций.

Повтор возвращает актуальное состояние, поэтому JSON может отличаться от первого ответа. Для адресов с экспортом повторный ответ не содержит приватного ключа. При unknown перевода или broadcast новый ключ создаёт риск второго перевода: сначала выясните состояние исходной заявки.

Статусы и расчёты

Пустые просроченные счета HYPE на управляемых адресах переходят в архив мониторинга через 24 часа после создания, если отсутствие средств подтверждено независимыми проверками. Адрес и история сохраняются. Если перевод отправлен позднее, откройте счет в кабинете и нажмите «Проверить снова»: после проверки транзакций обновится платежный статус и придёт обычный webhook. Автоматические проверки архивного адреса остановлены.

Счёт

ЗначениеОбработка
pendingПоступлений ещё нет. Предлагайте оплату только при can_pay=true и до expires_at.
underpaidЕсть поступление, но суммы недостаточно. До срока можно доплатить remaining; после срока нужен разбор.
confirmingНайдена достаточная сумма, но подтверждений недостаточно. Повторная оплата не нужна; заказ ещё не выдавайте.
paidДостаточная сумма подтверждена и пришла вовремя. Можно исполнить соответствующий заказ после проверки данных и защиты от дублей.
overpaidПодтверждённая сумма выше требуемой, достаточная часть пришла вовремя. Отдельно определите обработку излишка; автоматического возврата нет.
expiredСрок истёк, поступления не найдены. Поздний перевод всё ещё возможен.
lateДостаточная сумма подтверждена, но часть, нужная для оплаты, поступила после срока. Примените отдельные правила заказа.
reviewНапример, поступление после отмены или изменение подтверждений. Не выдавайте заказ автоматически.
cancelledСчёт отменён. Отмена не отзывает транзакцию и не возвращает криптовалюту.

Статусы могут меняться и после оплаты при новых поступлениях или пересмотре подтверждений. received учитывает найденные валидные переводы; сравнения суммы недостаточно. Используйте status_version и webhook data.version. Решение resolution=accepted — действие продавца, а не автоматический перевод или изменение статуса.

Исходящий перевод / сбор

ЗначениеОбработка
queuedОжидает подготовки и подписи.
blockedНе хватает средств/комиссии либо есть другая устранимая причина. Смотрите errorCode.
signedПодписанные данные сохранены; отмена уже недоступна.
unknownРезультат отправки неизвестен. Не создавайте замену; сверяйте ту же заявку.
submittedТранзакция принята сетью; финальное подтверждение ещё не установлено.
confirmedПеревод подтверждён.
failed_onchainСеть подтвердила неуспешное исполнение; комиссия могла быть потрачена.
cancelledНеподписанная заявка отменена; резерв отправки освобождён.

Стоимость и сетевые комиссии

GET /v1/balance возвращает действующие тарифы. Создание счёта — 0.01 USDT за отслеживание; принятая заявка на перевод — 0.01; принятие транзакции сетью — ещё 0.01; каждое webhook-событие — 0.01, автоматические повторы бесплатны. Для исходящей заявки нужны минимум 0.02 доступных ресурсов: 0.01 списывается, 0.01 резервируется. Чтение статусов не тарифицируется как отдельная операция. Ресурсный баланс и средства на кошельках — разные балансы.

Сетевой gas оплачивается отдельно в нативной монете. Спонсирование отдельных операций может быть доступно, но не гарантировано: рассчитывайте на нативную комиссию и обрабатывайте отсутствие спонсирования. feeBudget всегда выражен в нативной монете. Сбор не запускается автоматически после оплаты счёта.

Webhooks

Укажите HTTPS URL вашего backend в настройках проекта и создайте webhook-секрет. Используется порт 443, публичный адрес без перенаправлений. Событие отправляется POST-запросом с Content-Type: application/json.

ЗаголовокОписание
X-Cryptosha-Event-IdID события, совпадает с body.id; постоянен во всех попытках.
X-Cryptosha-TimestampUnix timestamp попытки в секундах, строка из 10 цифр.
X-Cryptosha-SignatureHMAC-SHA256(secret, timestamp + '.' + rawBody), 64 lowercase hex-символа, без префикса.
JSON
{
  "id": "evt_example",
  "type": "invoice.paid",
  "created_at": "2026-09-28T10:05:00.000Z",
  "data": {
    "invoice_id": "inv_example",
    "test_mode": false,
    "order_id": "order-1049",
    "status": "paid",
    "amount": "12.5",
    "received": "12.5",
    "asset_id": "bsc:usdt",
    "version": 2,
    "resolution": null
  }
}

Полная схема: WebhookEvent и WebhookData. Тип — invoice.<status> или invoice.reviewed при решении продавца. Доплата может создать событие с тем же статусом и новой версией. Само создание счёта не гарантирует отдельного invoice.pending: сохраняйте ответ на создание.

Проверка подписи · Node.js

Node.js · исходные байты и проверка подписи
import { createHmac, timingSafeEqual } from "node:crypto";

// rawBody — Buffer исходных байтов до JSON.parse.
export function verify(rawBody, signature, timestamp, secret, now = Date.now()) {
  if (typeof signature !== "string" || typeof timestamp !== "string" ||
      !/^[a-f0-9]{64}$/.test(signature) || !/^\d{10}$/.test(timestamp) ||
      Math.abs(now / 1000 - Number(timestamp)) > 300) return false;
  const expected = createHmac("sha256", secret)
    .update(timestamp + ".").update(rawBody).digest();
  return timingSafeEqual(expected, Buffer.from(signature, "hex"));
}

// 1. Проверить X-Cryptosha-Signature и X-Cryptosha-Timestamp.
// 2. Разобрать JSON, сверить body.id с X-Cryptosha-Event-Id.
// 3. Транзакционно сохранить событие (UNIQUE event.id) и задание обработки.
// 4. Вернуть 2xx; для уже сохранённого event.id тоже вернуть 2xx.
// 5. В фоне обработать только новую data.version нужного invoice_id.
// 6. Сверить заказ, asset_id, amount и test_mode; спорные события — через API.
// 7. Выдать заказ один раз (UNIQUE invoice_id в журнале исполнения).

Сохраните raw body до JSON middleware. Не подписывайте повторно сериализованный объект: пробелы и порядок ключей меняют подпись. Допуск времени — 300 секунд в обе стороны; синхронизируйте часы сервера. Не добавляйте префикс sha256=.

Доставка, повторы и порядок

Дубликаты возможны, порядок не гарантируется. Для каждого счёта сохраняйте последнюю обработанную версию; события с меньшей/равной версией не должны откатывать состояние. У заказа должна быть собственная защита от повторной выдачи. Сначала надёжно сохраните событие и задание обработки, затем ответьте 2xx; повтор известного события также подтверждайте 2xx.

Любой не-2xx, редирект или тайм-аут вызывает повтор. Тайм-аут HTTP-запроса — 10 секунд; отвечайте сразу после сохранения. До 12 попыток суммарно. Задержка после неудачи: min(86400, 10 × 2^n) секунд, где n начинается с 0: 10, 20, 40, 80… Это минимальная задержка очереди, не гарантия времени доставки. После исчерпания попыток повтор доступен в кабинете с тем же event.id.

Недостаток ресурсов приостанавливает доставку; после пополнения очередь продолжает работу. При спорном или устаревшем событии запрашивайте текущий счёт. Отдельных webhook о подтверждении исходящих переводов нет. test_mode=true никогда не подтверждает реальную оплату.

Ошибки

Ошибки приложения возвращают JSON с обязательным error, иногда с code или fields. Логику стройте на HTTP-статусе и code, если он есть. Прокси при 413/429 и сетевых сбоях может вернуть не JSON — обрабатывайте ошибку разбора.

JSON
{
  "error": "Проверьте формат данных",
  "fields": [
    {
      "path": [
        "amount"
      ],
      "message": "Invalid"
    }
  ]
}
HTTPЗначение
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
402Недостаточно доступного баланса ресурсов; code=INSUFFICIENT_RESOURCE_BALANCE.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
409Конфликт Idempotency-Key, исчерпан пул адресов, кошелёк занят или текущее состояние запрещает действие.
413Тело запроса превышает 32768 байт. Ответ внешнего прокси при ещё большем теле может быть не JSON.
415Неподдерживаемый Content-Type. Отправляйте application/json.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Машинные коды HTTP-ошибок

ЗначениеОбработка
MAIN_WALLET_CHANGEDОбновите список и передайте актуальный replaceWalletId.
MAIN_WALLET_BUSYДождитесь завершения связанных операций.
ACCOUNT_SECURITY_REQUIREDПодтвердите email владельца и включите MFA.
API_SCOPE_REQUIREDВыдайте требуемое право API-ключу. Отзыв прав во время запроса также может дать 403 без code.
CUSTODY_CHAIN_UNSUPPORTEDУправляемые ключи доступны для EVM/TRON/Solana/Sui/XRP; каталог активов не добавляет поддержку подписи.
CUSTODY_UNAVAILABLEХранилище управляемых ключей не готово; новые операции временно недоступны.
SIGNER_UNAVAILABLEСоздание адреса приостановлено. Повторите с прежним ключом после восстановления.
WALLET_BUSYНа исходном адресе есть незавершённая заявка; дождитесь её результата или отмените до подписи.
INSUFFICIENT_RESOURCE_BALANCEПополните ресурсы. Ответ 402 также содержит balance, available, reserved и currency.

errorCode исходящего перевода

ЗначениеОбработка
GAS_FUNDING_PENDINGОжидается подтверждение пополнения комиссии.
GAS_FUNDING_EXHAUSTEDКомиссия уже пополнялась; второго аванса не будет.
GAS_FUNDING_FAILEDПополнение комиссии не выполнено.
MAIN_WALLET_BUSYГлавный адрес занят другой заявкой.
MAIN_WALLET_UNAVAILABLEЗафиксированный главный кошелёк недоступен.
GAS_RESOURCE_BALANCE_REQUIREDНе хватает ресурсов на пополнение комиссии.
TRANSFER_SIMULATION_FAILEDПроверка исполнения завершилась ошибкой.
UNSUPPORTED_ASSETАктив больше не входит в каталог переводов.
UNSUPPORTED_CHAINПодпись для этой сети не поддерживается.
AMOUNT_TOO_LARGEСумма не помещается в допустимый формат сетевой операции.
INSUFFICIENT_FUNDSНе хватает отправляемого актива на кошельке.
INSUFFICIENT_GASНе хватает нативной монеты для комиссии.
FEE_BUDGET_EXCEEDEDТребуемая комиссия выше бюджета; не создавайте дубли действующей заявки.
TOKEN_TRANSFER_REJECTEDКонтракт токена отклонил проверку перевода.
SPONSORSHIP_UNAVAILABLEСпонсирование недоступно; требуется обычная оплата gas.
RPC_OR_SIGNER_UNAVAILABLEПроверка сети или сервис подписи временно недоступны.
NETWORK_RESULT_UNCERTAINРезультат отправки неизвестен. Сверяйте ту же заявку и txid, не отправляйте с другим ключом.
AUTHORIZATION_REVOKEDИзменились права или защита аккаунта; проверьте ключ и доступ.
CHAIN_DISABLEDОтправка в сети отключена.

errorCode допускает новые значения. Неизвестная ошибка не означает, что средства не отправлены; сначала проверьте статус и txid.

Проверка интеграции

Публичного sandbox API на основном домене нет. Тестовые проекты работают только в изолированном локальном окружении. Их счета имеют test_mode=true, не выдают платёжный адрес и не подтверждают реальное получение. Управляемая отправка в песочнице запрещена.

Перед приёмом платежей проверьте: создание и повтор с одним ключом, недоплату и подтверждения, подпись и дубликаты webhook, позднюю оплату, отзыв ключа, 402/429/503 и защиту от двойной выдачи. Полный цикл на небольшой реальной сумме включает получение, подтверждение, уведомление, сбор и вывод. Health проверяет доступность сети, а не весь этот цикл.

REFERENCE

Методы API

22 методов · все параметры и ответы

GET/v1/main-wallets#

Главные кошельки и архив

Один активный главный кошелёк на сеть для текущего магазина. Каждый магазин имеет отдельные адреса, архив и историю; ключ одного магазина не видит кошельки другого, даже при общем владельце. GET возвращает кеш без RPC. В XRP счета используют главный адрес с уникальным Destination Tag в memo; только платёж с тегом счёта создаёт его webhook. Ручные пополнения без тега счёта и обновление баланса webhook не создают. В остальных сетях адреса счетов отдельные.

Bearer API-ключ проекта120 запросов / 60 с на IP, общий счётчик

Тело запроса не требуется.

cURL
curl --fail-with-body --request GET 'https://cryptosha.net/v1/main-wallets' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY"
200 · Успешный ответ
{
  "wallets": [
    {
      "id": "cw_main_example",
      "merchantId": "mer_example",
      "chain": "bsc",
      "address": "0x2222222222222222222222222222222222222222",
      "status": "active",
      "archivedAt": null,
      "createdAt": "2026-09-30T10:00:00.000Z",
      "balances": [],
      "balanceCheckedAt": null,
      "balanceError": null,
      "refreshAfter": null,
      "refreshing": false
    }
  ]
}
HTTP-ответы и ошибки
200Успешный ответ
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

POST/v1/main-wallets#

Создать или заменить главный кошелёк

Создаёт отдельный зашифрованный ключ без экспорта. Первое создание требует подтверждённый email, но не требует повторного пароля или MFA; для API нужен ключ этого магазина с wallets:create. При замене передайте replaceWalletId: прежний адрес становится архивным, средства автоматически не переводятся; в кабинете потребуются пароль и MFA. Архивный кошелёк остаётся доступен для ручного обновления и вывода через /v1/transfers. Незавершённые операции с текущим главным кошельком блокируют замену. В XRP каждый магазин использует собственный главный адрес с разными тегами своих счетов. Перед первым счётом активируйте адрес пополнением XRP; без этого вернётся 409 XRP_ACTIVATION_REQUIRED. Старые счета при замене сохраняют адрес и tag. В остальных сетях счета получают отдельные адреса.

Bearer API-ключ проекта5 запросов / 60 с на IP, отдельный счётчик этого маршрута

Права: wallets:create

Параметры запроса

Параметр / типОписание
Idempotency-Keyheader · stringОбязательноСохраните ключ до отправки. Повторяйте неопределённый результат с тем же ключом и теми же параметрами; другой запрос с прежним ключом вернёт 409.
длина ≥ 8 · длина ≤ 100 · pattern: ^[A-Za-z0-9_.:-]{8,100}$

Тело · application/json

Поле / типОписание
chainstringОбязательноВключённая сеть EVM, TRON, Solana, Sui или XRP.
длина ≤ 40
replaceWalletIdstringНеобязательноДля замены обязательно передайте ID текущего активного кошелька. При первом создании не передавайте.
длина ≤ 50

Неизвестные поля в теле отклоняются с HTTP 400.

cURL
curl --fail-with-body --request POST 'https://cryptosha.net/v1/main-wallets' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY" \
  --header 'Idempotency-Key: order-1049-createMainWallet' \
  --header 'Content-Type: application/json' \
  --data '{"chain":"bsc"}'
201 · Главный кошелёк создан
{
  "id": "cw_main_example",
  "merchantId": "mer_example",
  "chain": "bsc",
  "address": "0x2222222222222222222222222222222222222222",
  "status": "active",
  "archivedAt": null,
  "createdAt": "2026-09-30T10:00:00.000Z",
  "balances": [],
  "balanceCheckedAt": null,
  "balanceError": null,
  "refreshAfter": null,
  "refreshing": false,
  "replayed": false
}
HTTP-ответы и ошибки
200Идемпотентный повтор
201Главный кошелёк создан
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
402Недостаточно доступного баланса ресурсов; code=INSUFFICIENT_RESOURCE_BALANCE.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
409Конфликт Idempotency-Key, исчерпан пул адресов, кошелёк занят или текущее состояние запрещает действие.
413Тело запроса превышает 32768 байт. Ответ внешнего прокси при ещё большем теле может быть не JSON.
415Неподдерживаемый Content-Type. Отправляйте application/json.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

POST/v1/main-wallets/bulk#

Создать все недостающие главные кошельки

Одна операция для всех включённых управляемых сетей проекта. Создаёт только отсутствующие главные адреса текущего магазина, существующие и архивные кошельки не меняет. Все новые адреса создаются атомарно: при ошибке ни один не сохраняется. Повтор безопасен и возвращает пустой created, если всё уже создано. Тело и Idempotency-Key не нужны. Требуется подтверждённый email и право wallets:create ключа текущего магазина; в кабинете повторный пароль и MFA не требуются. Переводы и замена адреса сохраняют дополнительную защиту.

Bearer API-ключ проекта5 запросов / 60 с на IP, отдельный счётчик этого маршрута

Права: wallets:create

Тело запроса не требуется.

cURL
curl --fail-with-body --request POST 'https://cryptosha.net/v1/main-wallets/bulk' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY"
201 · Создан хотя бы один новый адрес
{
  "created": [
    "bsc"
  ],
  "wallets": [
    {
      "id": "cw_main_example",
      "merchantId": "mer_example",
      "chain": "bsc",
      "address": "0x2222222222222222222222222222222222222222",
      "status": "active",
      "archivedAt": null,
      "createdAt": "2026-09-30T10:00:00.000Z",
      "balances": [],
      "balanceCheckedAt": null,
      "balanceError": null,
      "refreshAfter": null,
      "refreshing": false
    }
  ]
}
HTTP-ответы и ошибки
200Все адреса уже существовали
201Создан хотя бы один новый адрес
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
409Конфликт Idempotency-Key, исчерпан пул адресов, кошелёк занят или текущее состояние запрещает действие.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

POST/v1/main-wallets/{id}/refresh#

Обновить баланс главного адреса

Ручное чтение каталожных активов. TON использует настроенный источник с проверкой основной сети и свежести masterchain; остальные управляемые сети используют независимые источники. Ограничение 5 минут на адрес в БД, общее для всех ключей/IP, включая неуспешные попытки. Повтор внутри окна возвращает cached=true и прежний снимок; это не очередь нового RPC-запроса. При ошибке сохраняет предыдущие значения и balanceError. Работает для архива; не создаёт webhook. Только ключ магазина, которому принадлежит кошелёк.

Bearer API-ключ проекта10 запросов / 60 с на IP, отдельный счётчик этого маршрута

Параметры запроса

Параметр / типОписание
idpath · stringОбязательноID ресурса, полученный при создании или в списке. Ресурс должен принадлежать проекту API-ключа.

Тело запроса не требуется.

cURL
curl --fail-with-body --request POST 'https://cryptosha.net/v1/main-wallets/cw_example/refresh' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY"
200 · Успешный ответ
{
  "id": "cw_main_example",
  "merchantId": "mer_example",
  "chain": "bsc",
  "address": "0x2222222222222222222222222222222222222222",
  "status": "active",
  "archivedAt": null,
  "createdAt": "2026-09-30T10:00:00.000Z",
  "balances": [],
  "balanceCheckedAt": null,
  "balanceError": null,
  "refreshAfter": null,
  "refreshing": false,
  "cached": false
}
HTTP-ответы и ошибки
200Успешный ответ
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

GET/v1/assets#

Доступные активы

Возвращает активы, разрешённые для приёма вашему проекту. Наличие валюты на сайте или доступность сети на Health не заменяет этот запрос. При пустом assets не создавайте платёжную форму. Точность зависит от сети: у USDT в BSC 18 знаков, в TRON 6.

Bearer API-ключ проекта120 запросов / 60 с на IP, общий счётчик

Тело запроса не требуется.

cURL
curl --fail-with-body --request GET 'https://cryptosha.net/v1/assets' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY"
200 · Успешный ответ
{
  "assets": [
    {
      "id": "bsc:usdt",
      "chain": "bsc",
      "symbol": "USDT",
      "name": "Tether USD",
      "decimals": 18,
      "contract": "0x55d398326f99059ff775485246999027b3197955"
    }
  ]
}
HTTP-ответы и ошибки
200Успешный ответ
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

POST/v1/invoices#

Создать счёт

Создаёт отдельный счёт и выделяет реквизиты. Нужны подтверждённый email, MFA владельца, доступный актив, настроенный источник адресов и не менее 0.01 USDT ресурсов. Первое создание списывает 0.01 USDT за отслеживание. Ответ сразу содержит адрес, memo, сумму, сеть и платёжную ссылку для вашей формы. Приватные ключи сюда не входят. orderId не уникален: от дублей защищает Idempotency-Key.

Bearer API-ключ проекта120 запросов / 60 с на IP, общий счётчик

Параметры запроса

Параметр / типОписание
Idempotency-Keyheader · stringОбязательноСохраните ключ до отправки. Повторяйте неопределённый результат с тем же ключом и теми же параметрами; другой запрос с прежним ключом вернёт 409.
длина ≥ 8 · длина ≤ 100 · pattern: ^[A-Za-z0-9_.:-]{8,100}$

Тело · application/json

Поле / типОписание
orderIdstringОбязательноID заказа вашей системы. Может повторяться; для защиты от дублей нужен Idempotency-Key.
длина ≥ 1 · длина ≤ 100
descriptionstringНеобязательноОписание заказа.
длина ≤ 300 · по умолчанию: ""
assetIdstringОбязательноТочное значение id из GET /v1/assets для вашего проекта.
длина ≥ 1 · длина ≤ 180
amountstringОбязательноПоложительная сумма в единицах актива, строка без знака, пробелов и экспоненты. Не более decimals дробных знаков и 48 цифр целой части; не более 78 цифр в сумме минимальных единиц.
длина ≤ 80 · pattern: ^\d+(\.\d+)?$
expiresInintegerНеобязательноСрок оплаты от момента создания, в секундах.
≥ 300 · ≤ 86400 · по умолчанию: 1800

Неизвестные поля в теле отклоняются с HTTP 400.

cURL
curl --fail-with-body --request POST 'https://cryptosha.net/v1/invoices' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY" \
  --header 'Idempotency-Key: order-1049-createInvoice' \
  --header 'Content-Type: application/json' \
  --data '{"orderId":"order-1049","assetId":"bsc:usdt","amount":"12.5","description":"Подписка Pro","expiresIn":1800}'
201 · Счёт создан; реквизиты выделены
{
  "id": "inv_example",
  "order_id": "order-1049",
  "description": "Подписка Pro",
  "status": "pending",
  "status_version": 0,
  "resolution": null,
  "asset_id": "bsc:usdt",
  "asset": {
    "id": "bsc:usdt",
    "chain": "bsc",
    "symbol": "USDT",
    "name": "Tether USD",
    "decimals": 18,
    "contract": "0x55d398326f99059ff775485246999027b3197955",
    "chain_id": 56
  },
  "amount": "12.5",
  "received": "0",
  "remaining": "12.5",
  "address": "0x1111111111111111111111111111111111111111",
  "memo": null,
  "payment_uri": "0x1111111111111111111111111111111111111111",
  "can_pay": true,
  "test_mode": false,
  "confirmations": 0,
  "required_confirmations": 15,
  "checkout_url": "https://cryptosha.net/pay/EXAMPLE_TOKEN_DO_NOT_PAY_00000000000000000000",
  "created_at": "2026-09-28T10:00:00.000Z",
  "expires_at": "2026-09-28T10:30:00.000Z",
  "wallet_id": "cw_example"
}
HTTP-ответы и ошибки
200Повтор: тот же счёт с актуальными данными, повторного списания нет
201Счёт создан; реквизиты выделены
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
402Недостаточно доступного баланса ресурсов; code=INSUFFICIENT_RESOURCE_BALANCE.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
409Конфликт Idempotency-Key, исчерпан пул адресов, кошелёк занят или текущее состояние запрещает действие.
413Тело запроса превышает 32768 байт. Ответ внешнего прокси при ещё большем теле может быть не JSON.
415Неподдерживаемый Content-Type. Отправляйте application/json.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

GET/v1/invoices#

Список счетов

Постраничный список только текущего проекта. Поиск q — подстрока в orderId, description или id. Сортировка created_at DESC, id DESC; при новых вставках offset-пагинация может сдвигаться, устраняйте дубли по id. Основные поля совпадают с созданием и получением счёта. Старые camelCase-поля сохранены только здесь для совместимости.

Bearer API-ключ проекта120 запросов / 60 с на IP, общий счётчик

Параметры запроса

Параметр / типОписание
qquery · stringНеобязательноПоисковая подстрока.
длина ≤ 100 · по умолчанию: ""
statusquery · stringНеобязательноФильтр состояния; all — все.
allpendingconfirmingpaidunderpaidoverpaidexpiredlatereviewcancelled
по умолчанию: "all"
limitquery · integerНеобязательноКоличество записей на странице.
≥ 1 · ≤ 100 · по умолчанию: 30
offsetquery · integerНеобязательноКоличество пропускаемых записей.
≥ 0 · ≤ 1000000 · по умолчанию: 0

Тело запроса не требуется.

cURL
curl --fail-with-body --request GET 'https://cryptosha.net/v1/invoices' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY"
200 · Успешный ответ
{
  "invoices": [
    {
      "id": "inv_example",
      "order_id": "order-1049",
      "description": "Подписка Pro",
      "status": "pending",
      "status_version": 0,
      "resolution": null,
      "asset_id": "bsc:usdt",
      "asset": {
        "id": "bsc:usdt",
        "chain": "bsc",
        "symbol": "USDT",
        "name": "Tether USD",
        "decimals": 18,
        "contract": "0x55d398326f99059ff775485246999027b3197955",
        "chain_id": 56
      },
      "amount": "12.5",
      "received": "0",
      "remaining": "12.5",
      "address": "0x1111111111111111111111111111111111111111",
      "memo": null,
      "payment_uri": "0x1111111111111111111111111111111111111111",
      "can_pay": true,
      "test_mode": false,
      "confirmations": 0,
      "required_confirmations": 15,
      "checkout_url": "https://cryptosha.net/pay/EXAMPLE_TOKEN_DO_NOT_PAY_00000000000000000000",
      "created_at": "2026-09-28T10:00:00.000Z",
      "expires_at": "2026-09-28T10:30:00.000Z",
      "wallet_id": "cw_example"
    }
  ],
  "total": 1,
  "limit": 30,
  "offset": 0
}
HTTP-ответы и ошибки
200Успешный ответ
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

GET/v1/invoices/{id}#

Получить счёт

Возвращает актуальные реквизиты и состояние. Чужой ID возвращает 404. Реквизиты реального счёта сохраняются после завершения, но can_pay=false и payment_uri=null. Полученная сумма может включать неподтверждённые поступления. Подтверждайте оплату по status и сверяйте asset_id, amount, order_id.

Bearer API-ключ проекта120 запросов / 60 с на IP, общий счётчик

Параметры запроса

Параметр / типОписание
idpath · stringОбязательноID ресурса, полученный при создании или в списке. Ресурс должен принадлежать проекту API-ключа.

Тело запроса не требуется.

cURL
curl --fail-with-body --request GET 'https://cryptosha.net/v1/invoices/inv_example' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY"
200 · Успешный ответ
{
  "id": "inv_example",
  "order_id": "order-1049",
  "description": "Подписка Pro",
  "status": "pending",
  "status_version": 0,
  "resolution": null,
  "asset_id": "bsc:usdt",
  "asset": {
    "id": "bsc:usdt",
    "chain": "bsc",
    "symbol": "USDT",
    "name": "Tether USD",
    "decimals": 18,
    "contract": "0x55d398326f99059ff775485246999027b3197955",
    "chain_id": 56
  },
  "amount": "12.5",
  "received": "0",
  "remaining": "12.5",
  "address": "0x1111111111111111111111111111111111111111",
  "memo": null,
  "payment_uri": "0x1111111111111111111111111111111111111111",
  "can_pay": true,
  "test_mode": false,
  "confirmations": 0,
  "required_confirmations": 15,
  "checkout_url": "https://cryptosha.net/pay/EXAMPLE_TOKEN_DO_NOT_PAY_00000000000000000000",
  "created_at": "2026-09-28T10:00:00.000Z",
  "expires_at": "2026-09-28T10:30:00.000Z",
  "wallet_id": "cw_example"
}
HTTP-ответы и ошибки
200Успешный ответ
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

POST/v1/invoices/{id}/cancel#

Отменить счёт

Разрешено только при status=pending и received=0. Тело и Idempotency-Key не нужны. Успешный ответ {ok:true}; повтор после отмены даёт 409. Отмена не возвращает средства и не запрещает перевод в блокчейне: позднее поступление на отменённый счёт переводит его в review. Адрес не выдаётся другому счёту.

Bearer API-ключ проекта120 запросов / 60 с на IP, общий счётчик

Параметры запроса

Параметр / типОписание
idpath · stringОбязательноID ресурса, полученный при создании или в списке. Ресурс должен принадлежать проекту API-ключа.

Тело запроса не требуется.

cURL
curl --fail-with-body --request POST 'https://cryptosha.net/v1/invoices/inv_example/cancel' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY"
200 · Успешный ответ
{
  "ok": true
}
HTTP-ответы и ошибки
200Успешный ответ
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
409Конфликт Idempotency-Key, исчерпан пул адресов, кошелёк занят или текущее состояние запрещает действие.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

POST/v1/addresses#

Создать управляемый адрес

Создаёт отдельный ключ и адрес в EVM/TRON/Solana/Sui/XRP/TON. Обязательны email/MFA, работающий сервис подписи и wallets:create. returnPrivateKey=true дополнительно требует wallets:export. Первый ответ может содержать ключ, повтор никогда его не содержит. При потере первого ответа с экспортом ключа создайте новый адрес до использования средств, если вам нужна собственная копия. Создание адреса не создаёт счёт и не включает отслеживание поступлений.

Bearer API-ключ проекта20 запросов / 60 с на IP, отдельный счётчик этого маршрута

Права: wallets:createwallets:export (только returnPrivateKey=true)

Параметры запроса

Параметр / типОписание
Idempotency-Keyheader · stringОбязательноСохраните ключ до отправки. Повторяйте неопределённый результат с тем же ключом и теми же параметрами; другой запрос с прежним ключом вернёт 409.
длина ≥ 8 · длина ≤ 100 · pattern: ^[A-Za-z0-9_.:-]{8,100}$

Тело · application/json

Поле / типОписание
chainstringОбязательноИдентификатор сети семейства EVM, TRON, Solana, Sui или XRP.
длина ≤ 40
returnPrivateKeybooleanНеобязательноВыдать приватный ключ один раз в первом успешном ответе. Требует дополнительного права wallets:export.
по умолчанию: false

Неизвестные поля в теле отклоняются с HTTP 400.

cURL
curl --fail-with-body --request POST 'https://cryptosha.net/v1/addresses' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY" \
  --header 'Idempotency-Key: order-1049-createAddress' \
  --header 'Content-Type: application/json' \
  --data '{"chain":"bsc","returnPrivateKey":false}'
201 · Создан новый адрес, replayed=false
{
  "id": "cw_example",
  "chain": "bsc",
  "address": "0x1111111111111111111111111111111111111111",
  "keyFormat": "secp256k1-hex",
  "keyExported": false,
  "replayed": false
}
HTTP-ответы и ошибки
200Повтор, replayed=true; privateKey отсутствует
201Создан новый адрес, replayed=false
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
409Конфликт Idempotency-Key, исчерпан пул адресов, кошелёк занят или текущее состояние запрещает действие.
413Тело запроса превышает 32768 байт. Ответ внешнего прокси при ещё большем теле может быть не JSON.
415Неподдерживаемый Content-Type. Отправляйте application/json.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

GET/v1/addresses#

Список адресов

До 100 последних адресов проекта; приватных ключей нет. Query-параметров и пагинации нет. Для чтения достаточно обычного ключа проекта. Сохраните id нужного кошелька при создании, если адресов больше 100.

Bearer API-ключ проекта120 запросов / 60 с на IP, общий счётчик

Тело запроса не требуется.

cURL
curl --fail-with-body --request GET 'https://cryptosha.net/v1/addresses' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY"
200 · Успешный ответ
{
  "addresses": [
    {
      "id": "cw_example",
      "chain": "bsc",
      "address": "0x1111111111111111111111111111111111111111",
      "keyFormat": "secp256k1-hex",
      "keyExported": false,
      "createdAt": "2026-09-28 10:00:00.000"
    }
  ]
}
HTTP-ответы и ошибки
200Успешный ответ
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

POST/v1/transfers#

Отправить заданную сумму

Асинхронная заявка с управляемого кошелька EVM/TRON/Solana/Sui/XRP/TON. Списывается 0.01 USDT ресурсов за заявку, ещё 0.01 резервируется на отправку. Один незавершённый перевод на исходный кошелёк. Средства актива нужны на исходном адресе. При нехватке комиссии для токена fundGas=true разрешает одно пополнение с главного кошелька этого магазина и ожидание его подтверждения. Сам главный адрес пополняйте вручную; ресурсный баланс не заменяет сетевой gas. В XRP поддержан нативный XRP: destination — classic address, destinationTag передаётся отдельно. Резерв остаётся на кошельке, feeBudget оплачивается XRP. В TON поддержаны TON и USDT Jetton: кошелёк V4R2, комиссия в TON, приём на новые адреса без обязательного комментария. Для Jetton в бюджет входит 0.1 TON, прикрепляемый к запросу токенового кошелька, и оценка комиссии отправителя с запасом 30%; неиспользованный TON возвращается на исходный адрес. Статус confirmed требует финальной доставки, включая завершённую цепочку Jetton. txid в TON — хэш подписанного внешнего сообщения; исходная транзакция находится по хэшу его тела. HTTP 202 означает принятие заявки, не перевод средств. Нужны email/MFA, transfers:create и разрешённая проекту сеть.

Bearer API-ключ проекта15 запросов / 60 с на IP, отдельный счётчик этого маршрута

Права: transfers:create

Параметры запроса

Параметр / типОписание
Idempotency-Keyheader · stringОбязательноСохраните ключ до отправки. Повторяйте неопределённый результат с тем же ключом и теми же параметрами; другой запрос с прежним ключом вернёт 409.
длина ≥ 8 · длина ≤ 100 · pattern: ^[A-Za-z0-9_.:-]{8,100}$

Тело · application/json

Поле / типОписание
fundGasbooleanНеобязательноПри нехватке нативной монеты на временном адресе пополнить её с главного кошелька этого магазина. Только для токенов и адресов без экспорта ключа. На заявку допускается одно пополнение не более недостающей суммы до feeBudget. Главные и архивные главные адреса не пополняются автоматически.
по умолчанию: true
fundingFeeBudgetstringНеобязательноБюджет сетевой комиссии отдельной транзакции пополнения. По умолчанию feeBudget; те же пределы и точность. Пополнение имеет свою плату за заявку и отправку по 0.01 USDT ресурсов.
длина ≤ 80 · pattern: ^\d+(\.\d+)?$
walletIdstringОбязательноID управляемого кошелька вашего проекта в выбранной сети.
длина ≤ 50
assetIdstringОбязательноАктив каталога переводов EVM/TRON/Solana/Sui/XRP/TON, соответствующий сети кошелька.
длина ≤ 180
destinationstringОбязательноАдрес получателя в той же сети; нулевой адрес и исходный адрес запрещены.
длина ≤ 160
destinationTagintegerНеобязательноТолько XRP: Destination Tag получателя. Целое число от 0 до 4294967295; если получателю нужен тег, передайте его явно. Для остальных сетей и /sweeps параметр запрещён.
≥ 0 · ≤ 4294967295
amountstringОбязательноПоложительная сумма в единицах актива, строка без знака, пробелов и экспоненты. Не более decimals дробных знаков и 48 цифр целой части; не более 78 цифр в сумме минимальных единиц.
длина ≤ 80 · pattern: ^\d+(\.\d+)?$
feeBudgetstringОбязательноБюджет сетевой комиссии в НАТИВНОЙ монете (BNB/ETH/TRX/SOL/SUI/XRP/TON), не в токене. >0; ≤100 для TRON, ≤1 для остальных сетей. Точность нативной монеты; maxLength 80. Средства на комиссии нужны на исходном кошельке. В Base проверяется оценка дополнительной L1/operator fee с запасом, но протокол не позволяет жёстко ограничить L1-сбор; итог может измениться до включения в блок.
длина ≤ 80 · pattern: ^\d+(\.\d+)?$

Неизвестные поля в теле отклоняются с HTTP 400.

cURL
curl --fail-with-body --request POST 'https://cryptosha.net/v1/transfers' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY" \
  --header 'Idempotency-Key: order-1049-createTransfer' \
  --header 'Content-Type: application/json' \
  --data '{"walletId":"cw_example","assetId":"bsc:usdt","destination":"0x2222222222222222222222222222222222222222","amount":"12.5","feeBudget":"0.001"}'
202 · Заявка принята в очередь
{
  "id": "tr_example",
  "walletId": "cw_example",
  "assetId": "bsc:usdt",
  "destination": "0x2222222222222222222222222222222222222222",
  "amount": "12.5",
  "status": "queued",
  "sweep": false,
  "txid": null,
  "errorCode": null,
  "createdAt": "2026-09-28 10:10:00.000",
  "requestCost": "0.01",
  "sendCost": "0",
  "replayed": false
}
HTTP-ответы и ошибки
200Повтор: актуальная ранее созданная заявка
202Заявка принята в очередь
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
402Недостаточно доступного баланса ресурсов; code=INSUFFICIENT_RESOURCE_BALANCE.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
409Конфликт Idempotency-Key, исчерпан пул адресов, кошелёк занят или текущее состояние запрещает действие.
413Тело запроса превышает 32768 байт. Ответ внешнего прокси при ещё большем теле может быть не JSON.
415Неподдерживаемый Content-Type. Отправляйте application/json.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

GET/v1/transfers#

Список переводов и сборов

Последние 100 заявок текущего проекта, новые первыми. Включает переводы и сборы. Пагинации и фильтров нет; для долгой истории храните ID и статусы в своей системе. Webhook об исходящих переводах не отправляется — проверяйте GET /v1/transfers/{id}.

Bearer API-ключ проекта120 запросов / 60 с на IP, общий счётчик

Тело запроса не требуется.

cURL
curl --fail-with-body --request GET 'https://cryptosha.net/v1/transfers' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY"
200 · Успешный ответ
{
  "transfers": [
    {
      "id": "tr_example",
      "walletId": "cw_example",
      "assetId": "bsc:usdt",
      "destination": "0x2222222222222222222222222222222222222222",
      "amount": "12.5",
      "status": "queued",
      "sweep": false,
      "txid": null,
      "errorCode": null,
      "createdAt": "2026-09-28 10:10:00.000",
      "requestCost": "0.01",
      "sendCost": "0"
    }
  ]
}
HTTP-ответы и ошибки
200Успешный ответ
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

GET/v1/transfers/{id}#

Состояние перевода

Проверяйте до confirmed или failed_onchain/cancelled. unknown означает, что результат отправки не определён: не создавайте замену с новым Idempotency-Key. txid может существовать до включения в блок. Сервис продолжает проверку той же транзакции.

Bearer API-ключ проекта120 запросов / 60 с на IP, общий счётчик

Параметры запроса

Параметр / типОписание
idpath · stringОбязательноID ресурса, полученный при создании или в списке. Ресурс должен принадлежать проекту API-ключа.

Тело запроса не требуется.

cURL
curl --fail-with-body --request GET 'https://cryptosha.net/v1/transfers/tr_example' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY"
200 · Успешный ответ
{
  "id": "tr_example",
  "walletId": "cw_example",
  "assetId": "bsc:usdt",
  "destination": "0x2222222222222222222222222222222222222222",
  "amount": "12.5",
  "status": "queued",
  "sweep": false,
  "txid": null,
  "errorCode": null,
  "createdAt": "2026-09-28 10:10:00.000",
  "requestCost": "0.01",
  "sendCost": "0"
}
HTTP-ответы и ошибки
200Успешный ответ
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

POST/v1/transfers/{id}/cancel#

Отменить неподписанную заявку

Тело и Idempotency-Key не нужны. Разрешено для queued/blocked, если подпись ещё не сохранена. Повтор отмены возвращает тот же cancelled. Резерв 0.01 USDT освобождается, стоимость принятой заявки не возвращается. После подписи возвращает 409, поскольку отправка уже могла произойти. Требует transfers:create и email/MFA.

Bearer API-ключ проекта120 запросов / 60 с на IP, общий счётчик

Права: transfers:create

Параметры запроса

Параметр / типОписание
idpath · stringОбязательноID ресурса, полученный при создании или в списке. Ресурс должен принадлежать проекту API-ключа.

Тело запроса не требуется.

cURL
curl --fail-with-body --request POST 'https://cryptosha.net/v1/transfers/tr_example/cancel' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY"
200 · Успешный ответ
{
  "id": "tr_example",
  "walletId": "cw_example",
  "assetId": "bsc:usdt",
  "destination": "0x2222222222222222222222222222222222222222",
  "amount": "12.5",
  "status": "cancelled",
  "sweep": false,
  "txid": null,
  "errorCode": null,
  "createdAt": "2026-09-28 10:10:00.000",
  "requestCost": "0.01",
  "sendCost": "0"
}
HTTP-ответы и ошибки
200Успешный ответ
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
409Конфликт Idempotency-Key, исчерпан пул адресов, кошелёк занят или текущее состояние запрещает действие.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

POST/v1/sweeps#

Собрать средства

Сбор с управляемого кошелька на активный главный кошелёк этого магазина в той же сети. Создайте его заранее; для старых проектов без него сохраняется настроенный адрес сбора. Нельзя передавать destination или amount. Адрес назначения фиксируется в заявке и не меняется при смене настроек. Токен отправляется целиком; нативная монета — за вычетом бюджета комиссии. Остаток на gas возможен. XRP-счета сразу получают средства на главный адрес и сбора не требуют. При сборе с отдельного или архивного XRP-кошелька сохраняются сетевой резерв и бюджет комиссии. Оплата счёта сама по себе не запускает сбор. Тарифы и права такие же, как у /v1/transfers.

Bearer API-ключ проекта15 запросов / 60 с на IP, отдельный счётчик этого маршрута

Права: transfers:create

Параметры запроса

Параметр / типОписание
Idempotency-Keyheader · stringОбязательноСохраните ключ до отправки. Повторяйте неопределённый результат с тем же ключом и теми же параметрами; другой запрос с прежним ключом вернёт 409.
длина ≥ 8 · длина ≤ 100 · pattern: ^[A-Za-z0-9_.:-]{8,100}$

Тело · application/json

Поле / типОписание
walletIdstringОбязательноID управляемого кошелька вашего проекта в выбранной сети.
длина ≤ 50
assetIdstringОбязательноАктив каталога переводов EVM/TRON/Solana/Sui/XRP/TON, соответствующий сети кошелька.
длина ≤ 180
feeBudgetstringОбязательноБюджет сетевой комиссии в НАТИВНОЙ монете (BNB/ETH/TRX/SOL/SUI/XRP/TON), не в токене. >0; ≤100 для TRON, ≤1 для остальных сетей. Точность нативной монеты; maxLength 80. Средства на комиссии нужны на исходном кошельке. В Base проверяется оценка дополнительной L1/operator fee с запасом, но протокол не позволяет жёстко ограничить L1-сбор; итог может измениться до включения в блок.
длина ≤ 80 · pattern: ^\d+(\.\d+)?$
fundGasbooleanНеобязательноПри нехватке нативной монеты на временном адресе пополнить её с главного кошелька этого магазина. Только для токенов и адресов без экспорта ключа. На заявку допускается одно пополнение не более недостающей суммы до feeBudget. Главные и архивные главные адреса не пополняются автоматически.
по умолчанию: true
fundingFeeBudgetstringНеобязательноБюджет сетевой комиссии отдельной транзакции пополнения. По умолчанию feeBudget; те же пределы и точность. Пополнение имеет свою плату за заявку и отправку по 0.01 USDT ресурсов.
длина ≤ 80 · pattern: ^\d+(\.\d+)?$

Неизвестные поля в теле отклоняются с HTTP 400.

cURL
curl --fail-with-body --request POST 'https://cryptosha.net/v1/sweeps' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY" \
  --header 'Idempotency-Key: order-1049-createSweep' \
  --header 'Content-Type: application/json' \
  --data '{"walletId":"cw_example","assetId":"bsc:usdt","feeBudget":"0.001"}'
202 · Сбор принят в очередь
{
  "id": "tr_example",
  "walletId": "cw_example",
  "assetId": "bsc:usdt",
  "destination": "0x2222222222222222222222222222222222222222",
  "amount": "max",
  "status": "queued",
  "sweep": true,
  "txid": null,
  "errorCode": null,
  "createdAt": "2026-09-28 10:10:00.000",
  "requestCost": "0.01",
  "sendCost": "0",
  "replayed": false
}
HTTP-ответы и ошибки
200Повтор: прежняя заявка на сбор
202Сбор принят в очередь
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
402Недостаточно доступного баланса ресурсов; code=INSUFFICIENT_RESOURCE_BALANCE.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
409Конфликт Idempotency-Key, исчерпан пул адресов, кошелёк занят или текущее состояние запрещает действие.
413Тело запроса превышает 32768 байт. Ответ внешнего прокси при ещё большем теле может быть не JSON.
415Неподдерживаемый Content-Type. Отправляйте application/json.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

POST/v1/broadcast#

Опубликовать подписанную транзакцию

Для транзакций, которые подписаны вашим кошельком. Сервис не меняет и не подписывает их. Проверяет формат и сеть; одна и та же каноническая транзакция в проекте не тарифицируется повторно. 0.01 USDT за заявку, 0.01 за принятие сетью. Неопределённый результат удерживает резерв. submitted не является подтверждением в блокчейне; этот метод не отслеживает финальность. Нужны email/MFA и включённая сеть; дополнительного custody-права не требуется.

Bearer API-ключ проекта15 запросов / 60 с на IP, отдельный счётчик этого маршрута

Параметры запроса

Параметр / типОписание
Idempotency-Keyheader · stringОбязательноСохраните ключ до отправки. Повторяйте неопределённый результат с тем же ключом и теми же параметрами; другой запрос с прежним ключом вернёт 409.
длина ≥ 8 · длина ≤ 100 · pattern: ^[A-Za-z0-9_.:-]{8,100}$

Тело · application/json

Поле / типОписание
chainstringОбязательноСеть с включённой отправкой для проекта. EVM, TRON, UTXO, XRP или Solana; TON и SUI не поддержаны этим методом.
signedTransactionstringОбязательноУже подписанная транзакция: EVM — 0x-prefixed hex (chainId должен совпадать); UTXO/XRP — hex без 0x; Solana — base64; TRON — JSON, закодированный строкой, с signature, raw_data_hex и txID. Не передавайте приватные ключи.
длина ≥ 10 · длина ≤ 30000

Неизвестные поля в теле отклоняются с HTTP 400.

cURL
curl --fail-with-body --request POST 'https://cryptosha.net/v1/broadcast' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY" \
  --header 'Idempotency-Key: order-1049-broadcastTransaction' \
  --header 'Content-Type: application/json' \
  --data '{"chain":"bsc","signedTransaction":"0xSIGNED_TRANSACTION_FROM_YOUR_WALLET"}'
202 · processing или unknown: результат ещё не определён
{
  "id": "br_example",
  "status": "unknown",
  "requestCost": "0.01",
  "sendCost": "0",
  "reserved": "0.01"
}
HTTP-ответы и ошибки
200Результат submitted или rejected
202processing или unknown: результат ещё не определён
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
402Недостаточно доступного баланса ресурсов; code=INSUFFICIENT_RESOURCE_BALANCE.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
409Конфликт Idempotency-Key, исчерпан пул адресов, кошелёк занят или текущее состояние запрещает действие.
413Тело запроса превышает 32768 байт. Ответ внешнего прокси при ещё большем теле может быть не JSON.
415Неподдерживаемый Content-Type. Отправляйте application/json.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

GET/v1/broadcast/{id}#

Результат публикации

Возвращает состояние сохранённой заявки. Сам GET не запускает повторную отправку. При unknown повторяйте исходный POST с прежним ключом и теми же подписанными байтами. submitted подтверждает принятие сетью, а не исполнение транзакции.

Bearer API-ключ проекта120 запросов / 60 с на IP, общий счётчик

Параметры запроса

Параметр / типОписание
idpath · stringОбязательноID ресурса, полученный при создании или в списке. Ресурс должен принадлежать проекту API-ключа.

Тело запроса не требуется.

cURL
curl --fail-with-body --request GET 'https://cryptosha.net/v1/broadcast/br_example' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY"
200 · Успешный ответ
{
  "id": "br_example",
  "status": "unknown",
  "requestCost": "0.01",
  "sendCost": "0",
  "reserved": "0.01"
}
HTTP-ответы и ошибки
200Успешный ответ
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

GET/v1/balance#

Баланс и тарифы

Баланс оплаты ресурсов общий для проектов одного аккаунта в одном режиме (live/test). Это не баланс криптовалюты на ваших адресах и не выручка. available учитывает резервы. Тарифы возвращаются вместе с балансом; пополнение выполняется в кабинете.

Bearer API-ключ проекта120 запросов / 60 с на IP, общий счётчик

Тело запроса не требуется.

cURL
curl --fail-with-body --request GET 'https://cryptosha.net/v1/balance' \
  --header "Authorization: Bearer $CRYPTOSHA_API_KEY"
200 · Успешный ответ
{
  "balance": "5",
  "reserved": "0.01",
  "available": "4.99",
  "currency": "USDT",
  "testMode": false,
  "rates": [
    {
      "kind": "tracking",
      "label": "Заявка на отслеживание",
      "detail": "Один раз при создании счёта; дальнейшие проверки включены",
      "price": "0.01"
    },
    {
      "kind": "send_request",
      "label": "Заявка на отправку",
      "detail": "Когда проверенная заявка принята в обработку",
      "price": "0.01"
    },
    {
      "kind": "send",
      "label": "Отправка транзакции",
      "detail": "Когда сеть приняла подписанную транзакцию",
      "price": "0.01"
    },
    {
      "kind": "webhook",
      "label": "IPN / WebHook",
      "detail": "За уведомление; автоматические повторы бесплатны",
      "price": "0.01"
    }
  ]
}
HTTP-ответы и ошибки
200Успешный ответ
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
401API-ключ отсутствует, неверен или отозван.
403Недостаточно прав ключа, не подтверждён email/MFA или запрещён режим работы.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

GET/checkout-api/{token}#

Данные платёжной ссылки

Без API-ключа: доступ предоставляет 43-символьный токен из checkout_url. Не путайте с ID счёта. Здесь используется camelCase; address/memo/paymentUri отсутствуют, когда оплата закрыта. Для собственного checkout предпочтительно получать /v1/invoices/{id} с вашего сервера и выдавать покупателю только данные его заказа. Межсайтовый CORS не предоставляется.

Без API-ключа120 запросов / 60 с на IP, общий счётчик

Параметры запроса

Параметр / типОписание
tokenpath · stringОбязательноТокен доступа из ссылки /pay/{token}; не сохраняйте в публичных логах.
длина ≥ 43 · длина ≤ 43 · pattern: ^[A-Za-z0-9_-]{43}$

Тело запроса не требуется.

cURL
curl --fail-with-body --request GET 'https://cryptosha.net/checkout-api/YOUR_CHECKOUT_TOKEN'
200 · Успешный ответ
{
  "id": "inv_example",
  "orderId": "order-1049",
  "description": "Подписка Pro",
  "assetId": "bsc:usdt",
  "status": "pending",
  "amount": "12.5",
  "received": "0",
  "remaining": "12.5",
  "expiresAt": "2026-09-28T10:30:00.000Z",
  "confirmations": 0,
  "requiredConfirmations": 15,
  "brandName": "Ваш магазин",
  "brandColor": "#b8ec69",
  "testMode": false,
  "localMode": false,
  "canPay": true,
  "asset": {
    "id": "bsc:usdt",
    "chain": "bsc",
    "symbol": "USDT",
    "decimals": 18,
    "contract": "0x55d398326f99059ff775485246999027b3197955"
  },
  "address": "0x1111111111111111111111111111111111111111",
  "paymentUri": "0x1111111111111111111111111111111111111111"
}
HTTP-ответы и ошибки
200Успешный ответ
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
404Объект не найден в проекте данного ключа либо неверен токен ссылки.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

GET/status-api/rpc#

Доступность сетей

Обезличенные измерения сети, без служебных адресов и поставщиков. Снимок кешируется до 15 секунд. 24h — 96 интервалов по 15 минут; 7d — 84 по 2 часа; 30d — 90 по 8 часов. Зелёный график не подтверждает успешный приём, сбор или вывод. Для доступности конкретному проекту используйте /v1/assets.

Без API-ключа60 запросов / 60 с на IP, отдельный счётчик этого маршрута

Параметры запроса

Параметр / типОписание
periodquery · stringНеобязательноОкно истории.
24h7d30d
по умолчанию: "24h"

Тело запроса не требуется.

cURL
curl --fail-with-body --request GET 'https://cryptosha.net/status-api/rpc'
200 · Успешный ответ
{
  "generatedAt": "2026-09-28T10:00:00.000Z",
  "period": "24h",
  "intervalMs": 60000,
  "staleAfterMs": 180000,
  "windowStart": "2026-09-27T10:15:00.000Z",
  "windowEnd": "2026-09-28T10:15:00.000Z",
  "barMs": 900000,
  "chains": []
}
HTTP-ответы и ошибки
200Успешный ответ
400Некорректные поля, JSON, сумма, адрес или неподдерживаемая операция.
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

GET/healthz#

Проверка API

Лёгкая проверка API и соединения с базой. Не проверяет входящие платежи, очереди или отправку средств. /health без Accept: text/html возвращает тот же JSON; в браузере /health — страница доступности.

Без API-ключа120 запросов / 60 с на IP, общий счётчик

Тело запроса не требуется.

cURL
curl --fail-with-body --request GET 'https://cryptosha.net/healthz'
200 · Успешный ответ
{
  "status": "ok"
}
HTTP-ответы и ошибки
200Успешный ответ
429Превышен лимит. На уровне приложения ответ JSON и Retry-After в секундах; внешний прокси может вернуть HTML без этого заголовка.
503Временная недоступность, сеть не включена для проекта или платёжная инфраструктура не готова.

Формат ошибки: Error. Заголовки частоты: лимиты запросов.

DATA MODELS

Модели данных

Нажмите на имя модели, чтобы увидеть все поля. «Всегда» — поле присутствует в ответе; «Условно» — зависит от операции или состояния. null указан явно в типе.

MainWalletПолей: 14
Поле / типОписание
idstringВсегдаID управляемого кошелька.
merchantIdstringВсегдаID магазина, которому принадлежит кошелёк.
chainstringВсегдаСеть.
addressstringВсегдаАдрес для ручного пополнения и сборов.
statusstringВсегдаСостояние главного кошелька.
activearchived
archivedAtstring | null · date-timeВсегдаВремя замены на новый адрес.
createdAtstring · date-timeВсегдаВремя создания.
balancesarray<object>ВсегдаКеш балансов; пуст до первого обновления или проверки активации XRP.
balanceCheckedAtstring | null · date-timeВсегдаВремя последнего успешного обновления.
balanceErrorstring | nullВсегдаBALANCE_UNAVAILABLE при сбое. Прежний баланс сохраняется.
refreshAfterstring | null · date-timeВсегдаРаньше этого времени повторный POST вернёт кеш без обращения к сети.
refreshingbooleanВсегдаПредыдущая проверка ещё выполняется.
cachedbooleanУсловноТолько в ответе обновления: повтор использовал кеш.
replayedbooleanУсловноТолько в ответе создания: повтор с тем же Idempotency-Key.
MainWalletListПолей: 1
Поле / типОписание
walletsarray<MainWallet>ВсегдаГлавные кошельки текущего магазина, включая архив; до 200: сначала активные, затем архивные, новые первыми в каждой группе.
MainWalletBulkПолей: 2
Поле / типОписание
createdarray<string>ВсегдаСети, для которых созданы новые главные адреса.
walletsarray<MainWallet>ВсегдаВсе активные главные кошельки текущего магазина после операции.
CreateMainWalletПолей: 2
Поле / типОписание
chainstringОбязательноВключённая сеть EVM, TRON, Solana, Sui или XRP.
длина ≤ 40
replaceWalletIdstringНеобязательноДля замены обязательно передайте ID текущего активного кошелька. При первом создании не передавайте.
длина ≤ 50

Неизвестные поля в теле отклоняются с HTTP 400.

AssetПолей: 6
Поле / типОписание
idstringВсегдаИдентификатор актива. Берите из GET /v1/assets; не составляйте по символу валюты.
chainstringВсегдаИдентификатор сети.
symbolstringВсегдаТикер актива; не уникален между сетями.
namestringВсегдаПолное название актива.
decimalsintegerВсегдаКоличество знаков после запятой; 1 токен = 10^decimals минимальных единиц.
≥ 0 · ≤ 255
contractstring | nullВсегдаАдрес контракта или идентификатор токена. null для нативной монеты.
InvoiceAssetПолей: 7
Поле / типОписание
idstringВсегдаИдентификатор актива. Берите из GET /v1/assets; не составляйте по символу валюты.
chainstringВсегдаИдентификатор сети.
symbolstringВсегдаТикер актива; не уникален между сетями.
namestringВсегдаПолное название актива.
decimalsintegerВсегдаКоличество знаков после запятой; 1 токен = 10^decimals минимальных единиц.
≥ 0 · ≤ 255
contractstring | nullВсегдаАдрес контракта или идентификатор токена. null для нативной монеты.
chain_idinteger | nullВсегдаEVM chainId для кошелька (например, 56 для BSC); null для других сетей.
≥ 0
CreateInvoiceПолей: 5
Поле / типОписание
orderIdstringОбязательноID заказа вашей системы. Может повторяться; для защиты от дублей нужен Idempotency-Key.
длина ≥ 1 · длина ≤ 100
descriptionstringНеобязательноОписание заказа.
длина ≤ 300 · по умолчанию: ""
assetIdstringОбязательноТочное значение id из GET /v1/assets для вашего проекта.
длина ≥ 1 · длина ≤ 180
amountstringОбязательноПоложительная сумма в единицах актива, строка без знака, пробелов и экспоненты. Не более decimals дробных знаков и 48 цифр целой части; не более 78 цифр в сумме минимальных единиц.
длина ≤ 80 · pattern: ^\d+(\.\d+)?$
expiresInintegerНеобязательноСрок оплаты от момента создания, в секундах.
≥ 300 · ≤ 86400 · по умолчанию: 1800

Неизвестные поля в теле отклоняются с HTTP 400.

InvoiceПолей: 22
Поле / типОписание
idstringВсегдаID счёта в CRYPTOSHA.
order_idstringВсегдаВаш orderId, переданный при создании. Не является уникальным ключом операции.
descriptionstringВсегдаОписание заказа; пустая строка, если не задано.
statusstringВсегдаСостояние счёта; обработка каждого значения описана в разделе «Статусы».
pendingconfirmingpaidunderpaidoverpaidexpiredlatereviewcancelled
status_versionintegerВсегдаВерсия состояния. Сравнивайте с data.version в webhook; более старые события не должны перезаписывать новые.
≥ 0
resolutionstring | nullВсегдаРешение продавца по спорному платежу. Само по себе не изменяет статус и не переводит средства.
openacceptedrejectedrefund_requestedrefund_recordednull
asset_idstringВсегдаID выбранного актива.
assetInvoiceAssetВсегдаАктив, сеть, точность и контракт, необходимые для вашей формы оплаты.
amountstringВсегдаПолная запрошенная сумма в выбранном активе.
pattern: ^\d+(\.\d+)?$
receivedstringВсегдаСумма найденных валидных поступлений, включая ещё не подтверждённые. Не используйте её вместо status для выдачи заказа.
pattern: ^\d+(\.\d+)?$
remainingstringВсегдаmax(amount − received, 0). Сумма доплаты; точная десятичная строка.
pattern: ^\d+(\.\d+)?$
addressstring | nullВсегдаИсходный адрес получения. Сохраняется и после завершения счёта для сверки. null в песочнице; показывайте для оплаты только при can_pay=true.
memostring | nullВсегдаОбязательная метка/комментарий, если не null: XRP Destination Tag или TON comment. Передавайте без изменения вместе с адресом.
payment_uristring | nullВсегдаДанные для QR. Могут быть обычным адресом, а не URL. UTXO URI включает remaining, XRP X-address включает tag, TON URI включает сумму и comment. Для EVM это только адрес: сеть, токен и сумму передавайте отдельно. null, если can_pay=false.
can_paybooleanВсегдаtrue только для реального неоплаченного/недоплаченного счёта до expires_at с remaining>0 и без отмены. Пересчитывается при каждом ответе.
test_modebooleanВсегдаtrue означает симуляцию: реального платежа нет, address/memo/payment_uri равны null, can_pay=false.
confirmationsintegerВсегдаЧисло подтверждений, учитываемое для текущего набора поступлений. Ориентируйтесь на status, а не только на счётчик.
≥ 0
required_confirmationsintegerВсегдаТребуемое для счёта количество подтверждений.
≥ 0
checkout_urlstring · uriВсегдаГотовая платёжная ссылка. Секретный токен в URL даёт доступ к этому счёту; передавайте только соответствующему покупателю.
created_atstring · date-timeВсегдаВремя создания в UTC, ISO 8601.
expires_atstring · date-timeВсегдаСрок оплаты в UTC, ISO 8601. После него не показывайте новые инструкции по оплате, даже если status ещё pending.
wallet_idstringУсловноID управляемого кошелька для сбора через /v1/sweeps. Поле отсутствует для импортированных адресов и общих адресов с memo.
ListedInvoiceПолей: 35
Поле / типОписание
idstringВсегдаID счёта в CRYPTOSHA.
order_idstringВсегдаВаш orderId, переданный при создании. Не является уникальным ключом операции.
descriptionstringВсегдаОписание заказа; пустая строка, если не задано.
statusstringВсегдаСостояние счёта; обработка каждого значения описана в разделе «Статусы».
pendingconfirmingpaidunderpaidoverpaidexpiredlatereviewcancelled
status_versionintegerВсегдаВерсия состояния. Сравнивайте с data.version в webhook; более старые события не должны перезаписывать новые.
≥ 0
resolutionstring | nullВсегдаРешение продавца по спорному платежу. Само по себе не изменяет статус и не переводит средства.
openacceptedrejectedrefund_requestedrefund_recordednull
asset_idstringВсегдаID выбранного актива.
assetInvoiceAssetВсегдаАктив, сеть, точность и контракт, необходимые для вашей формы оплаты.
amountstringВсегдаПолная запрошенная сумма в выбранном активе.
pattern: ^\d+(\.\d+)?$
receivedstringВсегдаСумма найденных валидных поступлений, включая ещё не подтверждённые. Не используйте её вместо status для выдачи заказа.
pattern: ^\d+(\.\d+)?$
remainingstringВсегдаmax(amount − received, 0). Сумма доплаты; точная десятичная строка.
pattern: ^\d+(\.\d+)?$
addressstring | nullВсегдаИсходный адрес получения. Сохраняется и после завершения счёта для сверки. null в песочнице; показывайте для оплаты только при can_pay=true.
memostring | nullВсегдаОбязательная метка/комментарий, если не null: XRP Destination Tag или TON comment. Передавайте без изменения вместе с адресом.
payment_uristring | nullВсегдаДанные для QR. Могут быть обычным адресом, а не URL. UTXO URI включает remaining, XRP X-address включает tag, TON URI включает сумму и comment. Для EVM это только адрес: сеть, токен и сумму передавайте отдельно. null, если can_pay=false.
can_paybooleanВсегдаtrue только для реального неоплаченного/недоплаченного счёта до expires_at с remaining>0 и без отмены. Пересчитывается при каждом ответе.
test_modebooleanВсегдаtrue означает симуляцию: реального платежа нет, address/memo/payment_uri равны null, can_pay=false.
confirmationsintegerВсегдаЧисло подтверждений, учитываемое для текущего набора поступлений. Ориентируйтесь на status, а не только на счётчик.
≥ 0
required_confirmationsintegerВсегдаТребуемое для счёта количество подтверждений.
≥ 0
checkout_urlstring · uriВсегдаГотовая платёжная ссылка. Секретный токен в URL даёт доступ к этому счёту; передавайте только соответствующему покупателю.
created_atstring · date-timeВсегдаВремя создания в UTC, ISO 8601.
expires_atstring · date-timeВсегдаСрок оплаты в UTC, ISO 8601. После него не показывайте новые инструкции по оплате, даже если status ещё pending.
wallet_idstringУсловноID управляемого кошелька для сбора через /v1/sweeps. Поле отсутствует для импортированных адресов и общих адресов с memo.
orderIdstringУсловно · legacyПоле совместимости только в списке счетов. Используйте order_id.
assetIdstringУсловно · legacyПоле совместимости только в списке счетов. Используйте asset_id.
testModebooleanУсловно · legacyПоле совместимости только в списке счетов. Используйте test_mode.
createdAtstring · date-timeУсловно · legacyПоле совместимости только в списке счетов. Используйте created_at.
expiresAtstring · date-timeУсловно · legacyПоле совместимости только в списке счетов. Используйте expires_at.
checkoutUrlstringУсловно · legacyПоле совместимости только в списке счетов. Используйте checkout_url.
requiredConfirmationsintegerУсловно · legacyПоле совместимости только в списке счетов. Используйте required_confirmations.
≥ 0
resolutionNotestring | nullУсловноПримечание продавца к решению по спорному платежу; поле списка.
lastCheckedAtstring | null · date-timeУсловноВремя последней проверки платежа; поле списка.
lastErrorstring | nullУсловноОбобщённый код последней ошибки проверки; поле списка. Служебные адреса не возвращаются.
recheckRequestedbooleanУсловноЗапрошена повторная проверка из кабинета; поле списка.
monitoringArchivedbooleanУсловноАвтоматическая проверка адреса остановлена. Для позднего перевода запустите повторную проверку счета в кабинете; поле списка.
cancelledAtstring | null · date-timeУсловноВремя отмены счёта; поле списка.
InvoiceListПолей: 4
Поле / типОписание
invoicesarray<ListedInvoice>ВсегдаСчета: сначала новые, затем ID по убыванию для одинакового времени.
элементов ≤ 100
totalintegerВсегдаВсего счетов с учётом фильтра.
≥ 0
limitintegerВсегдаРазмер страницы.
≥ 1 · ≤ 100
offsetintegerВсегдаСмещение.
≥ 0 · ≤ 1000000
AssetListПолей: 1
Поле / типОписание
assetsarray<Asset>ВсегдаТолько активы, доступные для приёма именно вашему проекту. Пустой массив — сейчас нет доступных активов.
OkПолей: 1
Поле / типОписание
okbooleanВсегдаtrue при успешном выполнении.
CreateAddressПолей: 2
Поле / типОписание
chainstringОбязательноИдентификатор сети семейства EVM, TRON, Solana, Sui или XRP.
длина ≤ 40
returnPrivateKeybooleanНеобязательноВыдать приватный ключ один раз в первом успешном ответе. Требует дополнительного права wallets:export.
по умолчанию: false

Неизвестные поля в теле отклоняются с HTTP 400.

AddressПолей: 6
Поле / типОписание
idstringВсегдаID управляемого кошелька, используется как walletId.
chainstringВсегдаИдентификатор сети.
addressstringВсегдаПубличный адрес.
keyFormatstringВсегдаФормат ключа; XRP использует family seed, TON — 32-байтный seed кошелька V4R2.
secp256k1-hexed25519-seed-hexxrpl-family-seedton-v4r2-seed-hex
keyExportedbooleanВсегдаЗапрашивался ли экспорт ключа при создании.
createdAtstringУсловноВремя UTC в формате YYYY-MM-DD HH:mm:ss.SSS. Присутствует в списке и при повторе; первый ответ может не содержать поле.
AddressCreatedПолей: 9
Поле / типОписание
idstringВсегдаID кошелька.
chainstringВсегдаСеть.
addressstringВсегдаПубличный адрес.
keyFormatstringВсегдаФормат ключа; XRP использует family seed, TON — 32-байтный seed кошелька V4R2.
secp256k1-hexed25519-seed-hexxrpl-family-seedton-v4r2-seed-hex
keyExportedbooleanВсегдаБыл запрошен экспорт ключа.
createdAtstringУсловноВремя UTC YYYY-MM-DD HH:mm:ss.SSS; первый ответ может не содержать поле.
replayedbooleanВсегдаfalse для первого создания, true при повторе.
privateKeystringУсловноТолько при returnPrivateKey=true в первом ответе. Формат задаётся keyFormat: XRP — строка family seed, остальные — 32 байта hex с 0x. Никогда не сохраняйте в логах и не передавайте в браузер. Для TRON при импорте может требоваться убрать 0x.
keyDeliverystringУсловноПри запросе экспорта: one_time в первом ответе; not_repeated в повторном. Если первый ответ потерян, ключ повторно не выдаётся.
one_timenot_repeated
AddressListПолей: 1
Поле / типОписание
addressesarray<Address>ВсегдаПоследние 100 адресов, новые первыми; пагинации нет.
элементов ≤ 100
CreateTransferПолей: 8
Поле / типОписание
fundGasbooleanНеобязательноПри нехватке нативной монеты на временном адресе пополнить её с главного кошелька этого магазина. Только для токенов и адресов без экспорта ключа. На заявку допускается одно пополнение не более недостающей суммы до feeBudget. Главные и архивные главные адреса не пополняются автоматически.
по умолчанию: true
fundingFeeBudgetstringНеобязательноБюджет сетевой комиссии отдельной транзакции пополнения. По умолчанию feeBudget; те же пределы и точность. Пополнение имеет свою плату за заявку и отправку по 0.01 USDT ресурсов.
длина ≤ 80 · pattern: ^\d+(\.\d+)?$
walletIdstringОбязательноID управляемого кошелька вашего проекта в выбранной сети.
длина ≤ 50
assetIdstringОбязательноАктив каталога переводов EVM/TRON/Solana/Sui/XRP/TON, соответствующий сети кошелька.
длина ≤ 180
destinationstringОбязательноАдрес получателя в той же сети; нулевой адрес и исходный адрес запрещены.
длина ≤ 160
destinationTagintegerНеобязательноТолько XRP: Destination Tag получателя. Целое число от 0 до 4294967295; если получателю нужен тег, передайте его явно. Для остальных сетей и /sweeps параметр запрещён.
≥ 0 · ≤ 4294967295
amountstringОбязательноПоложительная сумма в единицах актива, строка без знака, пробелов и экспоненты. Не более decimals дробных знаков и 48 цифр целой части; не более 78 цифр в сумме минимальных единиц.
длина ≤ 80 · pattern: ^\d+(\.\d+)?$
feeBudgetstringОбязательноБюджет сетевой комиссии в НАТИВНОЙ монете (BNB/ETH/TRX/SOL/SUI/XRP/TON), не в токене. >0; ≤100 для TRON, ≤1 для остальных сетей. Точность нативной монеты; maxLength 80. Средства на комиссии нужны на исходном кошельке. В Base проверяется оценка дополнительной L1/operator fee с запасом, но протокол не позволяет жёстко ограничить L1-сбор; итог может измениться до включения в блок.
длина ≤ 80 · pattern: ^\d+(\.\d+)?$

Неизвестные поля в теле отклоняются с HTTP 400.

CreateSweepПолей: 5
Поле / типОписание
walletIdstringОбязательноID управляемого кошелька вашего проекта в выбранной сети.
длина ≤ 50
assetIdstringОбязательноАктив каталога переводов EVM/TRON/Solana/Sui/XRP/TON, соответствующий сети кошелька.
длина ≤ 180
feeBudgetstringОбязательноБюджет сетевой комиссии в НАТИВНОЙ монете (BNB/ETH/TRX/SOL/SUI/XRP/TON), не в токене. >0; ≤100 для TRON, ≤1 для остальных сетей. Точность нативной монеты; maxLength 80. Средства на комиссии нужны на исходном кошельке. В Base проверяется оценка дополнительной L1/operator fee с запасом, но протокол не позволяет жёстко ограничить L1-сбор; итог может измениться до включения в блок.
длина ≤ 80 · pattern: ^\d+(\.\d+)?$
fundGasbooleanНеобязательноПри нехватке нативной монеты на временном адресе пополнить её с главного кошелька этого магазина. Только для токенов и адресов без экспорта ключа. На заявку допускается одно пополнение не более недостающей суммы до feeBudget. Главные и архивные главные адреса не пополняются автоматически.
по умолчанию: true
fundingFeeBudgetstringНеобязательноБюджет сетевой комиссии отдельной транзакции пополнения. По умолчанию feeBudget; те же пределы и точность. Пополнение имеет свою плату за заявку и отправку по 0.01 USDT ресурсов.
длина ≤ 80 · pattern: ^\d+(\.\d+)?$

Неизвестные поля в теле отклоняются с HTTP 400.

TransferПолей: 18
Поле / типОписание
destinationTagintegerУсловноDestination Tag для XRP; поле отсутствует, если не задан.
≥ 0 · ≤ 4294967295
purposestringУсловноНазначение операции.
transfergas_funding
parentTransferIdstring | nullУсловноID перевода, для которого выдана комиссия. null для обычного перевода.
gasFundingbooleanУсловноУ заявки есть зафиксированный главный кошелёк для возможного пополнения комиссии.
idstringВсегдаID заявки.
walletIdstringВсегдаИсходный управляемый кошелёк.
assetIdstringВсегдаАктив перевода.
destinationstringВсегдаПолучатель, зафиксированный при создании заявки.
amountstringВсегдаЗапрошенная сумма или строка max для сбора всего доступного остатка.
sentAmountstringУсловноФактическая подготовленная сумма; отсутствует до подготовки. Наличие не означает подтверждение.
pattern: ^\d+(\.\d+)?$
statusstringВсегдаСостояние обработки; только confirmed подтверждает выполнение.
queuedblockedsignedunknownsubmittedconfirmedfailed_onchaincancelled
sweepbooleanВсегдаtrue для сбора через /v1/sweeps.
txidstring | nullВсегдаХеш транзакции. Может быть известен до отправки; сам по себе не доказывает поступление.
errorCodestring | nullВсегдаКод препятствия/ошибки; перечень и действия — в разделе ошибок.
createdAtstringВсегдаВремя создания UTC, YYYY-MM-DD HH:mm:ss.SSS.
requestCoststringВсегдаСтоимость принятой заявки, USDT.
pattern: ^\d+(\.\d+)?$
sendCoststringВсегдаСтоимость отправки, USDT. 0.01 для submitted/confirmed/failed_onchain, иначе 0.
pattern: ^\d+(\.\d+)?$
replayedbooleanУсловноТолько в ответе на POST /transfers или /sweeps: признак повтора.
TransferListПолей: 1
Поле / типОписание
transfersarray<Transfer>ВсегдаПоследние 100 заявок, включая сборы; новые первыми, пагинации нет.
элементов ≤ 100
BroadcastInputПолей: 2
Поле / типОписание
chainstringОбязательноСеть с включённой отправкой для проекта. EVM, TRON, UTXO, XRP или Solana; TON и SUI не поддержаны этим методом.
signedTransactionstringОбязательноУже подписанная транзакция: EVM — 0x-prefixed hex (chainId должен совпадать); UTXO/XRP — hex без 0x; Solana — base64; TRON — JSON, закодированный строкой, с signature, raw_data_hex и txID. Не передавайте приватные ключи.
длина ≥ 10 · длина ≤ 30000

Неизвестные поля в теле отклоняются с HTTP 400.

BroadcastПолей: 6
Поле / типОписание
idstringВсегдаID заявки на публикацию.
statusstringВсегдаsubmitted означает принятие сетью, а не финальное подтверждение. unknown — результат неизвестен; processing — обработка; rejected — отклонено.
processingunknownsubmittedrejected
txidstringУсловноХеш транзакции, если известен.
requestCoststringВсегдаСтоимость заявки, USDT.
pattern: ^\d+(\.\d+)?$
sendCoststringВсегда0.01 USDT для submitted, иначе 0.
pattern: ^\d+(\.\d+)?$
reservedstringВсегда0.01 USDT при processing/unknown, иначе 0.
pattern: ^\d+(\.\d+)?$
RateПолей: 4
Поле / типОписание
kindstringВсегдаВид оплачиваемого действия.
sendtrackingsend_requestwebhook
labelstringВсегдаНазвание.
detailstringВсегдаКогда начисляется стоимость.
pricestringВсегдаСтоимость в USDT.
pattern: ^\d+(\.\d+)?$
BalanceПолей: 6
Поле / типОписание
balancestringВсегдаУчётный баланс ресурсов, USDT, до вычета резерва. Десятичная строка; может быть отрицательной после корректировки поступлений.
pattern: ^-?\d+(\.\d+)?$
reservedstringВсегдаРезерв на незавершённые отправки.
pattern: ^\d+(\.\d+)?$
availablestringВсегдаbalance − reserved; может быть отрицательной строкой.
currencystringВсегдаВалюта ресурсов.
USDT
testModebooleanВсегдаРесурсы песочницы; не реальные средства.
ratesarray<Rate>ВсегдаТекущие тарифы сервиса.
ValidationFieldПолей: 2
Поле / типОписание
patharray<string | integer>ВсегдаПуть до неверного поля, включая индексы массива.
messagestringВсегдаОписание нарушения.
ErrorПолей: 8
Поле / типОписание
errorstringВсегдаСообщение для человека; формулировка может изменяться.
codestringУсловноМашинный код, если определён. Не все ошибки имеют code.
fieldsarray<ValidationField>УсловноДетали ошибок валидации, если доступны.
requestIdstringУсловноВ конфликте broadcast с той же транзакцией и новым ключом — ID исходной заявки. Продолжайте с исходным Idempotency-Key.
balancestringУсловноВ ошибке 402 — баланс ресурсов.
availablestringУсловноВ ошибке 402 — доступные ресурсы.
reservedstringУсловноВ ошибке 402 — резерв.
currencystringУсловноВ ошибке 402 — USDT.
WebhookDataПолей: 9
Поле / типОписание
invoice_idstringВсегдаID счёта.
test_modebooleanВсегдаСимуляция, не реальная оплата.
order_idstringВсегдаНомер вашего заказа.
statusstringВсегдаСтатус на момент события.
pendingconfirmingpaidunderpaidoverpaidexpiredlatereviewcancelled
amountstringВсегдаСумма счёта.
pattern: ^\d+(\.\d+)?$
receivedstringВсегдаСумма валидных поступлений, включая неподтверждённые.
pattern: ^\d+(\.\d+)?$
asset_idstringВсегдаID актива.
versionintegerВсегдаМонотонная версия состояния конкретного счёта.
≥ 0
resolutionstring | nullВсегдаРешение продавца по спорному платежу. Само по себе не изменяет статус и не переводит средства.
openacceptedrejectedrefund_requestedrefund_recordednull
WebhookEventПолей: 4
Поле / типОписание
idstringВсегдаУникальный ID события, постоянный при повторной доставке.
typestringВсегдаinvoice.<status> либо invoice.reviewed после решения продавца.
invoice.pendinginvoice.confirminginvoice.paidinvoice.underpaidinvoice.overpaidinvoice.expiredinvoice.lateinvoice.reviewinvoice.cancelledinvoice.reviewed
created_atstring · date-timeВсегдаВремя создания события (не время конкретной попытки доставки).
dataWebhookDataВсегдаСтруктура описана в связанной модели.
CheckoutAssetПолей: 5
Поле / типОписание
idstringВсегдаИдентификатор актива. Берите из GET /v1/assets; не составляйте по символу валюты.
chainstringВсегдаИдентификатор сети.
symbolstringВсегдаТикер актива; не уникален между сетями.
decimalsintegerВсегдаКоличество знаков после запятой; 1 токен = 10^decimals минимальных единиц.
≥ 0 · ≤ 255
contractstringУсловноИдентификатор токена, отсутствует у нативной монеты.
CheckoutПолей: 20
Поле / типОписание
idstringВсегдаID счёта в CRYPTOSHA.
orderIdstringВсегдаВаш orderId, переданный при создании. Не является уникальным ключом операции.
descriptionstringВсегдаОписание заказа; пустая строка, если не задано.
assetIdstringВсегдаID выбранного актива.
statusstringВсегдаСостояние счёта; обработка каждого значения описана в разделе «Статусы».
pendingconfirmingpaidunderpaidoverpaidexpiredlatereviewcancelled
amountstringВсегдаПолная запрошенная сумма в выбранном активе.
pattern: ^\d+(\.\d+)?$
receivedstringВсегдаСумма найденных валидных поступлений, включая ещё не подтверждённые. Не используйте её вместо status для выдачи заказа.
pattern: ^\d+(\.\d+)?$
remainingstringВсегдаmax(amount − received, 0). Сумма доплаты; точная десятичная строка.
pattern: ^\d+(\.\d+)?$
expiresAtstring · date-timeВсегдаСрок оплаты в UTC, ISO 8601. После него не показывайте новые инструкции по оплате, даже если status ещё pending.
confirmationsintegerВсегдаЧисло подтверждений, учитываемое для текущего набора поступлений. Ориентируйтесь на status, а не только на счётчик.
≥ 0
requiredConfirmationsintegerВсегдаТребуемое для счёта количество подтверждений.
≥ 0
brandNamestringВсегдаНазвание проекта.
brandColorstringВсегдаЦвет проекта, #RRGGBB.
testModebooleanВсегдаtrue означает симуляцию: реального платежа нет, address/memo/payment_uri равны null, can_pay=false.
localModebooleanВсегдаПризнак локального окружения; не показатель оплаты.
canPaybooleanВсегдаtrue только для реального неоплаченного/недоплаченного счёта до expires_at с remaining>0 и без отмены. Пересчитывается при каждом ответе.
assetCheckoutAssetВсегдаСтруктура описана в связанной модели.
addressstringУсловноТолько при canPay=true. При остальных состояниях отсутствует.
memostringУсловноМетка платежа, если требуется; только при canPay=true.
paymentUristringУсловноДанные QR, только при canPay=true; те же правила, что payment_uri счёта.
HealthBarПолей: 4
Поле / типОписание
atstring · date-timeВсегдаНачало интервала UTC.
samplesintegerВсегдаКоличество проверок.
≥ 0
failuresintegerВсегдаКоличество неудачных проверок.
≥ 0
latencyMsinteger | nullВсегдаСредняя задержка, миллисекунды; null без измерений.
≥ 0
HealthNodeПолей: 10
Поле / типОписание
idstringВсегдаОбезличенный идентификатор внутри сети; не адрес узла.
namestringВсегдаНейтральная подпись узла.
rolestringВсегдаРоль.
primaryfallback
statusstringВсегдаПоследний свежий результат.
updownunknown
checkedAtstring | null · date-timeВсегдаПоследняя проверка.
latencyMsinteger | nullВсегдаПоследняя задержка в миллисекундах.
≥ 0
uptimenumber | nullВсегдаДоля успешных измерений за окно, в процентах; null при отсутствии данных.
≥ 0 · ≤ 100
samplesintegerВсегдаПроверок за окно.
≥ 0
failuresintegerВсегдаСбоев за окно.
≥ 0
barsarray<HealthBar>ВсегдаИнтервалы по возрастанию времени.
HealthChainПолей: 7
Поле / типОписание
idstringВсегдаИдентификатор сети.
namestringВсегдаНазвание сети.
symbolstringВсегдаТикер нативной монеты.
colorstringВсегдаЦвет #RRGGBB.
statusstringВсегдаАгрегированное состояние.
upfallbackdownunknownunconfigured
activeProviderstring | nullВсегдаОбезличенный id доступного узла; не поставщик и не URL.
nodesarray<HealthNode>Всегда
HealthПолей: 8
Поле / типОписание
generatedAtstring · date-timeВсегдаВремя снимка.
periodstringВсегдаОкно истории.
24h7d30d
intervalMsintegerВсегдаИнтервал проверок в миллисекундах.
≥ 0
staleAfterMsintegerВсегдаВозраст измерения, после которого статус становится unknown, миллисекунды.
≥ 0
windowStartstring · date-timeВсегдаНачало окна.
windowEndstring · date-timeВсегдаКонец окна.
barMsintegerВсегдаРазмер интервала графика, миллисекунды.
≥ 0
chainsarray<HealthChain>Всегда
ServiceHealthПолей: 1
Поле / типОписание
statusstringВсегдаok — API и база отвечают; не подтверждает возможность приёма конкретного платежа.
ok