Skip to main content
POST
Simular a troca de plano
POST /subscriptions/:id/change-plan/preview Faz parte do recurso Assinaturas — o conceito e os dez estados estão lá. Roda a mesma conta de trocar o plano, sem efeito nenhum: nada é cobrado, agendado ou alterado. O corpo é idêntico ao da troca real. Existe para uma coisa: a tela onde o cliente escolhe o plano poder mostrar o valor antes do botão de confirmar.

O que volta

netAmount é o que sairia de fatura agora, em centavos — o mesmo número que a troca real cobraria. Numa troca que seria agendada para a virada, ele é zero. lines traz as duas pernas do rateio separadas: o crédito pelo que resta do plano atual e o débito do novo. Cada valor é positivo — o sinal está em kind, que vale credit ou debit. Some-as com o sinal e você chega no netAmount. effectiveAt e effectiveDate dizem quando a troca valeria: agora, ou na virada do ciclo. É por aí que a sua tela decide entre “você será cobrado hoje” e “a mudança entra em DD/MM”. isDowngrade diz se o destino é mais barato que o plano atual.
A simulação não pode divergir da execução. As duas usam o mesmo cálculo internamente — se o valor mostrado aqui não fosse o cobrado depois, a tela viraria mentira.

Recusa pelos mesmos motivos da troca real

Destino incompatível, assinatura em estado que não permite, rebaixamento pedido como imediato: tudo responde 409 aqui também, com o mesmo motivo. É o principal ganho de chamar a simulação: o erro aparece na hora de escolher o plano, não na de confirmar.
É POST porque leva corpo, não porque muda algo. A rota é leitura pura, sem efeito colateral — chamá-la duas vezes com o mesmo corpo devolve o mesmo resultado, e ela não aceita Idempotency-Key por não precisar.

Authorizations

x-api-key
string
header
required

API Key da Credential (gerada no Backoffice)

Path Parameters

id
string
required

ID da assinatura

Body

application/json
planId
string

Plano de destino. Ausente ⇒ o destino é avulso e items é obrigatório.

Minimum string length: 1
items
object[]

Itens do destino avulso (referência ou inline). Ignorado quando há planId.

itemOverrides
object

Override de quantidade por componente do plano destino.

effectiveAt
enum<string>

Quando a troca vale. Ausente ⇒ imediata para plano mais caro, na virada para mais barato. Pedir now num plano mais barato é recusado.

Available options:
now,
period_end
prorationBehavior
enum<string>
default:create_prorations

none troca agora sem cobrar a diferença (cortesia). Só vale com effectiveAt=now.

Available options:
create_prorations,
none

Response

Simulação da troca