SelectwinDOCS
Cupons

Atualizar um cupom

Atualiza parcialmente um cupom existente: você envia apenas os campos que quer mudar, e tudo o que ficar de fora permanece exatamente como estava. Use esta operação para ligar/desligar uma campanha, c

Atualiza parcialmente um cupom existente: você envia apenas os campos que quer mudar, e tudo o que ficar de fora permanece exatamente como estava. Use esta operação para ligar/desligar uma campanha, corrigir o desconto, estender a janela de validade ou apertar as regras de elegibilidade — sem precisar recriar o cupom (o id continua o mesmo).

PATCH /v1/coupons/{couponId}

Como funciona

O PATCH é uma atualização parcial (em contraste com PUT, que substituiria o objeto inteiro). Na prática:

  • Campos enviados são sobrescritos pelo novo valor.
  • Campos omitidos ficam intactos — não viram null nem voltam ao padrão.
  • Para limpar uma restrição opcional (ex.: remover o teto de carrinho), envie o campo explicitamente como null quando o cupom o aceitar.

O servidor valida o corpo, aplica as mudanças de forma atômica (ou tudo ou nada) e responde com 200 OK trazendo o objeto completo e já atualizado — incluindo o novo updatedAt. Não há estado intermediário nem processamento assíncrono: quando a resposta chega, a mudança já está valendo para os próximos checkouts.

Importante

Este PATCH ajusta as regras de uso do cupom: usageLimit (teto total de resgates), limitOneUsePerCustomer e usageQuantity (regra de quantidade de uso por cliente, quando aplicável). Envie só os campos que quer alterar.

Cupons usam o prefixo de ID dis_ (de discount). Trate o id como uma string opaca — não faça parsing. Veja Convenções.

Quando usar (e quando não)

  • Pausar/retomar uma campanha: alterne enabled em vez de excluir e recriar o cupom — você preserva o id, o histórico e o código.
  • Estender ou encurtar a validade: ajuste initDate / endDate.
  • Endurecer regras: suba o minCartAmount, reduza o usageLimit, ative limitOneUsePerCustomer.

Quando não usar:

  • Para desativar temporariamente, prefira enabled: false a excluir — a exclusão é permanente: o código deixa de existir e não pode mais ser aplicado.
  • Para criar um cupom novo, use Criar. O PATCH exige um cupom já existente.

Requisição

Headers

CabeçalhoObrigatórioDescrição
SelectKeySimSua chave de API. Em produção começa com sl_live_; em sandbox, com sl_test_. Nunca use Authorization: Bearer/Basic. Veja Autenticação.
Content-Type: application/jsonSimO corpo é JSON.
X-Idempotency-KeyRecomendadoTorna a escrita segura para repetir em caso de timeout/retry. Veja Idempotência.

Parâmetro de caminho

NomeTipoObrigatórioDescrição
couponIdstringSimID público do cupom a atualizar (ex.: dis_01hqzvabc).

Corpo

Todos os campos de configuração são opcionais — envie só o que quer alterar. A única exceção é o id, que identifica o cupom no corpo e acompanha o couponId do caminho.

CampoTipoObrigatórioDescrição
idstringSimID público do cupom (mesmo valor de couponId). Padrão ^[a-z]+_[A-Za-z0-9]+$.
namestringNãoNome de exibição do cupom.
enabledbooleanNãoLiga (true) ou desliga (false) o cupom.
codestringNãoCódigo que o cliente digita no checkout (ex.: BLACKFRIDAY25).
typeenumNãoTipo de desconto: flat (valor fixo em centavos) ou percentage (percentual).
valuenumber (≥ 0)NãoValor do desconto. Se type=flat, é o valor em centavos (500 = R$ 5,00). Se type=percentage, é o percentual (25 = 25%).
minCartAmountinteger (≥ 0)NãoValor mínimo do carrinho, em centavos, para o cupom valer.
maxCartAmountinteger (≥ 0)NãoTeto opcional de valor do carrinho, em centavos.
usageLimitinteger (≥ 0)NãoNúmero máximo de resgates no total.
limitOneUsePerCustomerbooleanNãoRestringe a 1 uso por cliente.
usageQuantityinteger (≥ 0)NãoRegra de quantidade de uso por cliente (quando aplicável).
initDatestring (date-time)NãoInício da validade, em ISO 8601 UTC.
endDatestring (date-time)NãoFim da validade, em ISO 8601 UTC.
allowedItemIdsarrayNãoRestringe o cupom a produtos/itens específicos (por ID).
allowedCustomerIdsarrayNãoRestringe o cupom a clientes específicos (por ID).
minCartItemsinteger (≥ 0)NãoQuantidade mínima de itens no carrinho.
maxCartItemsinteger (≥ 0)NãoQuantidade máxima de itens elegíveis.
isCumulativebooleanNãoPermite acumular com outros descontos.

