Docs
Pix

Exiba o QR Code e acompanhe

Use os dados de pixPayment para mostrar o QR Code, o código copia e cola e o prazo, e confirme o pagamento pelo servidor.

A resposta da criação traz o bloco pixPayment:

201 Created (trecho)
{
  "id": "8b727267-bf39-48a4-91ea-eb0780cb48a9",
  "object": "payment_intent",
  "amount": 1990,
  "currency": "BRL",
  "status": "Processing",
  "pixPayment": {
    "qrCodeEmv": "EMV_RETORNADO_PELA_API",
    "qrCodeUrl": "",
    "pixCopyPaste": "CODIGO_RETORNADO_PELA_API",
    "expiresAt": "2026-09-08T15:30:00Z",
    "endToEndId": "",
    "status": "PENDING"
  }
}
CampoUso no checkout
qrCodeEmvGere a imagem do QR Code a partir do conteúdo completo, sem alterá-lo.
pixCopyPasteOfereça o botão de copiar com o texto completo.
expiresAtMostre o prazo no fuso do comprador. Depois dele, retire a oferta de pagamento.
endToEndIdIdentificador da transferência no Banco Central. Vem vazio na criação e é preenchido na confirmação.
qrCodeUrlPode vir vazio. Não dependa dele: gere a imagem a partir de qrCodeEmv.
Gerar a imagem do QR Code no navegador (exemplo com a biblioteca qrcode)
import QRCode from 'qrcode';

const dataUrl = await QRCode.toDataURL(pixPayment.qrCodeEmv, { errorCorrectionLevel: 'M', margin: 1 });
document.querySelector('#pix-qrcode').src = dataUrl;

Antes de exibir

Confira se pixPayment e qrCodeEmv vieram preenchidos. Se a cobrança voltar Processing sem esses dados, mantenha o pedido em processamento e consulte o mesmo PaymentIntent. Se persistir, fale com a equipe de integração. Não crie outra cobrança automaticamente: isso pode gerar duas cobranças para o mesmo pedido.

Confirme o pagamento

Conclua o pedido quando o servidor receber um payment_intent.succeeded com assinatura válida, ou quando a consulta devolver status: "Succeeded". Gerar o QR Code, o clique em "copiar" e o campo confirmedAt não comprovam pagamento.

Consulta
curl "$DM_API_BASE/api/v1/paymentintents/8b727267-bf39-48a4-91ea-eb0780cb48a9" \
  -H "Authorization: $DM_API_KEY"

Expiração e pagamento tardio

Depois de expiresAt, a cobrança passa a Canceled na consulta. Não há webhook de expiração.

Mesmo depois do prazo, continue aceitando confirmações: um Pix pago no limite do prazo pode ser confirmado depois, e a cobrança muda de Canceled para Succeeded, com webhook payment_intent.succeeded. Trate esse caso no seu pedido, por exemplo reabrindo-o ou estornando o pagamento se o produto não estiver mais disponível.

Teste no sandbox

CenárioComo provocar
Pix pendenteCrie com um nome comum.
Pix confirmadoCrie com customer.name: "APPROVED", onde a simulação estiver habilitada.
Pix expiradoCrie com expiresInMinutes: 1 e não pague.

Os códigos devolvidos no sandbox são ilustrativos e não podem ser pagos em um banco real.

Nesta página