Skip to main content

Visão Geral

A Chargefy permite criar descontos que podem ser aplicados em checkouts para reduzir o valor da compra. Os descontos funcionam como cupons e podem ser do tipo fixo (valor em reais) ou percentual.

Tipos de Desconto

Desconto Fixo

Reduz um valor absoluto do total da compra, em centavos.
const discount = await chargefy.discounts.create({
  name: "Desconto de Boas-Vindas",
  code: "BEMVINDO50",
  type: "fixed",
  amount: 5000,        // R$ 50,00 (em centavos)
  currency: "brl",
  organization_id: "org_xxx"
});
O valor de desconto fixo nunca ultrapassa o total da compra. Se o desconto for de R50,00eoprodutocustarR 50,00 e o produto custar R 30,00, o desconto aplicado será de R$ 30,00.

Desconto Percentual

Reduz uma porcentagem do total da compra, usando basis points (pontos base).
const discount = await chargefy.discounts.create({
  name: "Black Friday 25%",
  code: "BLACK25",
  type: "percentage",
  basis_points: 2500,  // 25.00%
  organization_id: "org_xxx"
});
Basis points: 100 basis points = 1%. Então 2500 = 25%, 1050 = 10.5%, 500 = 5%.

Duração do Desconto

Para assinaturas, você pode configurar por quanto tempo o desconto se aplica:
DuraçãoComportamento
onceAplica apenas na primeira cobrança
foreverAplica em todas as cobranças futuras
repeatingAplica por um número definido de meses (duration_in_months)
// Desconto que dura 3 meses na assinatura
const discount = await chargefy.discounts.create({
  name: "3 Meses com Desconto",
  code: "PROMO3M",
  type: "percentage",
  basis_points: 2000,  // 20%
  duration: "repeating",
  duration_in_months: 3,
  organization_id: "org_xxx"
});

Limites de Uso

Você pode configurar limites para controlar quantas vezes um desconto pode ser utilizado:
const discount = await chargefy.discounts.create({
  name: "Promoção Limitada",
  code: "LIMITADO100",
  type: "fixed",
  amount: 2000,
  currency: "brl",
  max_redemptions: 100,  // Máximo de 100 usos
  starts_at: "2026-03-01T00:00:00Z",
  ends_at: "2026-03-31T23:59:59Z",
  organization_id: "org_xxx"
});
ParâmetroDescrição
max_redemptionsNúmero máximo de vezes que o desconto pode ser usado
starts_atData de início da validade
ends_atData de fim da validade

Validar e Resgatar

Validar Código

Antes de aplicar um desconto, valide o código para verificar se ainda é válido:
const validation = await chargefy.discounts.validate({
  code: "BEMVINDO50",
  amount: 10000,  // Valor original em centavos
  organization_id: "org_xxx"
});

// Retorna:
// {
//   valid: true,
//   discount_amount: 5000,
//   final_amount: 5000,
//   discount: { ... }
// }
A validação verifica:
  • Se o código existe e não foi deletado
  • Se está dentro do período de validade (starts_at / ends_at)
  • Se não atingiu o limite máximo de usos (max_redemptions)

Resgatar Desconto

O resgate é feito atomicamente para evitar condições de corrida:
const redemption = await chargefy.discounts.redeem({
  discount_id: "disc_xxx",
  checkout_id: "checkout_xxx"
});
A operação de resgate utiliza uma função atômica no PostgreSQL para garantir que o limite de usos (max_redemptions) seja respeitado mesmo com múltiplas requisições simultâneas.

Aplicar no Checkout

Descontos podem ser aplicados durante a criação do checkout:
const checkout = await chargefy.checkouts.create({
  product_price_id: "price_xxx",
  discount_id: "disc_xxx",
  // ... outros campos
});
Ou informando o código do desconto:
const checkout = await chargefy.checkouts.create({
  product_price_id: "price_xxx",
  discount_code: "BEMVINDO50",
  // ... outros campos
});

Estatísticas

Consulte as estatísticas de uso de um desconto:
const stats = await chargefy.discounts.getStats(discountId);

// {
//   total_redemptions: 47,
//   total_discount_amount: 235000  // R$ 2.350,00 total concedido
// }

Restrições de Edição

Após o primeiro uso de um desconto, alguns campos ficam bloqueados para edição:
CampoEditável após uso?
nameSim
codeSim
max_redemptionsSim
starts_at / ends_atSim
typeNão
amount / basis_pointsNão
durationNão

Escopos de API

EscopoPermissão
discounts:readListar e visualizar descontos
discounts:writeCriar, atualizar e deletar descontos