Atenção

value é sempre inteiro em centavos quando type=flat. R$ 30,00 de desconto fixo é 3000, não 30. Para 30% use type=percentage com value=30. Misturar os dois é o erro de integração mais comum em cupons.

Exemplo — pausar uma campanha

curl -X PATCH "https://api.selectwin.io/v1/coupons/dis_01hqzvabc" \
  -H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ" \
  -H "Content-Type: application/json" \
  -H "X-Idempotency-Key: 2f1c9b7e-coupon-pause-01" \
  -d '{
    "id": "dis_01hqzvabc",
    "enabled": false
  }'

Exemplo — ajustar desconto e estender validade

curl -X PATCH "https://api.selectwin.io/v1/coupons/dis_01hqzvabc" \
  -H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "dis_01hqzvabc",
    "name": "Black Friday 30%",
    "type": "percentage",
    "value": 30,
    "enabled": true,
    "endDate": "2026-12-31T23:59:59Z"
  }'

Resposta

200 OK — o corpo é o objeto completo do cupom já com as alterações aplicadas e o updatedAt renovado.

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

Campos-chave da resposta:

CampoTipoDescrição
idstringID do cupom (inalterado pela atualização).
typestringflat ou percentage.
valueintegerDesconto (centavos se flat; percentual se percentage).
usageQuantityintegerRegra de quantidade de uso por cliente (quando aplicável).
updatedAtstring (date-time)Renovado a cada atualização — use para confirmar que o PATCH foi aplicado.
createdAtstring (date-time)Permanece o da criação.

A resposta de cupom traz o objeto completo (diferente das listagens, que são projeções leves). Cupons não incluem merchant nem _links.

Erros

Trate sempre pelo error.code (estável), nunca pela message. Veja o Catálogo de Códigos de Erro e Tratamento de Erros.

error.codeHTTPQuando ocorre
couponIdIsInvalid400O couponId/id não tem o formato válido (dis_…).
couponIdNotFound404Nenhum cupom com esse ID na sua conta.
couponCreateItemIdIsInvalid400Algum ID em allowedItemIds não existe / é inválido.
couponCreateCustomerIdIsInvalid400Algum ID em allowedCustomerIds não existe / é inválido.
couponUpdateFailed400A atualização foi rejeitada (combinação de campos inválida).
invalidParameters400Falha de validação genérica — veja error.params para os campos.
unauthorized401SelectKey ausente, inválida ou revogada.
forbidden403Autenticado, mas sem permissão para a operação.
unprocessableEntity422Regra de negócio violada (entidade não processável).
tooManyRequests429Limite de requisições excedido — respeite error.retryAfterMinutes.
serverError500Erro interno — repita com backoff.

Boas práticas

  • Envie só o que muda. Como o PATCH é parcial, um corpo enxuto reduz o risco de sobrescrever sem querer um campo que outra pessoa já ajustou.
  • Combine id do corpo com couponId do caminho. Eles devem apontar para o mesmo cupom; divergência leva a couponIdIsInvalid/couponIdNotFound.
  • Prefira enabled: false a excluir para pausas temporárias — você preserva código, histórico e id, e pode religar depois.
  • Não troque type sem rever value. Mudar de flat para percentage (ou vice-versa) sem ajustar value cria descontos absurdos (ex.: 3000% ou R$ 0,30).
  • Use X-Idempotency-Key em escritas automatizadas, para que um retry após timeout não aplique a mudança duas vezes.
  • Confirme pelo updatedAt da resposta (ou faça um Read) em vez de assumir sucesso pelo status — assim você lê o estado final real do cupom.
  • Datas em ISO 8601 UTC (sufixo Z) e dinheiro em centavos — converta na sua aplicação antes de enviar.

Veja também

How is this guide?

On this page

Atualizar um cupom · Selectwin