Pix QR Code

Gere cobranças Pix dinâmicas pela API. O dinheiro cai direto na conta de recebimento da sua loja.

Cobranças Pix criadas pela API são independentes das vendas de checkout: elas não aparecem em /v1/sales, não disparam entrega automática de produto e possuem eventos próprios.

O objeto cobrança Pix

{
  "object": "pix_payment",
  "id": "3f2a9c11-1c2b-4de5-9a77-0b3f2d1e4c88",
  "status": "pending",
  "amount": 149.9,
  "description": "Mensalidade julho",
  "external_id": "pedido-10231",
  "customer_email": "cliente@exemplo.com",
  "customer": {
    "email": "cliente@exemplo.com",
    "whatsapp": "11999998888",
    "name": "Maria Silva",
    "document": "12345678900"
  },
  "metadata": { "pedido": "10231" },
  "paid_at": null,
  "livemode": true,
  "created_at": "2026-08-01T12:00:00.000Z",
  "pix": {
    "copy_paste": "00020101021226...5802BR",
    "qr_code": "00020101021226...5802BR",
    "qr_code_base64": "iVBORw0KGgoAAAANSUhEUg...",
    "ticket_url": "https://...",
    "expires_at": "2026-08-01T12:30:00.000Z"
  }
}

external_id, paid_at e livemode estão presentes na criação, na consulta, na listagem e em todos os eventos pix.*. Dentro de pix, copy_paste é o código Pix copia e cola; qr_code é mantido como alias do mesmo valor por compatibilidade. livemode é false em cobranças criadas com chaves sk_test_*.

Situações

StatusSignificado
pendingCobrança criada, aguardando pagamento.
paidPagamento confirmado.
expiredPrazo de validade encerrado sem pagamento.
canceledCobrança cancelada ou recusada.
refundedValor devolvido ao pagador.

Criar cobrança Pix

POST/api/public/v1/payments/pixscope payments:write
curl -X POST https://pitra.com.br/api/public/v1/payments/pix \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: pedido-10231" \
  -d '{
    "amount": 149.90,
    "description": "Mensalidade julho",
    "external_id": "pedido-10231",
    "expires_in": 1800,
    "customer": {
      "email": "cliente@exemplo.com",
      "whatsapp": "11999998888"
    }
  }'
CampoTipoDescrição
amountnumberObrigatório. Maior que zero, até 999999.99.
descriptionstringAté 200 caracteres. Aparece no extrato do pagador.
external_idstringSeu identificador. Único por loja.
expires_inintegerValidade em segundos: 60 a 86400. Padrão 1800.
customerobjectObrigatório. Dados de contato do pagador.
customer.emailstringObrigatório. E-mail válido do pagador.
customer.whatsappstringObrigatório. DDD + número (10 a 13 dígitos).
customer.namestringOpcional. Nome do pagador.
customer.documentstringOpcional. CPF/CNPJ do pagador.
metadataobjectDados livres devolvidos em consultas e webhooks.

Sem customer.email e customer.whatsapp a cobrança é recusada com 400 invalid_request e nenhum Pix é gerado — esses dados são obrigatórios para o suporte da loja identificar o comprador.

Resposta 201 com o objeto cobrança. Reenviar o mesmo external_id devolve 200 com a cobrança já existente, sem duplicar.

Consultar cobrança

GET/api/public/v1/payments/pix/{id}scope payments:read
curl https://pitra.com.br/api/public/v1/payments/pix/3f2a9c11-1c2b-4de5-9a77-0b3f2d1e4c88 \
  -H "Authorization: Bearer sk_live_..."

Cobrança de outra loja devolve 404 not_found.

Consultar por external_id

GET/api/public/v1/payments/pix/external/{external_id}scope payments:read
curl https://pitra.com.br/api/public/v1/payments/pix/external/pedido-10231 \
  -H "Authorization: Bearer sk_live_..."

Consulta pelo identificador que você definiu na criação — útil para ERPs, bots e CRMs que só guardam o próprio número de pedido. Sem cobrança correspondente na sua loja, a resposta é 404 not_found.

Listar cobranças

GET/api/public/v1/payments/pixscope payments:read
curl "https://pitra.com.br/api/public/v1/payments/pix?status=paid&limit=50" \
  -H "Authorization: Bearer sk_live_..."
ParâmetroTipoDescrição
limitinteger1–100, padrão 20.
starting_afterstringCursor da página anterior.
statusstringpending, paid, expired, canceled ou refunded.
external_idstringSeu identificador.

Eventos

EventoQuando ocorre
pix.createdCobrança criada com sucesso.
pix.paidPagamento confirmado.
pix.expiredPrazo encerrado sem pagamento.

O corpo do evento segue o mesmo envelope dos demais webhooks, com o objeto cobrança em data.object. A verificação de assinatura é idêntica à descrita em Assinatura.

Ambiente de teste

Chaves sk_test_* devolvem um QR Code simulado, sem qualquer movimentação financeira. Use sk_live_* para cobranças reais.

Para gerar cobranças reais a loja precisa estar com a conta de recebimento conectada no painel. Sem isso a criação devolve 400 invalid_request.

API v1 · OpenAPI 1.0.0 · SDK 0.1.0