🎟️ Visão Geral
O sistema de Cupons de Desconto permite que você crie e gerencie cupons promocionais que podem ser aplicados durante o checkout. Os cupons suportam descontos percentuais ou valores fixos, com configurações flexíveis de validade e limites de uso.
✨ Funcionalidades
- ✅ Tipos de Desconto: Percentual ou valor fixo
- ✅ Validade Configurável: Data de início e fim
- ✅ Limites de Uso: Total e por usuário
- ✅ Valor Mínimo: Defina valor mínimo de compra
- ✅ Valor Máximo: Limite o desconto máximo (para percentuais)
- ✅ Produtos Específicos: Aplique a todos ou produtos selecionados
- ✅ Validação Pública: Endpoint público para validar cupons no checkout
🚀 Criando um Cupom
Requisição Básica - Desconto Percentual
curl -X POST "https://https://upay-sistema-api.onrender.com//api/v1/coupons" \
-H "Authorization: Bearer SUA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"code": "DESCONTO10",
"discountType": "PERCENTAGE",
"discountValue": 10,
"description": "10% de desconto em qualquer compra"
}'
Requisição - Desconto Fixo
curl -X POST "https://https://upay-sistema-api.onrender.com//api/v1/coupons" \
-H "Authorization: Bearer SUA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"code": "R$50OFF",
"discountType": "FIXED",
"discountValue": 5000,
"description": "R$ 50,00 de desconto"
}'
Resposta
{
"success": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"code": "DESCONTO10",
"discountType": "PERCENTAGE",
"discountValue": 10,
"description": "10% de desconto em qualquer compra",
"minPurchaseAmount": null,
"maxDiscountAmount": null,
"maxUses": null,
"maxUsesPerUser": null,
"validFrom": null,
"validUntil": null,
"productIds": [],
"status": "ACTIVE",
"usedCount": 0,
"createdAt": "2025-12-30T00:00:00.000Z"
}
}
📋 Campos Disponíveis
Campos Obrigatórios
code (string): Código do cupom (único, máx. 50 caracteres)
discountType (enum): “PERCENTAGE” ou “FIXED”
discountValue (number):
- Para PERCENTAGE: valor percentual (ex: 10 = 10%)
- Para FIXED: valor em centavos (ex: 5000 = R$ 50,00)
Campos Opcionais
description (string): Descrição do cupom
minPurchaseAmount (number): Valor mínimo de compra em centavos
maxDiscountAmount (number): Valor máximo de desconto em centavos (apenas para PERCENTAGE)
maxUses (number): Limite total de usos (null = ilimitado)
maxUsesPerUser (number): Limite de usos por usuário (null = ilimitado)
validFrom (string): Data de início (ISO 8601)
validUntil (string): Data de fim (ISO 8601)
productIds (array): IDs dos produtos aplicáveis (vazio = todos)
status (enum): “ACTIVE” ou “INACTIVE” (padrão: “ACTIVE”)
📖 Exemplos Completos
Cupom Simples - 10% de Desconto
const response = await fetch('https://https://upay-sistema-api.onrender.com//api/v1/coupons', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
code: 'PROMO10',
discountType: 'PERCENTAGE',
discountValue: 10,
description: '10% de desconto em qualquer compra'
})
});
const validFrom = new Date();
const validUntil = new Date();
validUntil.setDate(validUntil.getDate() + 30); // Válido por 30 dias
const response = await fetch('https://https://upay-sistema-api.onrender.com//api/v1/coupons', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
code: 'BLACKFRIDAY',
discountType: 'PERCENTAGE',
discountValue: 25,
description: 'Black Friday - 25% de desconto',
minPurchaseAmount: 10000, // Mínimo R$ 100,00
maxDiscountAmount: 50000, // Máximo R$ 500,00 de desconto
maxUses: 1000, // Máximo 1000 usos totais
maxUsesPerUser: 1, // 1 uso por usuário
validFrom: validFrom.toISOString(),
validUntil: validUntil.toISOString()
})
});
Cupom para Produtos Específicos
const response = await fetch('https://https://upay-sistema-api.onrender.com//api/v1/coupons', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
code: 'PRODUTOESPECIAL',
discountType: 'FIXED',
discountValue: 2000, // R$ 20,00 de desconto
description: 'R$ 20,00 de desconto em produtos selecionados',
productIds: [
'produto-1-id',
'produto-2-id'
]
})
});
✅ Validando um Cupom
Endpoint Público (Checkout)
O endpoint de validação é público e não requer autenticação. Use-o no checkout para validar cupons:
curl -X POST "https://https://upay-sistema-api.onrender.com//api/v1/coupons/validate" \
-H "Content-Type: application/json" \
-d '{
"code": "DESCONTO10",
"amount": 10000
}'
Resposta - Cupom Válido
{
"success": true,
"valid": true,
"data": {
"code": "DESCONTO10",
"discountType": "PERCENTAGE",
"discountValue": 10,
"discountAmount": 1000,
"finalAmount": 9000,
"description": "10% de desconto em qualquer compra"
}
}
Resposta - Cupom Inválido
{
"success": false,
"valid": false,
"message": "Cupom não encontrado ou inválido"
}
Exemplo em JavaScript (Checkout)
async function validateCoupon(code, amount) {
const response = await fetch('https://https://upay-sistema-api.onrender.com//api/v1/coupons/validate', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
code: code,
amount: amount // Valor em centavos
})
});
const data = await response.json();
if (data.valid) {
console.log(`Desconto: R$ ${(data.data.discountAmount / 100).toFixed(2)}`);
console.log(`Valor final: R$ ${(data.data.finalAmount / 100).toFixed(2)}`);
return data.data;
} else {
console.error(data.message);
return null;
}
}
🔍 Listando Cupons
Listar Todos os Cupons
curl -X GET "https://https://upay-sistema-api.onrender.com//api/v1/coupons?page=1&limit=20" \
-H "Authorization: Bearer SUA_API_KEY"
Buscar Cupom Específico
curl -X GET "https://https://upay-sistema-api.onrender.com//api/v1/coupons/{id}" \
-H "Authorization: Bearer SUA_API_KEY"
✏️ Atualizando um Cupom
curl -X PATCH "https://https://upay-sistema-api.onrender.com//api/v1/coupons/{id}" \
-H "Authorization: Bearer SUA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "INACTIVE",
"maxUses": 500
}'
Você pode atualizar apenas os campos que desejar. Campos não enviados permanecerão inalterados.
🗑️ Deletando um Cupom
curl -X DELETE "https://https://upay-sistema-api.onrender.com//api/v1/coupons/{id}" \
-H "Authorization: Bearer SUA_API_KEY"
A exclusão é permanente. Cupons já utilizados mantêm o histórico de uso.
📊 Regras de Validação
O sistema valida automaticamente:
- ✅ Código válido: O cupom existe e está ativo
- ✅ Validade: Data atual está entre
validFrom e validUntil
- ✅ Limites de uso: Não excedeu
maxUses e maxUsesPerUser
- ✅ Valor mínimo: Compra atinge
minPurchaseAmount
- ✅ Produtos aplicáveis: Produto está na lista
productIds (se especificado)
- ✅ Desconto máximo: Para percentuais, respeita
maxDiscountAmount
🎯 Casos de Uso
Crie cupons com validade limitada para campanhas específicas.
Descontos por Volume
Configure valor mínimo de compra para incentivar compras maiores.
Cupons Exclusivos
Use limites de uso para criar cupons exclusivos ou limitados.
Produtos Específicos
Aplique descontos apenas a produtos selecionados do catálogo.
Primeira Compra
Configure maxUsesPerUser: 1 para cupons de primeira compra.
📚 Próximos Passos