Pular para o conteúdo
Menu da documentação

Guias

PIX com pagamento de conta

Referência: referência da API.

Quando o PIX é confirmado, o Pagaki paga um boleto ou uma guia com o saldo da mesma conta do gateway (no MVP, o Asaas). Serve, por exemplo, para o contribuinte pagar a guia do IPTU por PIX. Você não calcula tarifa de gateway: manda a conta e a sua taxa, e o Pagaki calcula quanto cobrar.

Como funciona

  1. Você informa a conta (pay_bill) e, se quiser, a sua taxa (service_fee). Para mostrar o valor antes, chame POST /v1/payments/quote.
  2. O Pagaki confere a linha digitável, escolhe o gateway, simula a conta nele e calcula o valor. O pagamento de conta nasce em waiting_payment.
  3. O pagador paga o PIX (payment.paid).
  4. O Pagaki confere o saldo, simula de novo, confere o valor e só então paga (bill_payment.processing). Sem saldo disponível, espera em waiting_funds.
  5. Sai bill_payment.paid, ou bill_payment.failed com o motivo. Falha fica esperando a sua decisão.

A composição do valor

O Pagaki calcula o valor e devolve a composição em amount_breakdown, que você só lê.

type O que é De onde vem
bill O valor que vai pagar a conta Simulação no gateway
pix_in_fee A tarifa do gateway para receber Tarifa da conta no gateway; se ele não informar, a cadastrada na instalação
bill_payment_fee A tarifa do gateway para pagar a conta Simulação no gateway
service_fee A sua taxa O service_fee enviado, mais o que amount trouxer a mais

Exemplo: guia de R$ 120,00, tarifa fixa de R$ 1,99 para receber o PIX, sem tarifa para pagar a conta, e taxa de R$ 2,00. O PIX sai por R$ 123,99.

Item Centavos
bill 12000
pix_in_fee 199
service_fee 200
amount 12399

Tarifa percentual incide sobre o total, então o Pagaki calcula "por dentro": o total é o menor valor que, tirada a tarifa, deixa a conta e a sua taxa inteiras. Item zerado não aparece.

Criar

curl -s https://api.sandbox.pagaki.com.br/v1/payments \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -H "Idempotency-Key: 0b7e5c1a-3d2f-4a6b-9c8d-7e6f5a4b3c2d" \
  -d '{
    "method": "pix",
    "description": "IPTU 2026, parcela 1",
    "external_id": "guia-778899",
    "payer": { "name": "Fulano de Tal", "document": "12345678909" },
    "service_fee": 200,
    "pay_bill": {
      "identification_field": "818000000012200001232021611280000000000007789009",
      "due_date": "2026-11-28",
      "description": "IPTU 2026, parcela 1"
    }
  }'

Quer mostrar o valor antes? Mande o mesmo corpo para POST /v1/payments/quote: nada é criado, e a resposta traz amount, gateway e amount_breakdown. Para criar com o mesmo valor, envie gateway e amount da cotação.

Prefere fixar o valor? Envie amount: o Pagaki confere que cobre tudo, e o que sobrar entra como service_fee. pay_bill.amount é opcional, só para conferir o valor da conta.

Recusa na criação Por quê
422 amount_mismatch pay_bill.amount diferente do valor lido no gateway
422 amount_insufficient amount não cobre a conta, as tarifas e a taxa
422 fees_not_configured Tarifa desconhecida: o gateway não informou e a instalação não tem cadastro
422 invalid_identification_field Linha digitável com formato ou dígito verificador errado
422 bill_overdue due_date no passado
422 bill_payment_not_supported Nenhuma instalação ativa paga contas, ou o gateway forçado não paga

O objeto payment volta com amount_breakdown e bill_payment (em waiting_payment).

Situações do pagamento de conta

