Integração Host-to-Host — comunicação direta de servidor para servidor. Você cria uma fatura pela API, recebe os dados de pagamento e os mostra ao pagador no seu site, sem redirecionar para a CrocoPay.
Você cria uma fatura pela API, recebe os dados de pagamento (cartão, telefone ou QR) e os mostra ao pagador no seu site — sem redirecionar para a CrocoPay.
Todas as requisições exigem os cabeçalhos Client-Id e Client-Secret. As chaves ficam em «Lojas» → ícone de engrenagem ao lado do lojista.
Cria uma nova fatura de pagamento. Retorna o ID da fatura e os dados de pagamento.
amount
sim
Valor do pagamento (inteiro para moedas da CEI)
currency
sim
Moeda: RUB, UAH, UZS, KZT, TJS, AZN, KGS
payment_option
sim
Método de pagamento (TO_CARD, SBP, QR_NSPK…)
callback_url
não
URL para a notificação webhook do pagamento (POST)
success_url
não
Para onde redirecionar o pagador após um pagamento bem-sucedido. Se omitido, o pagador verá uma página de confirmação da CrocoPay
cancel_url
não
Para onde redirecionar o pagador se ele cancelar ou a fatura expirar. Se omitido, o pagador fica na página da 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"
}
Retorna o status atual e os dados de pagamento de uma fatura pelo UUID — use para consultar até o pagamento.
Retorna os métodos de pagamento disponíveis para sua loja — chame antes de criar uma fatura.
HTTP/1.1 200 OK
{
"methods": [
{ "currency": "RUB", "payment_option": "TO_CARD", "name": "Cartão (qualquer banco russo)" },
{ "currency": "RUB", "payment_option": "SBP", "name": "SBP (qualquer banco russo)" },
{ "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": "Transfronteiriço · SberPay" },
{ "currency": "UAH", "payment_option": "TO_CARD", "name": "Cartão (Ucrânia)" },
{ "currency": "UZS", "payment_option": "TO_CARD", "name": "Cartão (Uzbequistão)" },
{ "currency": "TJS", "payment_option": "TO_CARD", "name": "Cartão (Tajiquistão)" },
{ "currency": "AZN", "payment_option": "TO_CARD", "name": "Cartão (Azerbaijão)" },
{ "currency": "KZT", "payment_option": "TO_CARD", "name": "Cartão (Cazaquistão)" },
{ "currency": "KGS", "payment_option": "TO_CARD", "name": "Cartão (Quirguistão)" }
]
}
O valor de payment_option depende da moeda. Pergunte ao seu gerente quais métodos estão ativados para sua loja.
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_urlApós um pagamento bem-sucedido, a CrocoPay envia um POST para o seu 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');
}
// pagamento confirmado Integração Express — você cria um link de pagamento com uma única requisição à API e o pagador chega a um formulário de pagamento da CrocoPay pronto e com a marca. Vários países e moedas por loja funcionam de imediato.
Crie um link de pagamento com uma única requisição POST — o pagador abre o formulário da CrocoPay, escolhe o país e o método de pagamento e conclui o pagamento.
Inicia um pagamento e retorna redirect_url — o link para o formulário de pagamento.
client_id
sim
ID da loja
client_secret
sim
Chave secreta da loja
amount
sim
Valor do pagamento (inteiro para moedas da CEI)
currency
sim
Moeda: RUB, UAH, UZS, KZT, TJS, AZN, KGS
successUrl
não
Para onde redirecionar o pagador após um pagamento bem-sucedido. Se omitido, o pagador verá uma página de confirmação da CrocoPay
cancelUrl
não
Para onde redirecionar o pagador em caso de cancelamento ou expiração da fatura. Se omitido, o pagador fica na página da CrocoPay
callbackUrl
não
URL para a notificação webhook do pagamento (POST). Inclua nela o ID do 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"
}
// A moeda não está ativada para o lojista
{ "status": "error", "message": "Currency UAH is not supported by this merchant." }
// O valor é zero
{ "status": "error", "message": "Amount cannot be 0 or less than 0." }
// Valor fracionado em moeda que só aceita inteiros (HTTP 422)
{ "message": "The amount for currency RUB must be a whole number, without minor units." }
// client_id / client_secret inválidos (HTTP 403)
{ "message": "Can not verify the client. Please check client Id and Client Secret." }
Exemplo: a loja está configurada para RUB + UZS e o valor da requisição é 5.000 RUB. Um pagador do Uzbequistão escolhe UZ — o formulário converte o valor para UZS pela cotação atual e o lojista recebe a notificação em UZS.
success_urlcancel_urlApós um pagamento bem-sucedido, a CrocoPay envia um POST para o seu 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');
}
// pagamento confirmado Aceite pagamentos de clientes do mundo todo — em dólares, euros, dólares canadenses e rúpias, pela mesma API H2H. O pagador usa um cartão Visa/Mastercard comum, Apple Pay, Google Pay, PayPal, Revolut e mais — sem conta bancária na CEI.
amount
sim
Valor. Centavos são permitidos para USD, EUR, INR: 49.99
currency
sim
USD, EUR, CAD ou INR
provider
não
Código do provedor (stripe, paypal, revolut…). Se omitido, o pagador escolhe na nossa página
callback_url
não
Para onde enviar a notificação de pagamento. Inclua o ID do seu pedido
success_url
não
Para onde redirecionar o pagador após um pagamento bem-sucedido. Se omitido, o pagador verá uma página de confirmação da CrocoPay
cancel_url
não
Para onde redirecionar o pagador em caso de cancelamento ou expiração da fatura. Se omitido, o pagador fica na página da CrocoPay
provider é opcional — define para onde o link leva:
GET /api/v2/h2h/payment-method/available (moedas USD / EUR) — ela muda, não fixe no código. Se o provedor não estiver ativado para você ou estiver temporariamente indisponível, a fatura não é recusada — você recebe o link do seletor. Um código de provedor desconhecido retorna o erro 422. O nome antigo do parâmetro onramp_provider continua aceito.stripe
Stripe / Link (cartões, Apple Pay, Google Pay)coinbase
Coinbasepaypal
PayPal — exige conta PayPalrobinhood
Robinhood — exige conta Robinhoodrevolut
Revolut — exige conta Revoluttopper
Topperbanxa
Banxabinance
Binance Connectblockchaincom
Blockchain.comtransak
Transakmeld
Meld (agregador)particle
Particle Networksardine
Sardineinterac
Interacupi
UPI / IMPSOs mínimos são definidos pelos provedores e mudam com o tempo. Um valor abaixo do mínimo é recusado na página do provedor, não pela API. O país é detectado pelo IP do pagador: um provedor que não atende esse país recusa o pagamento (ex.: PayPal e Robinhood só EUA). Para clientes fora dos EUA/UE use stripe, topper, banxa, transak ou binance — ou omita provider e deixe o pagador escolher. O primeiro pagamento pode exigir uma verificação rápida de identidade (KYC, ~2 min); o cartão precisa suportar 3-D Secure. Os pagamentos são definitivos — sem chargebacks.
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 da resposta — envie para GET /api/v2/h2h/invoices/{id}. A notificação em callback_url não traz ID — adicione o ID do seu pedido em callback_url (?order=1042).
Consulte seu gerente sobre o modo de taxa e a ativação de pagamentos internacionais para sua loja.
success_urlcancel_urlApós um pagamento bem-sucedido, a CrocoPay envia um POST para o seu 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');
}
// pagamento confirmado Aceite cripto pela API H2H: o pedido em qualquer moeda (RUB, UZS, KZT, USD …) e o pagador paga em USDT, USDC, BTC, ETH e outras moedas. Você recebe o crédito em USD.
payment_option: "CRYPTO" na moeda do pedido. O valor é convertido para USD pela cotação da CrocoPay, mínimo de 10 USD.crypto_currency — redirecione o pagador para url: ele escolhe a rede e a moeda e vê o endereço, o QR e o valor exato.crypto_currency (ex.: USDT.Tron) — a resposta já traz o endereço e o valor exato para o seu formulário.amount
number · sim
Valor na moeda (inteiro para moedas da CEI)
currency
string · sim
Moeda do pedido com cripto ativada
payment_option
string · sim
CRYPTO
crypto_currency
string · não
currency_id da moeda (USDT.Tron, BTC.Bitcoin …). Sem ele, o pagador escolhe
callback_url
string · não
Webhook de mudança de status
success_url
string · não
Para onde redirecionar o cliente após um pagamento bem-sucedido. Se omitido, o cliente verá uma página de confirmação da CrocoPay
cancel_url
string · não
Para onde redirecionar o cliente em caso de cancelamento ou expiração da fatura. Se omitido, o cliente fica na página da 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"
}
}
Sem crypto_currency, coin, network, pay_address e amount_to_pay são null — redirecione o pagador para url.
Os pagamentos em cripto são creditados no saldo em USD do lojista: o valor do pedido em USD menos uma taxa de 1% (a tarifa do grupo não se aplica a cripto). Após o pagamento, a fatura retorna amount e currency: USD, além de order_amount, order_currency, paid_coin e paid_amount.
NEW
→ Pending
Aguardando pagamento
PAID
→ Success
Pago (tolerância de ±1%) — entregue o produto
OVERPAID
→ Success
Pago a mais — entregue o produto
UNDERPAID
→ Pending
Pago parcialmente — revisão manual, fale com o suporte
EXPIRED
→ Cancelled
Expirado sem pagamento
Envie o currency_id como crypto_currency. Uma moeda fica disponível se o valor da fatura em USD não for menor que o mínimo dela.
USDT.Tron a partir de 10 USD
USDD.Tron a partir de 10 USD
USD1.Tron a partir de 10 USD
TRX.Tron a partir de 10 USD
USDT.BNBSmartChain a partir de 10 USD
USDC.BNBSmartChain a partir de 10 USD
DAI.BNBSmartChain a partir de 10 USD
USDE.BNBSmartChain a partir de 10 USD
USDD.BNBSmartChain a partir de 10 USD
USD1.BNBSmartChain a partir de 10 USD
CAKE.BNBSmartChain a partir de 10 USD
SHIB.BNBSmartChain a partir de 10 USD
WLFI.BNBSmartChain a partir de 10 USD
BNB.BNBSmartChain a partir de 10 USD
USDT.Ethereum a partir de 50 USD
USDC.Ethereum a partir de 50 USD
DAI.Ethereum a partir de 50 USD
PYUSD.Ethereum a partir de 50 USD
USDE.Ethereum a partir de 50 USD
USDD.Ethereum a partir de 50 USD
USD1.Ethereum a partir de 50 USD
XAUT.Ethereum a partir de 50 USD
ARB.Ethereum a partir de 50 USD
SHIB.Ethereum a partir de 50 USD
PEPE.Ethereum a partir de 50 USD
WLD.Ethereum a partir de 50 USD
ENA.Ethereum a partir de 50 USD
SAND.Ethereum a partir de 50 USD
CAKE.Ethereum a partir de 50 USD
WLFI.Ethereum a partir de 50 USD
ETH.Ethereum a partir de 50 USD
USDT.Polygon a partir de 10 USD
USDC.Polygon a partir de 10 USD
POL.Polygon a partir de 10 USD
DAI.Polygon a partir de 10 USD
SAND.Polygon a partir de 10 USD
USDT.Arbitrum a partir de 10 USD
USDC.Arbitrum a partir de 10 USD
ETH.Arbitrum a partir de 10 USD
DAI.Arbitrum a partir de 10 USD
ARB.Arbitrum a partir de 10 USD
PYUSD.Arbitrum a partir de 10 USD
CAKE.Arbitrum a partir de 10 USD
BTC.Bitcoin a partir de 20 USD
LTC.Litecoin a partir de 10 USD
DOGE.Dogecoin a partir de 10 USD
BCH.Bitcoincash a partir de 10 USD
400
Moeda indisponível para este valor — a resposta traz url para escolher outra
403
Cripto não ativada para esta moeda — fale com seu gerente
422
Valor abaixo de 10 USD ou erro de validação
5xx
Erro temporário ou cotação indisponível — tente novamente mais tarde
success_urlcancel_urlApós um pagamento bem-sucedido, a CrocoPay envia um POST para o seu 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');
}
// pagamento confirmado