API CryBit

Выставляете счёт, отдаёте покупателю ссылку, получаете webhook когда перевод пришёл. Деньги на баланс USDT. Без карт, без P2P, без кошелька как продукта.

База https://api.scr1pto.icu Формат JSON Ключ sk_… Лимит 60 запросов / мин
1. КлючМагазин прошёл модерацию, выпущен API-ключ.
2. СчётPOST /api/v1/payments — в ответе pay_url.
3. ОплатаПокупатель выбирает сеть и переводит на адрес.
4. WebhookСтатус paid, USDT на балансе кабинета.

Быстрый старт

  1. Зарегистрируйтесь в кабинете, добавьте магазин, дождитесь модерации.
  2. В карточке магазина выберите режим: тестовый или боевой.
  3. Укажите webhook, если нужен колбек на ваш сервер.
  4. Выпустите ключ в API-ключах. Он показывается один раз.
  5. Создайте счёт и откройте pay_url.
curl -X POST https://api.scr1pto.icu/api/v1/payments \
  -H "Authorization: Bearer sk_ваш_ключ" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"amount": 1000, "currency": "RUB", "order_id": "ORD-1048", "purpose": "Заказ 1048"}'

Авторизация

Ключ начинается с sk_ и привязан к одному магазину. Передавайте его в каждом запросе к /api/v1/*.

ЗаголовокПример
AuthorizationBearer sk_…
X-Api-Keysk_… — тот же ключ, если Bearer неудобен
Acceptapplication/json
Content-Typeapplication/json для POST

Ключ не привязан к сети. Тестовый или боевой режим берётся из настроек магазина в момент создания счёта.

Тестовый и боевой

Переключатель в карточке магазина: Кабинет → Магазины → точка → блок «Режим».

РежимЧто происходит
testСчёт с sandbox: true. На странице оплаты кнопка «Отметить оплаченным». Баланс не пополняется.
liveЖдём реальный перевод. Автопроверка TRC-20, ERC-20, BEP-20, TON, SOL. После paid — зачисление USDT минус комиссия.

Уже созданные счета не меняют режим, если вы переключили магазин позже. Новый режим действует на новые счета.

Создать счёт

POST/api/v1/payments

Магазин берётся из ключа, отдельно shop_id передавать не нужно.

ПолеТипОписание
amountnumberобязательноСумма заказа, минимум 0.01
currencystringобязательноRUB, USD, EUR или USDT
purposestringнетНазначение, до 240 символов
order_idstringнетВаш номер заказа, до 80 символов. Если пусто — сгенерируем CB-…
ttl_minutesintegerнетЖизнь счёта, 5–1440. По умолчанию 30
curl -X POST https://api.scr1pto.icu/api/v1/payments \
  -H "Authorization: Bearer sk_…" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "amount": 1490,
    "currency": "RUB",
    "order_id": "ORD-1048",
    "purpose": "Оплата заказа 1048",
    "ttl_minutes": 30
  }'

Ответ 201

{
  "uuid": "28d0ff38-949c-435e-ad41-c81c219b3597",
  "order_id": "ORD-1048",
  "purpose": "Оплата заказа 1048",
  "amount": 1490,
  "currency": "RUB",
  "amount_crypto": "16.390000",
  "crypto": null,
  "network": null,
  "status": "waiting",
  "sandbox": true,
  "needs_method": true,
  "pay_url": "https://scr1pto.icu/pay/28d0ff38-949c-435e-ad41-c81c219b3597",
  "expires_at": "2026-08-19T23:41:42+00:00",
  "callback_url": "https://shop.ru/pay/hook",
  "merchant_amount": "16.390000"
}

Адрес и сеть появятся, когда покупатель выберет монету на pay_url. До этого needs_method: true.

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

GET/api/v1/payments/{uuid}

Тот же объект, что после создания. Если срок вышел, статус станет expired.

curl https://api.scr1pto.icu/api/v1/payments/28d0ff38-949c-435e-ad41-c81c219b3597 \
  -H "Authorization: Bearer sk_…" \
  -H "Accept: application/json"
ПолеСмысл
uuidИдентификатор счёта
pay_urlСтраница для покупателя
statuswaiting / paid / expired / cancelled
sandboxtrue — тест, false — бой
addressАдрес для перевода, после выбора сети
txidХеш транзакции в сети
fee_amountКомиссия шлюза
merchant_amountСколько уйдёт на баланс

Страница оплаты

Готовая страница https://scr1pto.icu/pay/{uuid}. Покупатель выбирает USDT или USDC и сеть, получает QR и адрес. Статус обновляется сам по WebSocket.

Интеграция с вашей стороны: создать счёт и редирект на pay_url. Сеть за покупателя выбирать не нужно.

Публичные методы

Без API-ключа — ими пользуется страница оплаты. Можно вызывать сами, если рисуете свой UI.

GET/api/payments/methods

Список монет и сетей с типом комиссии.

GET/api/payments/{uuid}/public

Публичные данные счёта: сумма, статус, адрес, QR-данные.

POST/api/payments/{uuid}/method
curl -X POST https://api.scr1pto.icu/api/payments/{uuid}/method \
  -H "Content-Type: application/json" \
  -d '{"crypto":"USDT","network":"TRC-20"}'

В ответе появятся address, amount_crypto, комиссия. Если сеть недоступна — 422.

POST/api/payments/{uuid}/sandbox-paid

Только тестовые счета. Помечает оплату без перевода. На боевом режиме вернёт 422 «Песочница выключена».

Баланс

GET/api/v1/wallet
curl https://api.scr1pto.icu/api/v1/wallet \
  -H "Authorization: Bearer sk_…" \
  -H "Accept: application/json"
{
  "available_usdt": 12.48,
  "pending_usdt": 0,
  "currency": "USDT",
  "network": "TRC-20",
  "ledger": [],
  "payouts": []
}

Баланс один на мерчанта, не на магазин. Тестовые оплаты сюда не падают. Вывод — из кабинета, сейчас на TRC-20.

Webhook

URL задаётся в настройках магазина, не в запросе на счёт. Мы отправим POST, когда счёт станет paid.

ЗаголовокЗначение
Content-Typeapplication/json
X-Scr1pto-Eventpayment.paid
{
  "uuid": "28d0ff38-949c-435e-ad41-c81c219b3597",
  "order_id": "ORD-1048",
  "status": "paid",
  "txid": "0x… или подпись сети",
  "amount": 1490,
  "currency": "RUB",
  "amount_crypto": "16.390000",
  "crypto": "USDT",
  "network": "TRC-20",
  "sandbox": false
}

Таймаут 8 секунд, повторно не шлём. Проверяйте статус ещё и через GET, если хук не дошёл.

Статусы

statusКогда
waitingЖдём оплату, счёт жив
paidПеревод найден или тест отмечен
expiredВышло время ttl
cancelledОтменён из кабинета

Монеты и сети

Суммы в API — человеческие единицы (1 USDT = 1.000000). На BEP-20 в сети у токена 18 decimals, мы это учитываем сами.

МонетаСетьАвтопроверка в бою
USDTTRC-20да
USDTERC-20да
USDTBEP-20да
USDTTONда
USDTSOLда
USDCTRC-20да
USDCERC-20да

Комиссию шлюза правите в админке по монете и сети: процент или фикс. Если комиссия ≥ суммы счёта, выбор сети вернёт 422.

Ошибки

КодКогда
401Нет ключа, ключ отозван, магазин не одобрен
404Счёт не найден или чужой
422Валидация, магазин на модерации, счёт закрыт, сеть недоступна
429Больше 60 запросов в минуту на ключ
{
  "message": "API-ключ недействителен."
}

{
  "message": "The amount field is required.",
  "errors": {
    "amount": ["The amount field is required."]
  }
}

Готово. Выпустите ключ в кабинете и пробейте тестовый счёт на 1 USDT — на странице оплаты его можно закрыть без перевода.