Host-to-Host интеграция — прямое взаимодействие сервера с сервером. Вы создаёте счёт через API, получаете реквизиты и показываете их плательщику на своей стороне, без редиректа на CrocoPay.
Вы создаёте счёт через API, получаете реквизиты (карту, номер телефона или QR) и показываете их плательщику на своей стороне — без редиректа на CrocoPay.
Все запросы требуют заголовки Client-Id и Client-Secret. Ключи доступны в разделе «Кассы» → иконка шестерни рядом с нужным мерчантом.
Создаёт новый счёт на оплату. В ответ возвращает ID счёта и платёжные реквизиты.
amount
да
Сумма платежа (целое число для валют СНГ)
currency
да
Валюта: RUB, UAH, UZS, KZT, TJS, AZN, KGS
payment_option
да
Метод оплаты (TO_CARD, SBP, QR_NSPK…)
callback_url
нет
URL для webhook-уведомления об оплате (POST)
success_url
нет
Куда перенаправить плательщика после успешной оплаты. Если не указан — плательщик увидит страницу CrocoPay с подтверждением
cancel_url
нет
Куда перенаправить плательщика, если он отменил оплату или счёт истёк. Если не указан — плательщик останется на странице CrocoPay
POST /api/v2/h2h/invoices HTTP/1.1
Host: crocopay.tech
Client-Id: GnHqauRCUVtB8sECR7m
Client-Secret: vpBpXo7REyApkDnLIOpMR3lk1ndaLmY2qoZptV9cHOtjJLUDsW26GBSe2kda1IVQIMR758Z
Content-Type: application/json
{
"amount": 5000,
"currency": "RUB",
"payment_option": "TO_CARD",
"callback_url": "https://example.com/payment?user_id=42",
"success_url": "https://example.com/success",
"cancel_url": "https://example.com/cancel"
}
HTTP/1.1 200 OK
{
"id": "911c2823-f55b-43b5-9881-d5653107f7dc",
"status": "Pending",
"amount": 5000,
"currency": "RUB",
"payment_option": "TO_CARD",
"card": "4276 1234 5678 9012",
"bank_receiver": "Сбербанк",
"card_owner": "IVAN PETROV",
"expires_at": "2026-09-15T12:30:00Z"
}
HTTP/1.1 200 OK
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "Pending",
"amount": 5000,
"currency": "RUB",
"payment_option": "SBP",
"card": "+79001234567",
"bank_receiver": "Альфа-Банк",
"card_owner": "ANNA SIDOROVA",
"expires_at": "2026-09-15T12:30:00Z"
}
Вместо номера карты или телефона в поле card может прийти ссылка (https://...): ссылка НСПК (https://qr.nspk.ru/...), диплинк в приложение банка или ссылка на платёжную страницу. Не показывайте её как номер — выведите плательщику кнопку «Оплатить» и/или QR-код с этой ссылкой. Если значение начинается с http:// или https:// — это ссылка.
HTTP/1.1 200 OK
{
"id": "c3d4e5f6-a7b8-9012-cdef-345678901234",
"status": "Pending",
"amount": 2200,
"currency": "RUB",
"payment_option": "QR_NSPK",
"card": "https://qr.nspk.ru/BD10106000000000000000000000000",
"bank_receiver": "Система быстрых платежей",
"card_owner": null,
"expires_at": "2026-09-15T12:30:00Z"
}
HTTP/1.1 422 Unprocessable Entity
{
"status": "error",
"message": "payment_option TO_CARD is not enabled for currency UZS"
}
Возвращает текущий статус и реквизиты счёта по его UUID — используйте для polling'а до момента оплаты.
Возвращает список методов, доступных для вашей кассы — используйте перед созданием счёта.
HTTP/1.1 200 OK
{
"methods": [
{ "currency": "RUB", "payment_option": "TO_CARD", "name": "Карта (любой банк РФ)" },
{ "currency": "RUB", "payment_option": "SBP", "name": "СБП (любой банк РФ)" },
{ "currency": "RUB", "payment_option": "SBP_ALFA", "name": "СБП Альфа-Банк" },
{ "currency": "RUB", "payment_option": "QR_NSPK", "name": "QR НСПК" },
{ "currency": "RUB", "payment_option": "TRANSGRAN_SBER", "name": "Трансгран · SberPay" },
{ "currency": "UAH", "payment_option": "TO_CARD", "name": "Карта (Украина)" },
{ "currency": "UZS", "payment_option": "TO_CARD", "name": "Карта (Узбекистан)" },
{ "currency": "TJS", "payment_option": "TO_CARD", "name": "Карта (Таджикистан)" },
{ "currency": "AZN", "payment_option": "TO_CARD", "name": "Карта (Азербайджан)" },
{ "currency": "KZT", "payment_option": "TO_CARD", "name": "Карта (Казахстан)" },
{ "currency": "KGS", "payment_option": "TO_CARD", "name": "Карта (Кыргызстан)" }
]
}
Значение payment_option зависит от валюты. Доступность конкретного метода для вашей кассы уточняйте у менеджера.
TO_CARD
Перевод на банковскую карту (любой банк РФ)
Номер карты
SBP
Перевод по СБП — любой банк РФ
Номер телефона
SBP_ALFA
Перевод по СБП — Альфа-Банк
Номер телефона
SBP_TBANK
Перевод по СБП — Т-Банк
Номер телефона
QR_NSPK
Оплата по QR-коду НСПК
QR-код
MOBILE_PHONE
Пополнение мобильного телефона
Номер телефона
TO_CARD_TRANSGRAN
Трансграничный перевод на карту (любой банк)
Номер карты
SBP_TRANSGRAN
Трансграничный перевод по СБП (любой банк)
Номер телефона
TRANSGRAN_ALFA
Трансграничный — Альфа-Банк
Карта / телефон
TRANSGRAN_VTB
Трансграничный — ВТБ
Карта / телефон
TRANSGRAN_SBER
Трансграничный — SberPay
Номер телефона
TRANSGRAN_TPAY
Трансграничный — T-Pay (Т-Банк)
Карта / телефон
TO_CARD
Перевод на банковскую карту (Украина)
Номер карты
UZCARD
Перевод на карту UzCard
Номер карты
HUMO
Перевод на карту Humo
Номер карты
PAYME
Перевод через Payme
Карта / телефон
CLICK
Перевод через Click
Карта / телефон
BANK_TRANSFER
Банковский перевод (Казахстан)
Номер карты
BANK_TRANSFER
Банковский перевод (Азербайджан)
Номер карты
KORTI_MILLI
Перевод — Корти Милли
Номер карты
DUSHANBE_CITY
Перевод — Душанбе Сити Банк
Номер карты
TO_CARD
Перевод на банковскую карту (Кыргызстан)
Номер карты
success_urlcancel_urlПосле успешной оплаты CrocoPay отправляет POST на ваш callback_url.
POST /payment?user_id=42 HTTP/1.1
Host: example.com
Content-Type: application/json
{
"timestamp": 1753282096,
"subtotal": 500000,
"percentage": 0,
"charge_percentage": 0,
"charge_fixed": 0,
"total": 500000,
"sign": "ef5954715c663e3f96194a03981a0b04dd0772bfa5164afcdb507470c9c5078d"
}
$expected = hash_hmac('sha256',
"{$_POST['timestamp']}|{$_POST['subtotal']}|{$_POST['percentage']}|" .
"{$_POST['charge_percentage']}|{$_POST['charge_fixed']}|{$_POST['total']}",
$yourClientSecret
);
if (!hash_equals($expected, $_POST['sign'])) {
http_response_code(403);
exit('Invalid signature');
}
// платёж подтверждён Express-интеграция — вы создаёте платёжную ссылку через один API-запрос, а плательщик попадает на готовую брендированную форму CrocoPay. Поддерживает несколько гео и валют в рамках одной кассы «из коробки».
Создайте платёжную ссылку одним POST-запросом — плательщик перейдёт на готовую брендированную форму CrocoPay, выберет страну и способ оплаты и завершит платёж сам.
Инициирует платёж и возвращает redirect_url — ссылку на платёжную форму.
client_id
да
Идентификатор кассы
client_secret
да
Секретный ключ кассы
amount
да
Сумма платежа (целое число для валют СНГ)
currency
да
Валюта: RUB, UAH, UZS, KZT, TJS, AZN, KGS
successUrl
нет
Куда перенаправить плательщика после успешной оплаты. Если не указан — плательщик увидит страницу CrocoPay с подтверждением
cancelUrl
нет
Куда перенаправить плательщика при отмене или истечении счёта. Если не указан — плательщик останется на странице CrocoPay
callbackUrl
нет
URL для webhook-уведомления об оплате (POST). Зашейте в него идентификатор заказа
POST /api/v2/initiate-payment HTTP/1.1 Host: crocopay.tech Content-Type: application/x-www-form-urlencoded client_id=GnHAFAZsT1ktFYqauUVtB8sECR7m &client_secret=vpBpXN40yaWQWicAobl...R758Z &amount=5000 ¤cy=RUB &successUrl=https://example.com/success &cancelUrl=https://example.com/cancel &callbackUrl=https://example.com/payment?user_id=42
HTTP/1.1 200 OK
{
"status": "success",
"message": "Initiated payment successfully.",
"redirect_url": "https://crocopay.tech/restapi/payment?grant_id=78784424&token=DuMJThhEimrrdiCKrW2A"
}
// Валюта не подключена у мерчанта
{ "status": "error", "message": "Currency UAH is not supported by this merchant." }
// Сумма равна нулю
{ "status": "error", "message": "Amount cannot be 0 or less than 0." }
// Дробная сумма для валюты, где разрешены только целые (HTTP 422)
{ "message": "The amount for currency RUB must be a whole number, without minor units." }
// Неверные client_id / client_secret (HTTP 403)
{ "message": "Can not verify the client. Please check client Id and Client Secret." }
Пример: касса настроена на RUB + UZS, сумма в запросе — 5 000 RUB. Плательщик из Узбекистана выбирает UZ — форма пересчитает сумму в UZS по курсу, мерчант получит уведомление в UZS.
success_urlcancel_urlПосле успешной оплаты CrocoPay отправляет POST на ваш callback_url.
POST /payment?user_id=42 HTTP/1.1
Host: example.com
Content-Type: application/json
{
"timestamp": 1753282096,
"subtotal": 500000,
"percentage": 0,
"charge_percentage": 0,
"charge_fixed": 0,
"total": 500000,
"sign": "ef5954715c663e3f96194a03981a0b04dd0772bfa5164afcdb507470c9c5078d"
}
$expected = hash_hmac('sha256',
"{$_POST['timestamp']}|{$_POST['subtotal']}|{$_POST['percentage']}|" .
"{$_POST['charge_percentage']}|{$_POST['charge_fixed']}|{$_POST['total']}",
$yourClientSecret
);
if (!hash_equals($expected, $_POST['sign'])) {
http_response_code(403);
exit('Invalid signature');
}
// платёж подтверждён Приём оплаты от клиентов по всему миру — в долларах, евро, канадских долларах и рупиях. Работает через тот же H2H API. Плательщик платит обычной картой Visa/Mastercard, через Apple Pay, Google Pay, PayPal, Revolut и другие сервисы — без банковского счёта в СНГ.
amount
да
Сумма. Для USD, EUR, INR допускаются центы: 49.99
currency
да
USD, EUR, CAD или INR
provider
нет
Код провайдера (stripe, paypal, revolut…). Не указан — плательщик выберет сам на нашей странице
callback_url
нет
Куда прислать уведомление об оплате. Зашейте в него номер заказа
success_url
нет
Куда перенаправить плательщика после успешной оплаты. Если не указан — плательщик увидит страницу CrocoPay с подтверждением
cancel_url
нет
Куда перенаправить плательщика при отмене или истечении счёта. Если не указан — плательщик останется на странице CrocoPay
provider необязателен — от него зависит, куда ведёт ссылка:
GET /api/v2/h2h/payment-method/available (валюты USD / EUR) — он меняется, не хардкодьте его. Если провайдер не подключён или временно недоступен, счёт не отклоняется — вернётся ссылка на страницу выбора. Неизвестный код провайдера — ошибка 422. Старое имя параметра onramp_provider тоже принимается.stripe
Stripe / Link (карты, Apple Pay, Google Pay)coinbase
Coinbasepaypal
PayPal — нужен аккаунт PayPalrobinhood
Robinhood — нужен аккаунт Robinhoodrevolut
Revolut — нужен аккаунт Revoluttopper
Topperbanxa
Banxabinance
Binance Connectblockchaincom
Blockchain.comtransak
Transakmeld
Meld (агрегатор)particle
Particle Networksardine
Sardineinterac
Interacupi
UPI / IMPSМинимумы устанавливают провайдеры, они меняются. Сумма ниже минимума отклоняется на странице провайдера, а не API. Страна определяется по IP плательщика: провайдер, не обслуживающий его страну, откажет в оплате (например, PayPal и Robinhood — только США). Для клиентов вне США/ЕС подойдут stripe, topper, banxa, transak, binance — или не передавайте provider, и плательщик выберет сам. При первой оплате возможна быстрая верификация (KYC, ~2 мин); карта должна поддерживать 3-D Secure. Платежи окончательные — без чарджбэков.
POST /api/v2/h2h/invoices HTTP/1.1
Host: crocopay.tech
Client-Id: GnHqauRCUVtB8sECR7m
Client-Secret: vpBpXo7REyApkDnLIOpMR3lk1ndaLmY2qoZptV9cHOtjJLUDsW26GBSe2kda1IVQIMR758Z
Content-Type: application/json
{
"amount": 49.99,
"currency": "USD",
"callback_url": "https://example.com/webhook?order=1042",
"success_url": "https://example.com/success",
"cancel_url": "https://example.com/cancel"
}
{
"amount": 120,
"currency": "EUR",
"provider": "revolut",
"callback_url": "https://example.com/webhook?order=1043"
}
HTTP/1.1 200 OK
{
"message": "Payment url was successfully generated",
"url": "https://pay.crocopay.tech/...",
"transaction": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "Pending",
"currency": "USD",
"amount": 49.99,
"expiredAt": "2026-10-19T12:30:00.000000Z"
}
}
transaction.id из ответа передавайте в GET /api/v2/h2h/invoices/{id}. В уведомлении на callback_url ID нет — добавьте в callback_url номер заказа (?order=1042).
Режим комиссии и подключение международных платежей для вашей кассы — у менеджера.
success_urlcancel_urlПосле успешной оплаты CrocoPay отправляет POST на ваш callback_url.
POST /payment?user_id=42 HTTP/1.1
Host: example.com
Content-Type: application/json
{
"timestamp": 1753282096,
"subtotal": 500000,
"percentage": 0,
"charge_percentage": 0,
"charge_fixed": 0,
"total": 500000,
"sign": "ef5954715c663e3f96194a03981a0b04dd0772bfa5164afcdb507470c9c5078d"
}
$expected = hash_hmac('sha256',
"{$_POST['timestamp']}|{$_POST['subtotal']}|{$_POST['percentage']}|" .
"{$_POST['charge_percentage']}|{$_POST['charge_fixed']}|{$_POST['total']}",
$yourClientSecret
);
if (!hash_equals($expected, $_POST['sign'])) {
http_response_code(403);
exit('Invalid signature');
}
// платёж подтверждён Приём оплаты в криптовалюте через H2H API: заказ в любой валюте (RUB, UZS, KZT, USD …), покупатель платит USDT, USDC, BTC, ETH и другими монетами. Вам зачисляются USD.
payment_option: "CRYPTO" в валюте заказа. Сумма пересчитывается в USD по курсу CrocoPay, минимум 10 USD.crypto_currency — перенаправьте покупателя на url: он выберет сеть и монету и увидит адрес, QR и точную сумму.crypto_currency (например, USDT.Tron) — в ответе сразу адрес и точная сумма для вашей формы.amount
number · да
Сумма в валюте currency (для валют СНГ — целое число)
currency
string · да
Валюта заказа, для которой включена крипта
payment_option
string · да
CRYPTO
crypto_currency
string · нет
currency_id монеты (USDT.Tron, BTC.Bitcoin …). Без него монету выбирает покупатель
callback_url
string · нет
Webhook о смене статуса
success_url
string · нет
Куда перенаправить покупателя после успешной оплаты. Если не указан — покупатель увидит страницу CrocoPay с подтверждением
cancel_url
string · нет
Куда перенаправить покупателя при отмене или истечении счёта. Если не указан — покупатель останется на странице CrocoPay
POST /api/v2/h2h/invoices HTTP/1.1
Host: crocopay.tech
Client-Id: YOUR_CLIENT_ID
Client-Secret: YOUR_CLIENT_SECRET
Content-Type: application/json
{
"amount": 5000,
"currency": "RUB",
"payment_option": "CRYPTO",
"crypto_currency": "USDT.Tron",
"callback_url": "https://example.com/webhook?order=1042",
"success_url": "https://example.com/success"
}
HTTP/1.1 200 OK
{
"message": "Payment url was successfully generated",
"url": "https://crocopay.tech/restapi/crypto/pay?hash=a1b2c3d4-...",
"transaction": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "Pending",
"currency": "RUB",
"amount": 5000,
"expiredAt": "2026-10-23T14:30:00.000000Z"
},
"crypto": {
"status": "NEW",
"amount_usd": "61.73",
"coin": "USDT.Tron",
"network": "TRON (TRC-20)",
"pay_address": "TRQsqAhU21UH56Q6yr2fdVwLdPysAnkuLo",
"amount_to_pay": "61.74",
"expires_at": "2026-10-23T10:30:00+00:00",
"quote_expires_at": "2026-10-23T10:30:00+00:00"
}
}
Без crypto_currency поля coin, network, pay_address и amount_to_pay равны null — перенаправьте покупателя на url.
Крипто-платежи зачисляются на USD-баланс мерчанта: сумма заказа в USD минус комиссия 1% (тариф группы к крипте не применяется). После оплаты счёт возвращает amount и currency: USD, а также order_amount, order_currency, paid_coin и paid_amount.
NEW
→ Pending
Ожидает оплаты
PAID
→ Success
Оплачено (допуск ±1%) — выдавайте товар
OVERPAID
→ Success
Оплачено с переплатой — выдавайте товар
UNDERPAID
→ Pending
Оплачено не полностью — ручной разбор, свяжитесь с поддержкой
EXPIRED
→ Cancelled
Счёт истёк без оплаты
currency_id передаётся в crypto_currency. Монета доступна, если сумма счёта в USD не меньше её минимума.
USDT.Tron от 10 USD
USDD.Tron от 10 USD
USD1.Tron от 10 USD
TRX.Tron от 5 USD
USDT.BNBSmartChain от 3 USD
USDC.BNBSmartChain от 3 USD
DAI.BNBSmartChain от 3 USD
USDE.BNBSmartChain от 3 USD
USDD.BNBSmartChain от 3 USD
USD1.BNBSmartChain от 3 USD
CAKE.BNBSmartChain от 3 USD
SHIB.BNBSmartChain от 3 USD
WLFI.BNBSmartChain от 3 USD
BNB.BNBSmartChain от 2 USD
USDT.Ethereum от 50 USD
USDC.Ethereum от 50 USD
DAI.Ethereum от 50 USD
PYUSD.Ethereum от 50 USD
USDE.Ethereum от 50 USD
USDD.Ethereum от 50 USD
USD1.Ethereum от 50 USD
XAUT.Ethereum от 50 USD
ARB.Ethereum от 50 USD
SHIB.Ethereum от 50 USD
PEPE.Ethereum от 50 USD
WLD.Ethereum от 50 USD
ENA.Ethereum от 50 USD
SAND.Ethereum от 50 USD
CAKE.Ethereum от 50 USD
WLFI.Ethereum от 50 USD
ETH.Ethereum от 30 USD
USDT.Polygon от 1 USD
USDC.Polygon от 1 USD
POL.Polygon от 1 USD
DAI.Polygon от 1 USD
SAND.Polygon от 1 USD
USDT.Arbitrum от 3 USD
USDC.Arbitrum от 3 USD
ETH.Arbitrum от 3 USD
DAI.Arbitrum от 3 USD
ARB.Arbitrum от 3 USD
PYUSD.Arbitrum от 3 USD
CAKE.Arbitrum от 3 USD
BTC.Bitcoin от 20 USD
LTC.Litecoin от 2 USD
DOGE.Dogecoin от 3 USD
BCH.Bitcoincash от 1 USD
400
Монета недоступна для этой суммы — в ответе есть url для выбора другой
403
Крипта не включена для этой валюты — обратитесь к менеджеру
422
Сумма меньше 10 USD или ошибка валидации
5xx
Временная ошибка или курс недоступен — повторите позже
success_urlcancel_urlПосле успешной оплаты CrocoPay отправляет POST на ваш callback_url.
POST /payment?user_id=42 HTTP/1.1
Host: example.com
Content-Type: application/json
{
"timestamp": 1753282096,
"subtotal": 500000,
"percentage": 0,
"charge_percentage": 0,
"charge_fixed": 0,
"total": 500000,
"sign": "ef5954715c663e3f96194a03981a0b04dd0772bfa5164afcdb507470c9c5078d"
}
$expected = hash_hmac('sha256',
"{$_POST['timestamp']}|{$_POST['subtotal']}|{$_POST['percentage']}|" .
"{$_POST['charge_percentage']}|{$_POST['charge_fixed']}|{$_POST['total']}",
$yourClientSecret
);
if (!hash_equals($expected, $_POST['sign'])) {
http_response_code(403);
exit('Invalid signature');
}
// платёж подтверждён