Skip to main content
Um payment intent representa uma cobrança ao longo de todo o seu ciclo de vida — da intenção de cobrar até o desfecho final. Ele concentra num só objeto o valor, a moeda, o customer, os métodos permitidos, a tentativa mais recente, o status atual e a próxima ação que cabe ao comprador. É por ele que o seu sistema sabe se o dinheiro entrou, está em trânsito ou foi recusado.

Implementar Payment Intents

Passo a passo com PIX, cartão salvo, webhook e estado local.

Contrato do objeto

Campos, tipos, enums, timestamps e payload completo.
Payment Intent ≠ Charge ≠ Cadastro de cartãoO payment intent é o processo da cobrança — vive por todo o ciclo. Cada tentativa concreta de mover dinheiro vira uma charge, e o intent aponta a mais recente em latest_charge. Já um cadastro de cartão (setup_intent) apenas salva um cartão para uso futuro, sem cobrar ou reservar limite.

Como os recursos se relacionam

O schema público completo está em Objeto Payment Intent.

Para que serve

Use payment intents quando você quer controlar a cobrança diretamente pela API, sem depender de uma Checkout Session:
  • você tem Checkout white-label e quer confirmar a cobrança via API;
  • precisa cobrar um meio de pagamento salvo (payment_method);
  • quer separar a criação da cobrança da confirmação;
  • precisa autorizar agora e capturar depois (cartão);
  • quer acompanhar tentativas, falhas e sucesso de forma previsível, reagindo por webhook.
Quem prefere uma página de pagamento pronta e hospedada não precisa orquestrar o intent manualmente — uma Checkout Session cria e confirma o payment intent por baixo dos panos.

Práticas de integração

  • Crie um Payment Intent quando o valor da compra estiver definido.
  • Reutilize o mesmo intent quando o comprador retomar a mesma tentativa.
  • Envie Idempotency-Key em escritas que podem ser repetidas após timeout ou falha de rede.
  • Mantenha a API key no servidor e use metadata apenas para referências como o ID do pedido, nunca para regra de negócio ou dado sensível.
  • Confirme o resultado por webhook; retorno do navegador não prova pagamento.

Anatomia do payment intent

Ciclo de vida e status

O status reflete o que falta para concluir o pagamento. Cartão costuma resolver na hora; PIX e boleto ficam pendentes até a confirmação assíncrona chegar.
Numa cobrança de cartão confirmada, latest_charge aponta a tentativa e last_payment_error registra o motivo quando ela é recusada. A recusa não encerra o intent: ele volta a requires_payment_method e o mesmo objeto aceita nova confirmação — com o cartão corrigido ou outro cartão. Cada tentativa executada vira uma charge, até o limite de 10 por intent.

Como funciona

1

Crie o payment intent

Informe amount, currency, customer e payment_method_types. Sem método definido, ele nasce em requires_payment_method; com método salvo ou PIX, já em requires_confirmation. O create direto aceita cartão e Pix; intents de boleto são materializados por checkout hospedado ou invoice.
2

Confirme a cobrança

POST /v1/payment-intents/{id}/confirm inicia a tentativa. Você também pode criar e confirmar de uma vez com confirm: true no create.
3

Apresente a próxima ação (se houver)

Pix direto retorna next_action com o QR code. Um intent de boleto criado por checkout hospedado ou invoice pode trazer a linha digitável. Mostre a ação ao comprador e aguarde a confirmação assíncrona.
4

Reaja ao resultado

O intent termina em succeeded, volta para requires_payment_method (recusa), fica em requires_capture (captura manual) ou em canceled. Confie nos webhooks para liberar o produto.

Criar e confirmar

O payment_method_types aceita credit_card e pix no create direto pela API; boleto é resolvido nos fluxos hospedados de checkout e fatura. Cada caminho de criação tem um comportamento distinto.

(a) Cartão salvo, cobrando na hora

Passe um payment_method salvo do customer e confirm: true. O cartão resolve de forma síncrona.

(b) PIX, com QR code para o comprador

PIX nasce em requires_confirmation. Ao confirmar, o intent vai para pending e devolve o next_action com o código a exibir.

(c) Cartão a definir, parcelado

Sem payment_method, o intent nasce em requires_payment_method. Defina o número de parcelas em payment_method_options.credit_card.installments — o amount final reflete os juros aplicados.
installments.count vai de 1 a 12 e respeita um teto calculado pelo valor da cobrança. Quando omitido, usa 1. has_interest define quem absorve o juro: true faz o comprador pagar o acréscimo e false mantém a venda sem juros para o comprador. Quando omitido, vale a configuração da organização. Os juros de parcelamento aparecem em amount_details.

Próxima ação do comprador

Métodos assíncronos preenchem next_action. Use o type para decidir o que renderizar.
Traz qr_code (código EMV copia-e-cola), qr_code_url (imagem do QR, quando disponível) e expires_at. Exiba o QR e o botão de copiar; o pagamento confirma de forma assíncrona.
Traz hosted_voucher_url, pdf, number (linha digitável), barcode e expires_at. O boleto pode ser regerado enquanto está pending com POST /v1/payment-intents/{id}/regenerate_boleto.
Não trate next_action ausente como pagamento confirmado. Quem confirma o sucesso de PIX e boleto é o webhook payment.intent.succeeded, não a resposta síncrona da confirmação.

Captura manual

Com capture_method: "manual" (hoje, somente credit_card), a confirmação autoriza o valor e o intent fica em requires_capture, com amount_capturable preenchido. Você captura depois:
Cancelar um intent em requires_capture libera a autorização do cartão. A captura e o cancelamento retornam o payment intent completo atualizado.

Atualizar e cancelar

Depois de confirmado e pago, o payment intent é imutável. O update só vale enquanto a cobrança ainda não saiu — para reverter dinheiro já recebido, o caminho é um reembolso sobre a charge.

Eventos

Para liberar produto, crédito, assinatura ou acesso, prefira reagir por webhook em vez de depender só da resposta síncrona:

Próximos passos

Objeto payment_intent

Schema público completo e campos retornados.

Charges

A tentativa concreta de cobrança gerada pelo intent.

Criar payment intent (API)

Contrato do POST /v1/payment-intents.

Checkout Sessions

Página hospedada que cria e confirma o intent por você.

Entrega de webhooks

Assinatura, timeout, retries, duplicação e ordem.