PagNow
Pagamentos

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

CampoTipoObrigatórioNotas
amountintsimUSDT em centavos (2 casas). 1000 = 10,00 USDT.
currencystringsimUSDT (ou USD, 1:1). Outras moedas são rejeitadas.
paymentMethodsstring[]sim["CRYPTO"].
idempotencyKeystringsimReenvio retorna a cobrança original.
metadataobjectnãoCampos livres. Para escolher rede/token: { "cryptoNetwork": "BSC", "cryptoCurrency": "USDT" }.
webhookUrlstringnãoRecebe o POST de mudança de status.

Campos da cobrança (no GET)

CampoNotas
cryptoAddressEndereço de depósito BEP-20 único desta cobrança. Renderize como texto e QR.
cryptoAmountValor esperado em unidades base (18 casas). Divida por 1e18 para o valor humano.
cryptoNetworkRede em que o cliente deve enviar (BSC). Envio em rede errada é irrecuperável.
cryptoCurrencyToken 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.

Nesta página