Skip to main content

Visão geral

Uma assinatura cobra o cliente automaticamente a cada ciclo. Cada ciclo gera uma fatura, com os próprios pagamentos e status. Todos os valores são em centavos (R$ 100,00 = 10000). O id da assinatura tem o formato sub_....

Intervalo de cobrança

O ciclo é definido por interval × interval_count: O intervalo total pode ter no máximo 365 dias. Acima disso, a resposta é 422 com param: "interval_count".
Não existe mês de calendário. Uma assinatura “mensal” é interval: "day" com interval_count: 30, e a data de cobrança desliza em relação ao calendário (30 dias nem sempre caem no mesmo dia do mês).

Campos da assinatura

Cliente (customer)

Itens (items)

Pagamento (payment)

¹ Obrigatório quando payment.type é card e payment.card.token não é enviado.
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.

Descontos e acréscimos

Use discounts e increments para alterar o valor de faturas específicas:
Desconto de R$ 10,00 na primeira fatura e acréscimo de 10% na segunda
Descontos e acréscimos não podem ser combinados com split. Enviar os dois retorna 422 com param: "split".

Split

Divida o valor de cada fatura entre recebedores da sua conta com a lista split (de 1 a 10 recebedores): Quando o split está habilitado na plataforma, as regras abaixo são validadas na criação, e não só na primeira cobrança. Com o split desabilitado, elas não são verificadas:
  • A soma dos amount do split deve ser igual ao total dos itens.
  • Exatamente um recebedor deve ter charge_processing_fee: true.
  • Pelo menos um recebedor deve ter charge_remainder_fee: true.
  • Pelo menos um recebedor deve ter liable: true.
  • O receiver_code não pode se repetir, deve pertencer à sua conta e estar apto a receber.
Split entre dois recebedores

Análise de fraude

A primeira cobrança passa pela análise de fraude:
  • Aprovada: a cobrança segue normalmente.
  • Verificação necessária: a assinatura fica incomplete e a fatura fica requires_action com next_action.type = "otp_confirmation". Nada é cobrado até o comprador informar o código em Confirmar código de verificação da fatura.
  • Negada: a resposta é 402, a assinatura fica incomplete_expired e latest_invoice.failure_reason.code é fraud_suspected.
Para pular a análise, envie fraud_analysis:
O reason é obrigatório quando skip é true e aceita upsell, one_click, trusted_customer ou external_analysis. Pular a análise exige permissão da conta; sem ela, a resposta é 422 (fraud_bypass_not_allowed).

Status da assinatura


Ciclo de vida


Exemplo: assinatura quinzenal com cartão

Request
Resposta (HTTP 201)
201 não significa pago. A primeira fatura acima está em processing. Quando a cobrança é confirmada, a assinatura passa a active, invoices_paid passa a 1 e latest_invoice.status passa a paid. Acompanhe pelos webhooks.
O payment_method.card.token é o id do cartão salvo. Use-o para alterar o meio de pagamento ou pagar uma fatura sem reenviar os dados do cartão.

Campos da resposta

A assinatura é um contrato de preço, não uma cobrança: o preço foi acordado em uma moeda e não muda porque o câmbio mudou. Por isso amount, items, discounts e increments da assinatura ficam na moeda de currency. O valor cobrado de cada ciclo está nas faturas, que respondem em BRL, com original_amount, original_currency e exchange_rate.

Webhooks

Assinaturas criadas pela v2 enviam os eventos no formato v2. Assinaturas criadas pela v1 continuam no formato v1.
  • Eventos de assinatura: subscription.canceled, subscription.delayed, subscription.regularized, subscription.suspended e subscription.completed.
  • Eventos de fatura: invoice.created, invoice.paid e invoice.failed.
Não existe subscription.created: a primeira fatura já vem na resposta do POST. O invoice.created é enviado apenas nas renovações. Uma fatura paga gera invoice.paid, e não charge.paid.

Erros específicos

Veja o catálogo completo em Erros.