Cupons

Criar Cupom

Cria um cupom de desconto ou de período extra.

Um cupom PERCENTAGE ou FIXED desconta valor da cobrança. Um cupom EXTRA_PERIOD soma dias ou meses à data da próxima cobrança da assinatura, sem gerar cobrança no período pulado — por exemplo, um cupom de "1 mês grátis" numa assinatura mensal faz a próxima cobrança ocorrer 2 meses depois da anterior, em vez de 1.

O campo maxCycles controla em quantos ciclos recorrentes o benefício se repete: com maxCycles=3, os 3 próximos ciclos recebem o desconto (ou o período extra); a partir do 4º, a cobrança volta ao normal. Deixe vazio para o cupom valer em todos os ciclos, até a assinatura ser cancelada.

EXTRA_PERIOD exige appliesTo=RECURRING — não se aplica a cobranças avulsas.

Case de uso:

Como SaaS, quero oferecer "2 meses grátis" para quem assina um plano anual, sem mexer no valor cobrado em cada ciclo.

POST/v1/coupons
Base URL Produção:https://api.validapay.com.br
Base URL Sandbox:https://sandbox.validapay.com.br

Authorizations

bearer

Authorization

string obrigatório

Cabeçalho de autenticação Bearer no formato Bearer {{token}} onde {{token}} é o seu token OAuth2.

Escopos requeridos

products/write

Body

application/json

Content-Type:application/json
JSON
{
  "code": "BEMVINDO10",
  "name": "Cupom de boas-vindas",
  "description": "10% na primeira cobrança",
  "discountType": "PERCENTAGE",
  "discountValue": 10,
  "extraPeriodUnit": "MONTHS",
  "maxCycles": 3,
  "maxRedemptions": 100,
  "minAmount": 50.00,
  "maxDiscount": 30.00,
  "validFrom": "2026-09-01T00:00:00.000Z",
  "validUntil": "2026-12-31T23:59:59.000Z",
  "productIds": ["price_1788364755079_psuecwgdc"],
  "firstTimeOnly": true,
  "appliesTo": "RECURRING"
}

Schema

codestringobrigatório
Código que o cliente digita no checkout para aplicar o cupom (salvo em maiúsculas)
discountTypestringobrigatório
PERCENTAGE desconta % do valor, FIXED desconta um valor fixo em reais, EXTRA_PERIOD soma dias/meses à próxima cobrança em vez de descontar valor
Valores aceitos:PERCENTAGEFIXEDEXTRA_PERIOD
discountValuenumberobrigatório
Percentual (0.01 a 100) para PERCENTAGE, valor em reais para FIXED, quantidade inteira de dias/meses para EXTRA_PERIOD
Regra:0.01
namestringopcional
Nome para identificação interna (default = code)
Regra:até 100 caracteres
descriptionstringopcional
Regra:até 255 caracteres
extraPeriodUnitstringopcional
Obrigatório apenas quando discountType=EXTRA_PERIOD; unidade da quantidade em discountValue
Valores aceitos:DAYSMONTHS
maxCyclesnumberopcional
Quantos ciclos recorrentes recebem o benefício (desconto ou período extra); vazio = todos os ciclos, até a assinatura ser cancelada
Regra:1
maxRedemptionsnumberopcional
Quantas vezes este código pode ser usado no total, somando todos os clientes; vazio = ilimitado
Regra:1
minAmountnumberopcional
Valor mínimo do pedido para o cupom ser aceito; sem efeito em EXTRA_PERIOD
Regra:0.01
maxDiscountnumberopcional
Teto do desconto em reais, útil para limitar cupons PERCENTAGE; sem efeito em FIXED ou EXTRA_PERIOD
Regra:0.01
validFromstringopcional
Cupom só é válido a partir desta data; vazio = válido imediatamente
Regra:date-time
validUntilstringopcional
Cupom deixa de ser aceito após esta data; vazio = sem expiração
Regra:date-time
productIdsarray[1]opcional
Restringe o cupom a price IDs específicos; vazio = todos os produtos
firstTimeOnlybooleanopcional
Cada cliente (por CPF/CNPJ) só pode usar este cupom uma vez (default false)
appliesTostringopcional
Tipo de cobrança em que o cupom é aceito; EXTRA_PERIOD exige RECURRING (default ALL)
Valores aceitos:ALLRECURRINGONE_TIME
const url = 'https://sandbox.validapay.com.br/v1/coupons';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer {{token}}',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
  "code": "BEMVINDO10",
  "name": "Cupom de boas-vindas",
  "description": "10% na primeira cobrança",
  "discountType": "PERCENTAGE",
  "discountValue": 10,
  "extraPeriodUnit": "MONTHS",
  "maxCycles": 3,
  "maxRedemptions": 100,
  "minAmount": 50.00,
  "maxDiscount": 30.00,
  "validFrom": "2026-09-01T00:00:00.000Z",
  "validUntil": "2026-12-31T23:59:59.000Z",
  "productIds": ["price_1788364755079_psuecwgdc"],
  "firstTimeOnly": true,
  "appliesTo": "RECURRING"
})
};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));

Response Examples

201201
JSON
{
  "couponId": "coup_1789157079333_fq358baak",
  "accountId": "4231833",
  "code": "BEMVINDO10",
  "name": "Cupom de boas-vindas",
  "description": "10% na primeira cobrança",
  "discountType": "PERCENTAGE",
  "discountValue": 10,
  "extraPeriodUnit": null,
  "maxCycles": 3,
  "maxRedemptions": 100,
  "currentRedemptions": 12,
  "minAmount": 50.0,
  "maxDiscount": 30.0,
  "validFrom": "2026-09-01T00:00:00.000Z",
  "validUntil": "2026-12-31T23:59:59.000Z",
  "productIds": [
    "price_1788364755079_psuecwgdc"
  ],
  "firstTimeOnly": true,
  "appliesTo": "RECURRING",
  "status": "ACTIVE",
  "createdAt": "2026-09-01T10:00:00.000Z",
  "updatedAt": "2026-09-01T10:00:00.000Z"
}
400400
JSON
{
        "error": {
                "message": "Dados inválidos",
                "code": "VALIDATION_ERROR",
                "details": null,
                "timestamp": "2026-09-11T21:00:00.000Z"
        }
}