PIX via XPayments S2S
Crie o PIX no backend, receba Copia e Cola + QR Code e deixe a XPayments tratar routing, provider e confirmação. O Merchant integra apenas com a API XPayments.
Auth
xp_live_* no backend. Nunca no browser.
Resposta
copyPaste, pixString e QR para apresentação.
Finalidade
pending não é pago. Aguarde succeeded/webhook.
Provider-neutral
Não exponha nem codifique credenciais do provider.
01 · Criar
POST /api/v1/payments/charge
O amount usa minor units: 500 = R$5,00. Use CPF/CNPJ sem formatação em customer.document e uma reference única para a tentativa lógica.
curl -X POST \
https://api.xpayments.digital/api/v1/payments/charge \
-H "x-api-key: xp_live_xxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"amount": 500,
"currency": "BRL",
"payment_method_types": ["pix"],
"reference": "ORDER-BR-10001",
"customer": {
"name": "Nome do Cliente",
"document": "12345678909"
},
"metadata": {
"order_id": "ORDER-BR-10001",
"description": "Pagamento do pedido 10001"
}
}'02 · Consumir a action
Não gere outro PIX para criar o QR
A resposta já contém o BR Code e representações gráficas. Guarde transactionId e reference, mostre action.copyPaste e renderize action.qrCodeBase64 ou um QR local a partir de action.copyPaste.
{
"success": true,
"transactionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"reference": "ORDER-BR-10001",
"status": "pending",
"method": "pix",
"action": {
"type": "pix",
"copyPaste": "000201...",
"pixString": "000201...",
"qrCode": "data:image/png;base64,...",
"qrCodeBase64": "data:image/png;base64,...",
"qrCodeUrl": "https://..."
}
}03 · Node.js
Implementação backend
const payload = {
amount: 500, // R$ 5,00
currency: "BRL",
payment_method_types: ["pix"],
reference: order.id,
customer: {
name: customer.name,
document: customer.document.replace(/\D/g, ""),
},
metadata: {
order_id: order.id,
description: `Pedido ${order.id}`,
},
};
const r = await fetch("https://api.xpayments.digital/api/v1/payments/charge", {
method: "POST",
headers: {
"x-api-key": process.env.XPAYMENTS_API_KEY!,
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
});
const payment = await r.json();
if (!r.ok) throw new Error(payment?.error?.code ?? "PIX_CREATE_FAILED");
return {
transactionId: payment.transactionId,
status: payment.status,
copyPaste: payment.action?.copyPaste,
qrCode: payment.action?.qrCodeBase64,
};04 · Webhook
Confirmação final
A entrega do produto/serviço deve ser acionada pelo estado financeiro final. O payload recebido deve ser verificado, deduplicado e processado de forma idempotente.
{
"event": "payment_intent.succeeded",
"transaction_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"reference": "ORDER-BR-10001",
"amount": 5,
"currency": "BRL",
"status": "succeeded",
"method": "pix",
"timestamp": "2026-09-10T04:00:00.000Z"
}Quer que uma IA implemente isto no seu projeto?
Abra o guia de integração com IA, copie o prompt PIX e cole no ChatGPT, Claude, Gemini, Cursor, Z.AI ou outro agente que esteja a desenvolver o seu checkout.
Copiar prompt de integração PIX →