incomplete: o acordo de cobrança recorrente existe, mas o relógio do faturamento só começa a contar depois que a primeira cobrança for paga. Esse estado é a porta de entrada de toda assinatura paga — é nele que a primeira fatura é aberta e o pagamento inicial é confirmado.
incomplete é transitório, não um erro.Ele significa “a assinatura foi registrada, mas ainda estou aguardando o primeiro pagamento”. Não libere o produto ou o acesso enquanto a subscription estiver incomplete — espere subscription.updated com data.object.status: "active".O que a Chargefy cria junto
No mesmoPOST /v1/subscriptions, três objetos nascem em cadeia. A subscription é só a ponta visível:
| Objeto | Estado inicial | Papel |
|---|---|---|
subscription | incomplete | O acordo recorrente. Guarda items, currency, trial_* e o default_payment_method; a cadência vem de items.data[].recurring. |
invoice | open | A primeira fatura (billing_reason: "subscription_create"), já criada com o valor total do primeiro ciclo. |
payment_intent | requires_confirmation ou requires_payment_method | A cobrança que move o dinheiro da primeira fatura. Veja Payment Intents. |
O
payment_intent nasce em requires_confirmation quando você passou default_payment_method na criação — nesse caso a Chargefy já enfileira a tentativa de cobrança automaticamente. Sem método padrão, ele nasce em requires_payment_method e fica aguardando você definir o meio de pagamento e confirmar.Ciclo de vida do incomplete
A partir de incomplete, só existem dois desfechos para o primeiro ciclo: a cobrança fecha e a subscription vira active, ou ela expira por inação.
| Status | Quando ocorre | É terminal? |
|---|---|---|
incomplete | Subscription criada sem trial; aguardando a primeira cobrança. | Não |
trialing | Subscription criada com trial_period_days; a primeira cobrança só ocorre no fim do trial. | Não |
active | A primeira cobrança (ou a do fim do trial) foi paga. Faturamento recorrente em dia. | Não |
incomplete_expired | A primeira cobrança não fechou dentro de 23 horas. | Sim |
past_due | Uma cobrança recorrente falhou ou uma invoice de fim de trial foi criada sem método de pagamento. | Não |
unpaid | A cobrança foi marcada como não recuperável após política de cobrança/retry. | Não |
canceled | A subscription foi cancelada. | Sim |
paused | Trial terminou sem método de pagamento e a política escolhida foi pausar a subscription. | Não |
Da criação até active
Crie a subscription com um método de pagamento padrão
Passe A resposta já volta com
default_payment_method no create. A subscription nasce incomplete, a primeira fatura abre e a Chargefy enfileira a cobrança automaticamente no método informado.status: "incomplete" — o pagamento ainda não fechou de forma síncrona.Aguarde a confirmação da primeira cobrança
Cartão costuma resolver na hora; PIX e boleto ficam pendentes até a confirmação assíncrona chegar. Acompanhe o desfecho da cobrança pelos eventos do
payment_intent, não pela resposta do create.Sem método padrão na criação
Se você criar a subscription semdefault_payment_method, o payment_intent da primeira fatura nasce em requires_payment_method e nada é cobrado automaticamente. Você precisa definir o meio de pagamento e confirmar a cobrança você mesmo — por exemplo, conduzindo o comprador por um fluxo de Checkout Session ou orquestrando o payment intent diretamente. Enquanto a primeira cobrança não fechar, a subscription permanece incomplete.
Eventos que você recebe
A criação e a transição disparam uma sequência previsível de webhooks. Reaja a eles em vez de depender da resposta síncrona do create.| Momento | Evento | O que carrega |
|---|---|---|
| Subscription criada | subscription.created | A subscription completa em data.object, com status: "incomplete". |
| Primeira fatura aberta | invoice.created | A fatura subscription_create. |
| Cobrança iniciada | payment.intent.created | O intent da primeira cobrança. |
| Primeira cobrança paga | payment.intent.succeeded | A cobrança concluiu. |
| Subscription ativada | subscription.updated | data.object.status vem como active e data.previous_attributes.status traz incomplete. |
Na ativação, o
subscription.updated traz data.previous_attributes com { "status": "incomplete" } e o data.object com status: "active".Quando a primeira cobrança não fecha
Se a primeira cobrança não for paga em até 23 horas, uma rotina agendada expira a subscription. Nesse passo, em cadeia:A primeira fatura é anulada
A fatura
subscription_create que estava open passa para void e dispara invoice.voided.subscription.updated com data.previous_attributes.status = "incomplete" e data.object.status = "incomplete_expired".
incomplete vs past_due vs unpaid
É comum confundir o estado da primeira cobrança com o das renovações. A regra é direta:
| Cenário | Status resultante |
|---|---|
| Primeira cobrança ainda não fechou | incomplete |
| Primeira cobrança não fechou em 23h | incomplete_expired |
| Cobrança de renovação falhou | past_due |
| Retry/política de cobrança esgotada | unpaid |
past_due aparece em cobranças de renovação (billing_reason: "subscription_cycle") ou no fim de trial com trial_settings.end_behavior.missing_payment_method: "create_invoice" sem método de pagamento. Ele nunca decorre da primeira cobrança — a primeira só conhece incomplete, active e incomplete_expired.E o trial?
Uma subscription criada comtrial_period_days ou trial_end não passa por incomplete. Ela nasce trialing, grava trial_start/trial_end e a primeira cobrança só acontece no fim do trial. Se não houver método de pagamento salvo nesse momento, trial_settings.end_behavior.missing_payment_method decide se a Chargefy cria a invoice (create_invoice), pausa sem gerar invoice (pause) ou cancela a assinatura (cancel).
Próximos passos
Objeto subscription
Schema público completo, todos os status e os campos retornados.
Payment Intents
A cobrança que confirma a primeira fatura e leva a subscription a
active.Checkout Sessions
Página hospedada que cria a subscription e confirma a primeira cobrança por você.
Criar subscription (API)
Contrato do
POST /v1/subscriptions.
