💸 Documentação de Descontos
📋 Visão Geral
Um desconto define o valor percentual ou absoluto a ser aplicado a uma entidade promocional (cupom ou promoção) conforme a quantidade de itens no carrinho.
Cada desconto é associado a uma faixa de quantidade (itemAmount), permitindo configurar valores progressivos — por exemplo, 10% para 1 item, 20% para 2 itens.
🔄 Entidades Envolvidas
Todo desconto está obrigatoriamente vinculado a uma entidade promocional, identificada pelos campos entityId e entity.
O campo entity aceita dois valores: coupon para vincular o desconto a um cupom, ou promotion para vincular a uma promoção.
A chave primária composta (entityId, entity, itemAmount) garante que cada faixa de quantidade seja única por entidade — não é possível ter dois descontos com o mesmo itemAmount para a mesma entidade.
📐 Conceito de Faixa (itemAmount)
O campo itemAmount representa a faixa de quantidade de itens à qual o desconto se aplica.
Exemplo de configuração progressiva para entityId: 1, entity: coupon:
itemAmount | value | Interpretação |
|---|---|---|
| 1 | 10 | Aplica 10% (ou R$ 10) para 1 item |
| 2 | 20 | Aplica 20% (ou R$ 20) para 2 itens |
| 5 | 30 | Aplica 30% (ou R$ 30) para 5 ou mais itens |
📌 Notas e Considerações
- Substituição completa no PUT — ao salvar descontos, todos os descontos anteriores da entidade são removidos antes de inserir os novos. Trata-se de uma substituição total, não incremental.
- O campo
entityaceita apenascouponoupromotion. Qualquer outro valor resulta em erro de validação. - O campo
valueaceita valores numéricos com até 6 casas decimais. - Promoções com
multiplyItemativo não suportam múltiplos itens de desconto (máximo 1) e não podem ter desconto direcionado ao frete.
💾 Salvar Descontos
/promotionals/discounts
Substitui completamente os descontos de uma entidade promocional
📋 Descrição
Endpoint responsável por salvar os descontos de uma entidade promocional (cupom ou promoção).
Esta operação realiza uma substituição completa — todos os descontos anteriores da entidade (entityId + entity) são removidos antes de inserir os novos itens enviados. Não é uma atualização incremental.
Cada item do array items representa uma faixa de quantidade (itemAmount) com seu respectivo valor de desconto (value). A chave composta (entityId, entity, itemAmount) é única por entidade.
Promoções com multiplyItem ativo têm restrições adicionais: o array items deve conter no máximo 1 elemento e o desconto não pode ser direcionado ao frete.
📝 Parâmetros
🏷️ Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
| Content-Type | application/json | Tipo de conteúdo |
| Authorization | Bearer SEU_TOKEN_AQUI | Token de autenticação |
📦 Parâmetros do Corpo
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| entityId | integer | ✅ Sim | ID da entidade promocional (cupom ou promoção) |
| entity | string | ✅ Sim | Tipo da entidade: coupon ou promotion |
| items | array | ✅ Sim | Lista de faixas de desconto (mínimo 1 item) |
| items.*.itemAmount | number | ✅ Sim | Faixa de quantidade de itens (chave da faixa) |
| items.*.value | number | ✅ Sim | Valor do desconto para essa faixa (até 6 casas decimais) |
💡 Exemplo de Requisição
1curl --request PUT \2 --url {{MAIN_URL}}/promotionals/discounts \3 --header "Authorization: Bearer SEU_TOKEN_AQUI" \4 --header "Content-Type: application/json" \5 --data '{6 "entityId": 1,7 "entity": "coupon",8 "items": [9 { "itemAmount": 1, "value": 10 },10 { "itemAmount": 2, "value": 20 }11 ]12 }'✅ Resposta de Sucesso
HTTP Status: 201 Created
1{2 "status": true,3 "data": [4 { "itemAmount": 1, "value": 10 },5 { "itemAmount": 2, "value": 20 }6 ]7}⚠️ Possíveis Erros
> Os cenários abaixo representam os principais erros que podem ocorrer neste endpoint, servindo como referência para entendimento e tratamento das falhas.
| Código Interno | HTTP | Descrição |
|---|---|---|
| UAPPI_AUTH_INVALID | 401 | ❌ O token de autenticação é inválido ou está ausente. |
| UAPPI_STORE_PROMOTIONAL_ENTITY_NOT_FOUND | 400 | ❌ A entidade (cupom ou promoção) informada não foi encontrada. |
| UAPPI_STORE_SINGLE_PROMOTIONAL_DISCOUNT | 400 | ❌ A promoção possui multiplyItem ativo e não suporta múltiplos itens de desconto. |
| UAPPI_STORE_MULTIPLY_ITEM | 400 | ❌ A promoção possui multiplyItem ativo e não pode ter desconto direcionado ao frete. |
🗑️ Remoção de Desconto
/promotionals/discounts
Remove um desconto específico de uma entidade promocional pelo itemAmount
📋 Descrição
Endpoint responsável por remover um desconto de uma entidade promocional (cupom ou promoção), identificado pela combinação de entity, entityId e itemAmount.
A remoção é precisa e unitária — apenas a faixa correspondente ao itemAmount informado é excluída. Os demais descontos da entidade são preservados.
Quando a remoção é bem-sucedida, o campo data retorna true.
📝 Parâmetros
🏷️ Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
| Content-Type | application/json | Tipo de conteúdo |
| Authorization | Bearer SEU_TOKEN_AQUI | Token de autenticação |
📦 Parâmetros do Corpo
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| entityId | integer | ✅ Sim | ID da entidade promocional (cupom ou promoção) |
| entity | string | ✅ Sim | Tipo da entidade: coupon ou promotion |
| itemAmount | number | ✅ Sim | Faixa de quantidade do desconto a ser removido |
💡 Exemplo de Requisição
1curl --request DELETE \2 --url {{MAIN_URL}}/promotionals/discounts \3 --header "Authorization: Bearer SEU_TOKEN_AQUI" \4 --header "Content-Type: application/json" \5 --data '{6 "entityId": 1,7 "entity": "coupon",8 "itemAmount": 19 }'✅ Resposta de Sucesso
HTTP Status: 200 OK
1{2 "status": true,3 "data": true4}⚠️ Possíveis Erros
> Os cenários abaixo representam os principais erros que podem ocorrer neste endpoint, servindo como referência para entendimento e tratamento das falhas.
| Código Interno | HTTP | Descrição |
|---|---|---|
| UAPPI_AUTH_INVALID | 401 | ❌ O token de autenticação é inválido ou está ausente. |
| UAPPI_STORE_PROMOTIONAL_DISCOUNT_NOT_FOUND | 400 | ❌ O desconto com o itemAmount informado não foi encontrado para a entidade. |