Situação O que significa O que você faz
waiting_payment O PIX ainda não foi pago Nada. Se o PIX expirar, for cancelado ou falhar, vira canceled
waiting_funds O PIX foi pago, mas o saldo ainda não está disponível na conta do gateway Nada. O Pagaki consulta a cada 15 min e envia assim que houver. Sem saldo na janela (padrão 24 h), vira failed com failure.code = insufficient_balance
processing Enviado ao gateway Espere paid ou failed
unconfirmed O envio ficou sem resposta conclusiva Não reenvie. O Pagaki descobre sozinho se foi pago. Sem prova em 30 min, vira failed com failure.code = unconfirmed
paid Conta paga Dê baixa na guia
failed O gateway não pagou Decida: tentar de novo ou cancelar (abaixo)
canceled Você desistiu, ou o PIX não foi pago Nada

O bill_payment.processing traz o objeto completo; cada mudança sai como evento bill_payment.<situação>.

Decidir em failed

Nada é tentado de novo nem devolvido sozinho. O PIX continua paid, e o dinheiro fica na sua conta no gateway até você decidir.

failure.code Causa Decisão típica
amount_mismatch A simulação do gateway deu um valor diferente de pay_bill.amount (juros, multa, desconto) Confira a guia; reemita ou chame retry com o valor certo (até o valor da conta que o PIX cobriu)
insufficient_balance O saldo não ficou disponível dentro da janela de espera Regularize o saldo e chame retry
bill_rejected O gateway recusou a simulação ou a criação; failure.message traz o texto dele (conta já paga, fora do horário limite, Pague Contas não habilitado…) Leia a mensagem. Conta já paga não é tratada como paga: confira antes de decidir
bill_failed O gateway criou o pagamento e não pagou; failure.message traz os motivos dele Leia a mensagem; se a guia venceu, reemita e chame retry com a linha nova
bill_canceled Alguém cancelou o pagamento direto no gateway retry ou cancel
bill_refunded O gateway estornou depois de pago; o valor voltou ao saldo Fale com o suporte do gateway antes do retry
unconfirmed O Pagaki não conseguiu provar se o envio chegou retry procura a tentativa anterior no gateway antes de enviar: se ela pagou ou está em curso, não reenvia

Tentar de novo (pode trocar o boleto):

curl -s https://api.sandbox.pagaki.com.br/v1/bill_payments/bpay_01jbz4a1b2c3d4e5f6g7h8j9k0/retry \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -H "Idempotency-Key: 4c3b2a19-0f8e-4d7c-b6a5-948372615f0e" \
  -d '{ "identification_field": "818300000018200001232021611280000000000007788991", "amount": 12000, "due_date": "2026-12-05" }'

Sem corpo, tenta o mesmo boleto. O novo amount não pode passar do valor da conta que o PIX cobriu. Cada tentativa é um pagamento novo no gateway e aparece em attempts[].

Cancelar (o dinheiro fica na sua conta no gateway; o PIX não é devolvido):

curl -s -X POST https://api.sandbox.pagaki.com.br/v1/bill_payments/bpay_01jbz4a1b2c3d4e5f6g7h8j9k0/cancel \
  -H "Authorization: Bearer $TOKEN" -H "Idempotency-Key: 9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"

retry só em failed; cancel em waiting_payment ou failed. Fora disso: 409 invalid_state. Os dois exigem Idempotency-Key, uma por decisão.

Regras que não mudam

  • Mesma conta, sem fallback. O boleto sai da mesma instalação que recebeu o PIX.
  • Nunca paga duas vezes. Resposta inconclusiva nunca é reenviada sozinha.
  • O que sobra fica com você. Depois de pagar a conta, as tarifas e a sua taxa ficam na sua conta no gateway.
  • No sandbox do Asaas nada compensa: todo pagamento de conta termina em failed. Ver ambientes.
  • Em aberto com o Asaas: se a mesma linha digitável pode ser paga de novo depois de uma falha (asaas.md §10). O retry tenta; se o Asaas recusar, vira failed com bill_rejected.