Visão geral
Cada ciclo de uma assinatura gera uma fatura. A fatura tem os próprios itens, descontos, pagamentos e status, e pode receber mais de uma tentativa de cobrança.
Para listar as faturas de uma assinatura, use
GET /v2/subscriptions/{id}/invoices.
As rotas de fatura só encontram faturas de assinaturas.
Status da fatura
Enquanto a fatura está em aberto ou recusada, o status reflete a cobrança mais recente. Uma fatura
failed pode receber uma nova cobrança com Pagar fatura e passar a processing, requires_action ou paid.Campos da fatura
A fatura informa o valor cobrado, em real. Cada fatura tem uma única
exchange_rate: uma nova tentativa de cobrança reaproveita a cotação da primeira cobrança da fatura, em vez de converter de novo. O preço acordado, na moeda da assinatura, fica na assinatura.Os items e os descontos e acréscimos fixed também saem em real, convertidos pela mesma exchange_rate. O tipo percentage não é convertido, porque percentual não tem moeda. Em faturas em BRL nada é convertido.A soma que fecha ao centavo, em BRL e em moeda estrangeira, é a dos campos conciliados:Σ items[].amount_total − Σ discounts[].amount_applied + Σ increments[].amount_applied = amountSomar items[].amount × quantity (os valores unitários) não tem essa garantia: numa fatura em moeda estrangeira, o resultado pode divergir em centavos.- Desconto maior que os itens: o total dos descontos aplicados é limitado ao valor dos itens. Nesse caso, o
amount_appliedfica menor que ovaluedeclarado, e o limite é repartido entre os descontos na proporção do valor declarado de cada um. - Acréscimos não têm limite e podem superar o valor dos itens.
Ação pendente (next_action)
Uma fatura em requires_action nem sempre traz um next_action: quando o código de verificação já foi confirmado ou expirou, o campo vem null. Trate o nulo em vez de assumir que o objeto existe.
Quando a análise de fraude pede verificação, nada é cobrado até a confirmação do código:
Motivo da recusa (failure_reason)
Exemplo de fatura paga
Resposta (HTTP 200)
Pagar uma fatura em aberto
Quando uma fatura é recusada, a assinatura ficapast_due e recebe novas tentativas automáticas. Você também pode cobrar a fatura na hora, com outro cartão ou PIX:
Request — POST /v2/invoices/ord_7Hk2Pq9Xm4Ln8Rt3/pay
200 com a fatura atualizada (em geral processing para cartão ou requires_action para PIX), ou 402 quando a nova cobrança é recusada.
Só é possível pagar uma fatura pendente ou recusada de uma assinatura
active, past_due ou suspended. Nos demais casos, a resposta é 422 (invoice_not_payable).O PayPal processa apenas cobranças em
BRL. Uma fatura de assinatura com currency diferente de BRL cobrada pelo PayPal é recusada, mesmo com a conversão para real: a resposta é 402 com failure_reason, como qualquer recusa de pagamento, e não um erro de requisição.Código de verificação
- A fatura fica
requires_actioncomnext_action.type = "otp_confirmation". - O comprador recebe o código.
- Você envia o código em
POST /v2/invoices/{id}/confirm:{ "code": "123456" }. - A cobrança é retomada e a fatura passa a
processing(ou402se for recusada).
Webhooks
Faturas de assinaturas criadas pela v2 enviam eventos no formato v2, com a fatura emdata:
Veja Eventos de fatura.
Uma fatura paga gera
invoice.paid, e não charge.paid. O estorno de uma fatura é notificado por eventos de cobrança (charge.refunded ou charge.partial_refunded).Erros específicos
Veja o catálogo completo em Erros.
