Descuentos y Cupones
La API de Descuentos permite gestionar cupones promocionales (de tipo porcentaje o de monto fijo) y descuentos por volumen (descuentos por cantidad de productos comprados).
Cupones
Los cupones se aplican al carrito o checkout para reducir el monto total a pagar.
Crear cupón
POST /api/v1/discounts/coupons
Payload de entrada:
{
"code": "SUMMER20",
"type": "percentage",
"value": 2000,
"currency": "PEN",
"min_order_amount": 10000,
"max_uses": 500,
"max_uses_per_customer": 1,
"applicable_to": "all",
"applicable_ids": [],
"starts_at": "2026-06-01T00:00:00Z",
"expires_at": "2026-08-31T23:59:59Z"
}
Nota sobre valores:
type: Puede serpercentage(porcentaje) ofixed_amount(monto fijo).value: Si espercentage, se expresa en puntos básicos (2000= 20.00%). Si esfixed_amount, se expresa en centavos (5000= S/ 50.00).applicable_to: Puede serall(toda la tienda),products(productos específicos) ocollections(colecciones específicas).applicable_ids: Arreglo de UUIDs siapplicable_toesproductsocollections.
Respuesta 201 Created:
{
"id": "2e0a2d21-f046-40d3-852f-423089c73ba3",
"code": "SUMMER20",
"type": "percentage",
"value": 2000,
"currency": "PEN",
"min_order_amount": 10000,
"max_uses": 500,
"max_uses_per_customer": 1,
"applicable_to": "all",
"applicable_ids": [],
"starts_at": "2026-06-01T00:00:00Z",
"expires_at": "2026-08-31T23:59:59Z",
"is_active": true,
"uses_count": 0,
"created_at": "2026-06-02T20:45:00Z"
}
Listar cupones
GET /api/v1/discounts/coupons
Retorna la lista de cupones creados para el tenant. Soporta filtros habituales de paginación.
Obtener cupón por ID o código
- Por ID:
GET /api/v1/discounts/coupons/:id - Por Código:
GET /api/v1/discounts/coupons/code/:code
Actualizar cupón
PATCH /api/v1/discounts/coupons/:id
Payload de entrada:
{
"value": 2500,
"min_order_amount": 12000,
"expires_at": "2026-09-15T00:00:00Z"
}
Respuesta 200 OK: Retorna el cupón actualizado.
Desactivar cupón (Soft Delete)
DELETE /api/v1/discounts/coupons/:id
Desactiva el cupón para evitar que continúe aplicándose en nuevas compras.
Respuesta 204 No Content
Validar cupón
Evalúa las reglas de negocio de un cupón y verifica si es aplicable para los parámetros del checkout actual.
POST /api/v1/discounts/coupons/validate
Payload de entrada:
{
"code": "SUMMER20",
"order_amount": 15000,
"customer_id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"product_ids": ["c0a80101-0000-0000-0000-000000000001"]
}
Respuesta 200 OK:
{
"valid": true,
"discount_amount": 3000,
"reason": ""
}
Aplicar cupón
Registra el uso del cupón tras finalizar una orden, lo que incrementa el contador de usos del cupón.
POST /api/v1/discounts/coupons/:id/apply
Payload de entrada:
{
"customer_id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"order_id": "42c3d0b2-4d2b-42fa-9d10-8b1b8b6a7a50",
"discount_amount": 3000
}
Respuesta 200 OK:
{
"success": true
}
Descuentos por Volumen
Los descuentos por volumen aplican automáticamente rebajas según la cantidad de items de un mismo producto en el carrito.
Crear descuento por volumen
POST /api/v1/discounts/volume
Payload de entrada:
{
"product_id": "c0a80101-0000-0000-0000-000000000001",
"min_quantity": 5,
"type": "percentage",
"value": 1000,
"currency": "PEN"
}
Respuesta 201 Created:
{
"id": "e4a2d10b-f046-40d3-852f-423089c73ba3",
"product_id": "c0a80101-0000-0000-0000-000000000001",
"min_quantity": 5,
"type": "percentage",
"value": 1000,
"currency": "PEN"
}
Listar descuentos por volumen
GET /api/v1/discounts/volume
Retorna la lista de descuentos por volumen configurados para el tenant.
Eliminar descuento por volumen
DELETE /api/v1/discounts/volume/:id
Respuesta 204 No Content