Cupons

Criar um cupom

POST /v1/coupons

POST /v1/coupons

Cria um novo cupom de desconto com regras de aplicação, validade e limites.

Requisição

curl -X POST "https://api.selectwin.io/v1/coupons" \
  -H "SelectKey: sk_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Black Friday 25%",
    "code": "BLACKFRIDAY25",
    "type": "percentage",
    "value": 25,
    "enabled": true,
    "minCartAmount": 10000,
    "usageLimit": 100,
    "limitOneUsePerCustomer": true,
    "initDate": "2026-04-01T00:00:00Z",
    "endDate": "2026-04-30T23:59:59Z"
  }'

Campos do corpo

CampoTipoObrig.Descrição
namestring (1–80)simNome descritivo do cupom.
codestring (1–50)simCódigo aplicado pelo cliente (único por empresa).
typeenumsimflat (valor fixo em reais) ou percentage (taxa 0–100).
valuenumbersimDesconto. Se percentage: 0–100. Se flat: valor em reais (decimal, ex.: 12.30).
enabledbooleansimCupom ativo.
minCartAmount / maxCartAmountnumber (centavos)nãoFaixa de valor do carrinho em centavos.
minCartItems / maxCartItemsnumber (int)nãoFaixa de quantidade de itens.
usageLimitnumber (int)nãoLimite total de usos.
usageQuantitynumber (int)nãoUsos já contabilizados (normalmente gerenciado pela API).
limitOneUsePerCustomerbooleannãoRestringe a 1 uso por cliente.
isCumulativebooleannãoPermite acumular com outros descontos. Default false.
initDate / endDatedatetime ISO 8601nãoJanela de validade.
allowedItemIdsarray de publicIds (≤ 1000)nãoRestringe a produtos/variantes específicos.
allowedCustomerIdsarray de cus_* (≤ 1000)nãoRestringe a clientes específicos.
scopeenumnãofirstCharge (default) ou recurring.
recurringCyclesnumber (1–999) | nullnãoQuando scope=recurring: máximo de ciclos (null = todos).

Campos opcionais enviados como null/"" são tratados como ausentes (empty-to-absent). Para type=percentage, value acima de 100 é rejeitado (422).

Resposta - 201 Created

{
  "id": "dis_01hqzvabc",
  "name": "Black Friday 25%",
  "code": "BLACKFRIDAY25",
  "type": "percentage",
  "value": 25,
  "enabled": true,
  "minCartAmount": 10000,
  "maxCartAmount": null,
  "minCartItems": null,
  "maxCartItems": null,
  "usageLimit": 100,
  "usageQuantity": 0,
  "limitOneUsePerCustomer": true,
  "isCumulative": false,
  "initDate": "2026-04-01T00:00:00.000Z",
  "endDate": "2026-04-30T23:59:59.000Z",
  "allowedItemIds": null,
  "allowedCustomerIds": null,
  "scope": "firstCharge",
  "recurringCycles": null,
  "createdAt": "2026-04-12T17:56:33.000Z",
  "updatedAt": "2026-04-12T17:56:33.000Z"
}

Nota: Root level, sem merchant ou _links.

Atributos da Resposta

AtributoTipoDescrição
idstringpublicId dis_* (ou coup_* para legados).
namestring | nullNome descritivo.
codestring | nullCódigo para aplicação.
typestringflat ou percentage.
valuenumberDesconto: 0–100 se percentage; reais (decimal) se flat.
enabledbooleanAtivo.
minCartAmount / maxCartAmountnumber | nullFaixa de valor do carrinho (centavos).
minCartItems / maxCartItemsnumber | nullFaixa de quantidade de itens.
usageLimitnumber | nullLimite total de usos.
usageQuantitynumber | nullUsos atuais.
limitOneUsePerCustomerbooleanUma vez por cliente.
isCumulativebooleanAcumulável.
initDate / endDatestring | nullValidade (ISO 8601).
allowedItemIds / allowedCustomerIdsarray | nullRestrições.
scopestringfirstCharge ou recurring.
recurringCyclesnumber | nullMáx. de ciclos quando scope=recurring.
createdAt / updatedAtstringTimestamps ISO 8601.

Respostas de Erro

error.codeHTTPQuando
couponCodeConflict409Já existe um cupom com este code.

Erros de validação do corpo retornam 400 (campos inválidos) ou 422 (ex.: percentage > 100).

Melhores Práticas

  • Use codes únicos e memoráveis.
  • Defina datas de validade (initDate/endDate).
  • Monitore usageQuantity via reads para evitar overuse.

How is this guide?

On this page