Integración Host-to-Host — comunicación directa de servidor a servidor. Usted crea una factura por API, recibe los datos de pago y los muestra al pagador en su sitio, sin redirigir a CrocoPay.
Usted crea una factura por API, recibe los datos de pago (tarjeta, teléfono o QR) y los muestra al pagador en su sitio — sin redirigir a CrocoPay.
Todas las solicitudes requieren las cabeceras Client-Id y Client-Secret. Encontrará las claves en «Tiendas» → el icono de engranaje junto al comercio.
Crea una nueva factura de pago. Devuelve el ID de la factura y los datos de pago.
amount
sí
Importe del pago (entero para monedas de la CEI)
currency
sí
Moneda: RUB, UAH, UZS, KZT, TJS, AZN, KGS
payment_option
sí
Método de pago (TO_CARD, SBP, QR_NSPK…)
callback_url
no
URL para la notificación webhook del pago (POST)
success_url
no
Adónde redirigir al pagador tras un pago correcto. Si se omite, el pagador verá una página de confirmación de CrocoPay
cancel_url
no
Adónde redirigir al pagador si cancela o la factura vence. Si se omite, el pagador se queda en la página de 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": "Sberbank",
"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": "Alfa-Bank",
"card_owner": "ANNA SIDOROVA",
"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"
}
Devuelve el estado actual y los datos de pago de una factura por su UUID — úselo para consultar hasta que se pague.
Devuelve los métodos de pago disponibles para su tienda — llámelo antes de crear una factura.
HTTP/1.1 200 OK
{
"methods": [
{ "currency": "RUB", "payment_option": "TO_CARD", "name": "Tarjeta (cualquier banco ruso)" },
{ "currency": "RUB", "payment_option": "SBP", "name": "SBP (cualquier banco ruso)" },
{ "currency": "RUB", "payment_option": "SBP_ALFA", "name": "SBP Alfa-Bank" },
{ "currency": "RUB", "payment_option": "QR_NSPK", "name": "QR NSPK" },
{ "currency": "RUB", "payment_option": "TRANSGRAN_SBER", "name": "Transfronterizo · SberPay" },
{ "currency": "UAH", "payment_option": "TO_CARD", "name": "Tarjeta (Ucrania)" },
{ "currency": "UZS", "payment_option": "TO_CARD", "name": "Tarjeta (Uzbekistán)" },
{ "currency": "TJS", "payment_option": "TO_CARD", "name": "Tarjeta (Tayikistán)" },
{ "currency": "AZN", "payment_option": "TO_CARD", "name": "Tarjeta (Azerbaiyán)" },
{ "currency": "KZT", "payment_option": "TO_CARD", "name": "Tarjeta (Kazajistán)" },
{ "currency": "KGS", "payment_option": "TO_CARD", "name": "Tarjeta (Kirguistán)" }
]
}
El valor de payment_option depende de la moneda. Pregunte a su gestor qué métodos están activados para su tienda.
TO_CARD
Bank card transfer (any Russian bank)
Card number
SBP
SBP transfer — any Russian bank
Phone number
SBP_ALFA
SBP transfer — Alfa-Bank
Phone number
SBP_TBANK
SBP transfer — T-Bank
Phone number
QR_NSPK
NSPK QR code payment
QR code
MOBILE_PHONE
Mobile phone top-up
Phone number
TO_CARD_TRANSGRAN
Cross-border card transfer (any bank)
Card number
SBP_TRANSGRAN
Cross-border SBP transfer (any bank)
Phone number
TRANSGRAN_ALFA
Cross-border — Alfa-Bank
Card / phone
TRANSGRAN_VTB
Cross-border — VTB
Card / phone
TRANSGRAN_SBER
Cross-border — SberPay
Phone number
TRANSGRAN_TPAY
Cross-border — T-Pay (T-Bank)
Card / phone
TO_CARD
Bank card transfer (Ukraine)
Card number
UZCARD
UzCard card transfer
Card number
HUMO
Humo card transfer
Card number
PAYME
Payme transfer
Card / phone
CLICK
Click transfer
Card / phone
BANK_TRANSFER
Bank transfer (Kazakhstan)
Card number
BANK_TRANSFER
Bank transfer (Azerbaijan)
Card number
KORTI_MILLI
Transfer — Korti Milli
Card number
DUSHANBE_CITY
Transfer — Dushanbe City Bank
Card number
TO_CARD
Bank card transfer (Kyrgyzstan)
Card number
success_urlcancel_urlTras un pago correcto, CrocoPay envía un POST a su 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');
}
// pago confirmado Integración Express — crea un enlace de pago con una sola solicitud a la API y el pagador llega a un formulario de pago de CrocoPay listo y con marca. Varios países y monedas por tienda funcionan de inmediato.
Cree un enlace de pago con una sola solicitud POST — el pagador abre el formulario de CrocoPay, elige país y método de pago y completa el pago.
Inicia un pago y devuelve redirect_url — el enlace al formulario de pago.
client_id
sí
ID de la tienda
client_secret
sí
Clave secreta de la tienda
amount
sí
Importe del pago (entero para monedas de la CEI)
currency
sí
Moneda: RUB, UAH, UZS, KZT, TJS, AZN, KGS
successUrl
no
Adónde redirigir al pagador tras un pago correcto. Si se omite, el pagador verá una página de confirmación de CrocoPay
cancelUrl
no
Adónde redirigir al pagador al cancelar o vencer la factura. Si se omite, el pagador se queda en la página de CrocoPay
callbackUrl
no
URL para la notificación webhook del pago (POST). Incluya en ella el ID del pedido
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"
}
// La moneda no está activada para el comercio
{ "status": "error", "message": "Currency UAH is not supported by this merchant." }
// El importe es cero
{ "status": "error", "message": "Amount cannot be 0 or less than 0." }
// Importe con decimales en una moneda que solo admite enteros (HTTP 422)
{ "message": "The amount for currency RUB must be a whole number, without minor units." }
// client_id / client_secret no válidos (HTTP 403)
{ "message": "Can not verify the client. Please check client Id and Client Secret." }
Ejemplo: la tienda está configurada para RUB + UZS y el importe de la solicitud es 5.000 RUB. Un pagador de Uzbekistán elige UZ — el formulario convierte el importe a UZS al tipo actual y el comercio recibe la notificación en UZS.
success_urlcancel_urlTras un pago correcto, CrocoPay envía un POST a su 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');
}
// pago confirmado Acepte pagos de clientes de todo el mundo — en dólares, euros, dólares canadienses y rupias, con la misma API H2H. El pagador usa una tarjeta Visa/Mastercard normal, Apple Pay, Google Pay, PayPal, Revolut y más — sin cuenta bancaria en la CEI.
amount
sí
Importe. Se admiten decimales en USD, EUR, INR: 49.99
currency
sí
USD, EUR, CAD o INR
provider
no
Código del proveedor (stripe, paypal, revolut…). Si se omite, el pagador elige en nuestra página
callback_url
no
Adónde enviar la notificación de pago. Incluya en ella el ID de su pedido
success_url
no
Adónde redirigir al pagador tras un pago correcto. Si se omite, el pagador verá una página de confirmación de CrocoPay
cancel_url
no
Adónde redirigir al pagador al cancelar o vencer la factura. Si se omite, el pagador se queda en la página de CrocoPay
provider es opcional — decide adónde lleva el enlace:
GET /api/v2/h2h/payment-method/available (monedas USD / EUR) — cambia, no la fije en el código. Si el proveedor no está activado para usted o no está disponible temporalmente, la factura no se rechaza — recibe en su lugar el enlace al selector. Un código de proveedor desconocido devuelve el error 422. El nombre antiguo del parámetro onramp_provider sigue aceptándose.stripe
Stripe / Link (tarjetas, Apple Pay, Google Pay)coinbase
Coinbasepaypal
PayPal — requiere cuenta de PayPalrobinhood
Robinhood — requiere cuenta de Robinhoodrevolut
Revolut — requiere cuenta de Revoluttopper
Topperbanxa
Banxabinance
Binance Connectblockchaincom
Blockchain.comtransak
Transakmeld
Meld (agregador)particle
Particle Networksardine
Sardineinterac
Interacupi
UPI / IMPSLos mínimos los fijan los proveedores y cambian con el tiempo. Un importe por debajo del mínimo se rechaza en la página del proveedor, no en la API. El país se detecta por la IP del pagador: un proveedor que no lo atiende rechazará el pago (p. ej. PayPal y Robinhood solo EE. UU.). Para clientes fuera de EE. UU./UE use stripe, topper, banxa, transak o binance — u omita provider y deje elegir al pagador. El primer pago puede requerir una verificación rápida de identidad (KYC, ~2 min); la tarjeta debe admitir 3-D Secure. Los pagos son definitivos — sin contracargos.
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 de la respuesta — páselo a GET /api/v2/h2h/invoices/{id}. La notificación a callback_url no lleva ID — añada el ID de su pedido a callback_url (?order=1042).
Consulte a su gestor sobre el modo de comisión y la activación de pagos internacionales para su tienda.
success_urlcancel_urlTras un pago correcto, CrocoPay envía un POST a su 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');
}
// pago confirmado Acepte cripto con la API H2H: el pedido en cualquier moneda (RUB, UZS, KZT, USD …) y el pagador paga en USDT, USDC, BTC, ETH y otras monedas. Usted recibe el abono en USD.
payment_option: "CRYPTO" en la moneda del pedido. El importe se convierte a USD al tipo de CrocoPay, mínimo 10 USD.crypto_currency — redirija al pagador a url: elige red y moneda y ve la dirección, el QR y el importe exacto.crypto_currency (p. ej. USDT.Tron) — la respuesta ya trae la dirección y el importe exacto para su formulario.amount
number · sí
Importe en la moneda (entero para monedas de la CEI)
currency
string · sí
Moneda del pedido con cripto activada
payment_option
string · sí
CRYPTO
crypto_currency
string · no
currency_id de la moneda (USDT.Tron, BTC.Bitcoin …). Sin él, elige el pagador
callback_url
string · no
Webhook de cambio de estado
success_url
string · no
Adónde redirigir al cliente tras un pago correcto. Si se omite, el cliente verá una página de confirmación de CrocoPay
cancel_url
string · no
Adónde redirigir al cliente al cancelar o vencer la factura. Si se omite, el cliente se queda en la página de 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"
}
}
Sin crypto_currency, coin, network, pay_address y amount_to_pay son null — redirija al pagador a url.
Los pagos cripto se acreditan al saldo en USD del comercio: el importe del pedido en USD menos una comisión del 1% (la tarifa del grupo no se aplica a cripto). Tras el pago, la factura devuelve amount y currency: USD, además de order_amount, order_currency, paid_coin y paid_amount.
NEW
→ Pending
Pendiente de pago
PAID
→ Success
Pagado (tolerancia ±1%) — entregue el producto
OVERPAID
→ Success
Sobrepago — entregue el producto
UNDERPAID
→ Pending
Pago parcial — revisión manual, contacte con soporte
EXPIRED
→ Cancelled
Vencido sin pagar
Pase currency_id como crypto_currency. Una moneda está disponible si el importe en USD de la factura no es inferior a su mínimo.
USDT.Tron desde 10 USD
USDD.Tron desde 10 USD
USD1.Tron desde 10 USD
TRX.Tron desde 10 USD
USDT.BNBSmartChain desde 10 USD
USDC.BNBSmartChain desde 10 USD
DAI.BNBSmartChain desde 10 USD
USDE.BNBSmartChain desde 10 USD
USDD.BNBSmartChain desde 10 USD
USD1.BNBSmartChain desde 10 USD
CAKE.BNBSmartChain desde 10 USD
SHIB.BNBSmartChain desde 10 USD
WLFI.BNBSmartChain desde 10 USD
BNB.BNBSmartChain desde 10 USD
USDT.Ethereum desde 50 USD
USDC.Ethereum desde 50 USD
DAI.Ethereum desde 50 USD
PYUSD.Ethereum desde 50 USD
USDE.Ethereum desde 50 USD
USDD.Ethereum desde 50 USD
USD1.Ethereum desde 50 USD
XAUT.Ethereum desde 50 USD
ARB.Ethereum desde 50 USD
SHIB.Ethereum desde 50 USD
PEPE.Ethereum desde 50 USD
WLD.Ethereum desde 50 USD
ENA.Ethereum desde 50 USD
SAND.Ethereum desde 50 USD
CAKE.Ethereum desde 50 USD
WLFI.Ethereum desde 50 USD
ETH.Ethereum desde 50 USD
USDT.Polygon desde 10 USD
USDC.Polygon desde 10 USD
POL.Polygon desde 10 USD
DAI.Polygon desde 10 USD
SAND.Polygon desde 10 USD
USDT.Arbitrum desde 10 USD
USDC.Arbitrum desde 10 USD
ETH.Arbitrum desde 10 USD
DAI.Arbitrum desde 10 USD
ARB.Arbitrum desde 10 USD
PYUSD.Arbitrum desde 10 USD
CAKE.Arbitrum desde 10 USD
BTC.Bitcoin desde 20 USD
LTC.Litecoin desde 10 USD
DOGE.Dogecoin desde 10 USD
BCH.Bitcoincash desde 10 USD
400
Moneda no disponible para este importe — la respuesta trae url para elegir otra
403
Cripto no activada para esta moneda — contacte con su gestor
422
Importe inferior a 10 USD o error de validación
5xx
Error temporal o tipo no disponible — reintente más tarde
success_urlcancel_urlTras un pago correcto, CrocoPay envía un POST a su 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');
}
// pago confirmado