Assinaturas
Criar uma assinatura
Cria uma subscription.
Cria uma subscription para um customer. Sem trial, a Chargefy cria a primeira
invoice e, por padrão, tenta cobrá-la no mesmo request quando existe um payment
method salvo. Se o pagamento passar, a resposta já traz a subscription
Importada com
active; se falhar, o comportamento depende de payment_behavior.
Só dois campos são obrigatórios: customer e items. Todo o resto tem
default ou é resolvido pela Chargefy — veja
o que você não precisa mandar.
string
required
Customer da subscription (
cus_*).array
required
Itens recorrentes da assinatura — pelo menos um. Cada item aponta para um
preço de exatamente uma destas duas formas:
price— ID de um preço recorrente do catálogo (price_*). É o caminho normal.price_data— preço definido na hora, sem passar pelo catálogo.
product não
funciona — o item exige o preço, e o preço default do produto não é
resolvido automaticamente: envie o ID dele em price.Todos os itens precisam ter a mesma moeda e o mesmo intervalo — é
deles que a assinatura herda moeda e cadência.string
Payment method salvo (
pm_*). Quando enviado, a primeira cobrança é tentada
no mesmo request, exceto com payment_behavior: "default_incomplete".string
default:"allow_incomplete"
Controla a primeira cobrança de uma subscription sem trial quando
collection_method é charge_automatically e a primeira invoice tem valor
a pagar.allow_incomplete(padrão) — tenta cobrar no mesmo request. Se passar, retorna a subscriptionactive; se falhar ou não houver payment method, retorna200com a subscriptionincomplete, a invoice aberta e a janela de 23 horas para recuperação.default_incomplete— não tenta cobrar no create. Retorna200com a subscriptionincompletee o payment intent aguardando confirmação.error_if_incomplete— tenta cobrar no mesmo request. Se não conseguir concluir o primeiro pagamento, retorna402comtype: "card_error"e a subscription não é criada como recurso público.
pending_if_incomplete é exclusivo de updates e retorna 400 quando usado
no create. Em trial, send_invoice ou invoice de valor zero, não existe
pagamento inicial para esse campo bloquear.string
Forma de cobrança de cada ciclo. Padrão:
charge_automatically.charge_automatically(padrão) — cada ciclo é cobrado automaticamente no payment method padrão da assinatura.send_invoice— a cada ciclo a fatura é emitida com um link de pagamento e cobrada manualmente; o vencimento é controlado pordays_until_due.
integer
Dias até vencimento quando
collection_method é send_invoice. O vencimento
de cada ciclo é ancorado ao meio-dia UTC do dia alvo — veja Datas, fusos e
moedas.string
Desconto aplicado às invoices da subscription.
string
Timestamp ISO 8601 em que a subscription termina. Use para vender com prazo —
contrato com vigência, plano com data de encerramento combinada. Na data, a
subscription encerra sozinha.Precisa estar no futuro. Use apenas um entre
cancel_at e
cancel_at_period_end.boolean
default:"false"
true faz a subscription encerrar no fim do primeiro período, sem renovar.
É a forma de vender um período contratado sem calcular a data: um plano anual
entregue como um ano.A data resultante aparece em cancel_at na resposta. Use apenas um entre
cancel_at_period_end e cancel_at.Sem nenhum dos dois, a subscription renova indefinidamente até ser cancelada.
Em uma subscription com trial, se
default_payment_method não for enviado, a
resposta inclui pending_setup_intent. Busque esse setup intent para obter o
client_secret e confirmar um cartão antes do fim do trial.integer
Dias de trial. Durante o trial a subscription fica
trialing. Use apenas um
entre trial_period_days e trial_end.string
Timestamp ISO 8601 exato para o fim do trial. Use apenas um entre
trial_end
e trial_period_days.object
Política de fim de trial.
object
Metadata livre.
O que você não precisa mandar
- Moeda e cadência — a assinatura herda dos itens. Por isso todos os itens precisam ter a mesma moeda e o mesmo intervalo; misturar dá erro 400.
- Trial configurado no preço — se o
pricetemtrial_period_daysno catálogo, a assinatura já nasce em trial sem você mandar nada. Se dois itens tiverem trials diferentes, a API pedetrial_period_daysexplícito. - Primeira cobrança — com
default_payment_method, a cobrança é tentada no mesmo request e a resposta já reflete o resultado. Sem cartão e sem trial,allow_incompleteretorna a assinaturaincompletecom a invoice aberta; cobre pela página hospedada ou tente novamente pelo endpointPOST /v1/invoices/{id}/pay. Com trial e sem cartão, a resposta trazpending_setup_intentpara coletar o cartão antes do fim do trial. - Descrição dos itens — vem do nome do preço ou do produto quando você
não manda
description.
Importar uma assinatura existente
Para migrar assinaturas ativas de outro sistema de cobrança, envie os três campos abaixo. A assinatura nasceactive com o período real preservado e sem
cobrar o período atual (já cobrado na origem) — nenhuma invoice é criada agora. A
primeira cobrança da Chargefy acontece no próximo ciclo (billing_cycle_anchor).
Sem default_payment_method, a assinatura fica em send_invoice: no próximo ciclo
uma invoice em aberto é gerada e a assinatura permanece active (o cartão pode ser
adicionado depois). Combine com o header Idempotency-Key
para reimportar em lote com segurança.
string
Timestamp ISO 8601 do início do período atual (já cobrado na origem). Vira
current_period_start e start_date. Deve estar no passado. A presença desse
campo ativa o modo de importação.string
Timestamp ISO 8601 da próxima cobrança. Vira
current_period_end e
next_billing_at. Deve estar no futuro. Obrigatório ao importar.string
Obrigatório ao importar e deve ser
none — confirma que o período atual não é
cobrado novamente (já foi cobrado na origem).Importar uma assinatura ainda em trial: envie
trial_end (timestamp ISO
futuro) no lugar de billing_cycle_anchor. A assinatura nasce trialing com
trial_start = backdate_start_date, e a primeira cobrança acontece no fim
do trial. trial_settings.end_behavior controla o que ocorre se o trial
terminar sem payment method.Importar uma assinatura já cancelada (histórico): envie
canceled_at
(timestamp ISO passado) no lugar de billing_cycle_anchor. A assinatura nasce
canceled — só um registro de histórico: não gera cobrança, job nem webhook.Resultado da primeira cobrança
Comallow_incomplete, a resposta é sempre 200: active quando a cobrança
passa e incomplete quando ela precisa ser recuperada. Com
error_if_incomplete, uma cobrança recusada retorna 402 e não existe uma
subscription para consultar ou recuperar depois. Repetir o request com a mesma
Idempotency-Key devolve o mesmo resultado.

