// documentação
Documentação para desenvolvedores
Integre a NextCryptoPay em poucos minutos. Veja o formato de uma integração típica.
Desenvolvendo com um agente de IA?
Se você usa Claude Code, Codex, Cursor ou qualquer agente de IA para construir seu projeto, baixe o docs-agent.md e entregue ao seu agente — ele contém tudo o que é preciso para integrar o NextCryptoPay automaticamente.
1. Crie uma chave de API
Gere uma chave em Painel → Chaves de API. Mantenha o segredo no seu servidor, nunca no navegador.
2. Crie uma fatura
Envie via POST o valor, a moeda e a chain ao endpoint de faturas, depois redirecione o cliente para a URL de checkout retornada.
3. Receba webhooks
Enviamos um webhook assinado quando uma fatura é paga, está confirmando ou expirou. Verifique a assinatura com o seu segredo de webhook.
Autenticação
Autentique cada requisição com sua chave secreta no cabeçalho Authorization. Crie chaves por loja em Painel → Chaves de API (a chave completa é exibida uma única vez).
Criar uma fatura
Envie o valor do pedido e o ativo; a chain é opcional. Você recebe um checkoutUrl hospedado — redirecione o cliente para lá. Sem chain, o cliente escolhe a rede na página de pagamento.
Requisição
curl -X POST https://nextcryptopay.com/api/v1/invoices \
-H "Authorization: Bearer ncp_live_..." \
-H "Content-Type: application/json" \
-d '{
"orderId": "ORDER-1001",
"amount": 99.50,
"currency": "USD",
"chain": "tron",
"asset": "USDT",
"webhookUrl": "https://yourstore.com/webhooks/nextcryptopay",
"redirectUrl": "https://yourstore.com/thank-you"
}'Resposta
{
"id": "inv_abc123",
"orderId": "ORDER-1001",
"payAddress": "TJ9xH4n2k8sQw7Lm3vR5pZ1aB6cD8eF2g",
"cryptoAmount": "99.50",
"asset": "USDT",
"chain": "tron",
"status": "PENDING",
"expiresAt": "2026-06-17T10:00:00.000Z",
"checkoutUrl": "https://nextcryptopay.com/pay/inv_abc123"
}redirectUrl é para onde o cliente é enviado alguns segundos após pagar. Se omitir, é usado o URL de retorno da loja (Dashboard → Webhooks). Defina um dos dois — sem nenhum, o cliente fica na página de pagamento sem forma de voltar à sua loja. Nunca despache um pedido só porque alguém chegou a esse URL: apenas um webhook invoice.paid com assinatura verificada prova o pagamento.
Acompanhar o status do pagamento
Consulte a fatura, ou assine as atualizações ao vivo via Server-Sent Events. Status: PENDING → CONFIRMING → PAID (ou EXPIRED / PARTIALLY_PAID).
# Poll the invoice
curl https://nextcryptopay.com/api/v1/invoices/inv_abc123
# Or subscribe to live updates (Server-Sent Events)
GET https://nextcryptopay.com/api/v1/invoices/inv_abc123/streamVerificar webhooks
A cada mudança de status enviamos via POST um evento assinado à sua URL de webhook. Verifique o cabeçalho x-nextcryptopay-signature (HMAC-SHA256 do corpo bruto usando o segredo de webhook da sua loja) antes de confiar nele. Retorne 2xx em até 15s — caso contrário, tentamos novamente com backoff. Os cabeçalhos antigos x-cryptopay-* continuam sendo enviados em paralelo com valores idênticos até 31/03/2027; em código novo, prefira os nomes x-nextcryptopay-*.
import crypto from "node:crypto";
// Legacy x-cryptopay-* headers carry identical values and are still sent in
// parallel until 2027-03-31 — prefer x-nextcryptopay-* in new code.
app.post("/webhooks/nextcryptopay", (req, res) => {
const signature = req.headers["x-nextcryptopay-signature"];
const timestamp = req.headers["x-nextcryptopay-timestamp"];
// Reject stale deliveries (replay protection): within 5 minutes
if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) {
return res.status(401).end();
}
// Signature is HMAC of "timestamp.rawBody"
const expected = crypto
.createHmac("sha256", process.env.NEXTCRYPTOPAY_WEBHOOK_SECRET)
.update(timestamp + "." + req.rawBody) // raw JSON body
.digest("hex");
if (
signature.length !== expected.length ||
!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))
) {
return res.status(401).end();
}
// Dedupe by delivery id (same event may be retried)
const deliveryId = req.headers["x-nextcryptopay-delivery"];
if (alreadyProcessed(deliveryId)) return res.status(200).end();
const { event, invoice } = req.body;
if (event === "invoice.paid") fulfillOrder(invoice.orderId);
res.status(200).end(); // reply 2xx within 15s, else we retry (6 attempts, backoff)
});Chains suportadas
Tron (USDT/USDC · TRC20), Ethereum (USDT/USDC · ERC20), BSC (USDT · BEP20), TON (USDT · jetton), Bitcoin (BTC). Cada pagamento bem-sucedido tem uma taxa de plataforma, limitada por transação, cobrada do seu saldo USDT pré-pago (ou coberta pelo limite do seu plano). Consulte a página de preços para as taxas em vigor.