Criar cobrança Crypto 🌐
POST /v1/payments com paymentMethods: ["CRYPTO"]. A PagNow gera um endereço
de depósito único por cobrança, monitora a blockchain, aguarda as confirmações e
dispara o webhook assim que o pagamento liquida. Os valores são denominados em
USDT (ou USD, tratado 1:1) — a rede padrão é USDT na BSC (BEP-20).
Cobrança crypto não aceita conversão fiat→cripto. Enviar currency diferente de
USDT/USD é rejeitado. Cada cobrança tem seu próprio endereço — nunca reutilize
um endereço entre pedidos.
cURL
curl -X POST 'https://v2.pagnow.com/v1/payments' \
-H 'apikey: pnk_sua_chave_aqui' \
-H 'content-type: application/json' \
-d '{
"amount": 1000,
"currency": "USDT",
"paymentMethods": ["CRYPTO"],
"idempotencyKey": "pedido-7821",
"customerName": "Maria Silva",
"customerEmail": "maria@exemplo.com",
"metadata": { "orderId": "ORD-7821" },
"webhookUrl": "https://sua-loja.com/webhooks/pagnow"
}'Python
import requests
resp = requests.post(
"https://v2.pagnow.com/v1/payments",
headers={"apikey": "pnk_sua_chave_aqui"},
json={
"amount": 1000,
"currency": "USDT",
"paymentMethods": ["CRYPTO"],
"idempotencyKey": "pedido-7821",
"customerName": "Maria Silva",
"customerEmail": "maria@exemplo.com",
"metadata": {"orderId": "ORD-7821"},
"webhookUrl": "https://sua-loja.com/webhooks/pagnow",
},
timeout=30,
)
resp.raise_for_status()
charge = resp.json()
print(charge["id"])PHP
<?php
$ch = curl_init("https://v2.pagnow.com/v1/payments");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["apikey: pnk_sua_chave_aqui", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode([
"amount" => 1000,
"currency" => "USDT",
"paymentMethods" => ["CRYPTO"],
"idempotencyKey" => "pedido-7821",
"customerName" => "Maria Silva",
"customerEmail" => "maria@exemplo.com",
"metadata" => ["orderId" => "ORD-7821"],
"webhookUrl" => "https://sua-loja.com/webhooks/pagnow",
]),
]);
$charge = json_decode(curl_exec($ch), true);
echo $charge["id"];Resposta (201)
{
"id": "a1b2c3d4-e5f6-4789-9abc-def012345678",
"status": "WAITING_PAYMENT",
"amount": 1000,
"currency": "USDT",
"createdAt": "2026-06-26T15:42:11.000Z"
}Os campos de cripto não vêm nesta resposta inicial. Eles populam em 1–3 segundos, enquanto a PagNow aloca o endereço de depósito e registra a cobrança on-chain — busque a transação para obtê-los.
Buscar o endereço de depósito
GET /v1/payments/{id} — após ~1–3 s, os campos de cripto aparecem.
curl 'https://v2.pagnow.com/v1/payments/{id}' \
-H 'apikey: pnk_sua_chave_aqui'{
"id": "a1b2c3d4-e5f6-4789-9abc-def012345678",
"status": "WAITING_PAYMENT",
"amount": 1000,
"currency": "USDT",
"cryptoAddress": "0x9f8e7d6c5b4a39281706f5e4d3c2b1a09f8e7d6c",
"cryptoAmount": "10000000000000000000",
"cryptoNetwork": "BSC",
"cryptoCurrency": "USDT"
}Renderize o cryptoAddress como texto e QR Code. O cliente envia o token
cryptoCurrency na rede cryptoNetwork para esse endereço.
Campos principais
| Campo | Tipo | Obrigatório | Notas |
|---|---|---|---|
amount | int | sim | USDT em centavos (2 casas). 1000 = 10,00 USDT. |
currency | string | sim | USDT (ou USD, 1:1). Outras moedas são rejeitadas. |
paymentMethods | string[] | sim | ["CRYPTO"]. |
idempotencyKey | string | sim | Reenvio retorna a cobrança original. |
metadata | object | não | Campos livres. Para escolher rede/token: { "cryptoNetwork": "BSC", "cryptoCurrency": "USDT" }. |
webhookUrl | string | não | Recebe o POST de mudança de status. |
Campos da cobrança (no GET)
| Campo | Notas |
|---|---|
cryptoAddress | Endereço de depósito BEP-20 único desta cobrança. Renderize como texto e QR. |
cryptoAmount | Valor esperado em unidades base (18 casas). Divida por 1e18 para o valor humano. |
cryptoNetwork | Rede em que o cliente deve enviar (BSC). Envio em rede errada é irrecuperável. |
cryptoCurrency | Token a enviar (USDT). |
Confirmações e liquidação
Depois que o cliente envia o USDT, a PagNow detecta a transferência on-chain,
aguarda as confirmações da BSC e re-escaneia blocos recentes para se proteger
de reorganizações da rede antes de marcar a cobrança como PAID — normalmente
poucos segundos após a transferência ser minerada.
O webhook payment.completed traz o hash da transação on-chain no campo
onchainTxHash, sua prova imutável de pagamento (verificável em qualquer explorer
da BSC). Aguarde sempre o webhook para dar baixa no pedido —
transferências on-chain são irreversíveis, não há reembolso automático.
