Skip to main content
Um desconto (discount) é a regra econômica que abate valor de uma cobrança — um percentual ou um valor fixo, com janela de validade, limite de uso e escopo de produtos. Ele habilita campanhas promocionais, cupons digitáveis no checkout e abatimentos automáticos em links de pagamento, sempre com um registro auditável de cada aplicação.
Discount ≠ Discount codeUm desconto descreve quanto abater (percentage ou fixed), por quanto tempo e onde se aplica. Um código de desconto (discount_code) é a string que o comprador digita para resgatar aquele desconto. Um desconto pode existir sem código (aplicado automaticamente via discount_id) e pode ter vários códigos apontando para ele.

Como o desconto é aplicado

O schema público completo está em Objeto discount e Objeto discount_code. A redemption é um registro interno de auditoria — ela guarda um snapshot da regra e do código no momento da cobrança e não é um recurso editável via API.

Anatomia do desconto

Tipo: percentual ou valor fixo

São mutuamente exclusivos — a forma define quais campos o objeto carrega.
O abatimento de um desconto fixed nunca passa do subtotal — um amount_off de 5000 aplicado a um subtotal de 3000 abate apenas 3000, e o total não fica negativo.

Duração

A duração descreve por quanto tempo o desconto acompanha uma cobrança recorrente (assinatura). Em cobrança avulsa, só a primeira aplicação importa.
A validade é conferida quando o desconto entra na assinatura. A partir daí, valor, percentual, escopo e duração ficam preservados no snapshot da aplicação: desativar ou expirar o desconto, ou atingir max_redemptions, bloqueia novas aplicações, mas não interrompe as já adquiridas. Em repeating, duration_in_months é uma janela de meses de calendário; por isso uma assinatura trimestral com duração de 6 meses recebe o desconto nas duas cobranças que começam dentro dessa janela.

Limites e validade

Cada cobrança (checkout, link, assinatura) recebe no máximo um desconto — a mesma cobrança não acumula dois.

Anatomia do código de desconto

O código herda a regra econômica do desconto pai (discount_id) e adiciona suas próprias condições de resgate.
Um código público ativo é único por organização. Códigos restritos a clientes podem repetir a mesma string para clientes diferentes; um código público ativo bloqueia reutilizar essa string para qualquer cliente.

Criar um desconto

POST /v1/discounts cria a regra. Para um cupom digitável, crie em seguida um discount_code apontando para o disc_*.
O contrato completo do body, com erros e variantes, está em Criar desconto.

Criar um código de desconto

Com o desconto criado, gere a string que o comprador vai digitar. O code é opcional — quando omitido, a Chargefy gera um.
O contrato completo está em Criar código de desconto.

Como o desconto é aplicado

Há dois caminhos, e eles podem coexistir no mesmo fluxo de cobrança. Ambos valem para Checkout Sessions e Links de pagamento.
1

Cupom digitável (discount_code)

O comprador digita o código no checkout. A Chargefy valida janela, limite, restrições de cliente, valor mínimo e escopo de produto e calcula o abatimento. Habilite ou oculte esse campo uma vez no Checkout Builder.
2

Desconto automático (discount_id)

Você atrela um discount_id direto ao checkout ou link de pagamento. O abatimento é aplicado sem o comprador digitar nada — útil para campanhas dirigidas e links promocionais.
O cálculo é sobre o subtotal: amount_total = amount_subtotal − amount_discount, com amount_discount nunca maior que o subtotal. O comprador pode pré-visualizar o abatimento de um cupom antes de confirmar — a sessão expõe o desconto calculado.

Casos de uso

Um desconto percentage (ex.: 20%) com um discount_code divulgado em campanha (PROMO20). Limite o alcance com max_redemptions e a janela com starts_at/expires_at. Quem digitar o cupom no checkout recebe o abatimento.
Um desconto percentage com duration=once (só a próxima cobrança), duration=repeating + duration_in_months para abater as invoices dentro desse período, ou duration=forever para acompanhar a assinatura por toda a vida dela.
Um desconto fixed (ex.: amount_off: 5000, currency: "brl" = R50).Bompara"R 50). Bom para "R 50 OFF acima de R$ 100” combinando o código com minimum_amount: 10000 e minimum_amount_currency: "brl".
Use applies_to.products com os prod_* elegíveis. O desconto só vale quando o checkout contém pelo menos um produto da lista; caso contrário é recusado.

Atualizar

O update é merge — você envia só os campos que mudam.
Depois que um desconto tem ao menos uma aplicação (redemptions_count > 0), os campos econômicos ficam congelados: type, amount_off, currency, percent_off_basis_points, duration e duration_in_months não podem mais mudar (retorna 409). Para mudar o valor, crie um desconto novo e desative o antigo. O mesmo vale para os campos de valor de um código (code, discount_id, minimum_amount, minimum_amount_currency).
Continuam editáveis a qualquer momento: name, applies_to, starts_at, expires_at, max_redemptions (nunca abaixo de redemptions_count), is_active e metadata.

Desativar e remover

DELETE /v1/discounts/{id} e DELETE /v1/discount-codes/{id} expressam “tirar de circulação”. O efeito depende do uso:
É removido de fato. A resposta é { "id": "disc_S4NsM6C27vSwguj4", "object": "discount", "deleted": true }.
Não pode sumir sem quebrar a auditoria, então é desativado (is_active = false) e a resposta é o objeto completo atualizado. Ele sai de novos fluxos, mas as aplicações passadas e seus snapshots permanecem íntegros.
Você também pode desativar diretamente com POST /v1/discounts/{id} enviando is_active: false.

Próximos passos

Objeto discount

Schema público completo e campos retornados.

Checkout Sessions

Como cupom digitável e desconto automático entram numa cobrança.

Criar um Link de pagamento

Atrelar um desconto ou habilitar cupons num link.

Assinaturas

Como duration rege o abatimento ao longo dos ciclos.

Produtos, preços e descontos

O valor que o desconto abate vem do preço.

Criar desconto (API)

Contrato do POST /v1/discounts.