Promociones
Una promoción permite aplicar descuentos o beneficios en la tienda según reglas de productos, categorías, montos o combinaciones.
Propiedades
| Propiedad | Explicación |
|---|---|
| id | Identificador único de la promoción |
| title | Nombre de la promoción |
| status | Estado de la promoción |
| commerce_id | ID del comercio |
| expirate_date_start | Fecha de inicio de la promoción |
| expirate_date_end | Fecha de fin de la promoción |
| expirate_date_limit | Límite de días de vigencia |
| created_at | Fecha de creación |
| type_filter_id | Tipo de filtro de aplicación |
| type_promotion_id | Tipo de promoción |
| categories_id | IDs de categorías asociadas |
| products_id | IDs de productos asociados |
| progressive_quantity | Descuentos progresivos por cantidad |
| progressive_value | Descuento en el carrito de compra |
| quantity | Configuración de promoción por cantidad |
| xy | Configuración de promoción XY |
| type_filter_id | Explicación |
|---|---|
| 1 | Sin límites |
| 2 | Solo para categorías |
| 3 | Solo para productos |
| type_promotion_id | Explicación | Ejemplo / Uso (payload) |
|---|---|---|
| 1 | Lleva X paga Y | "xy": { "value_x": 2, "value_y": 1 } |
| 2 | Descuento por cantidad | "quantity": { "discount_value": 10, "quantity_min_buy": 2 }único. |
| 3 | Descuento progresivo por cantidad | "progressive_quantity": [{ "quantity_min_buy": 2, "discount_value": 5 }, { "quantity_min_buy": 5, "discount_value": 10 }] — array que puede tener múltiples reglas. |
| 4 | Descuento en el carrito de compra (siempre se aplica con type_filter_id: 1) | "progressive_value": [{ "value_min_buy": 100, "discount_value": 10 }, { "value_min_buy": 200, "discount_value": 25 }] — array que puede tener múltiples reglas. |
Endpoints
GET /promotion
Obtiene la lista de promociones.
Parámetros de query
| Parámetro | Explicación |
|---|---|
| ids | IDs de promociones separados por comas |
| type_promotion_id | Filtrar por tipo de promoción |
| type_filter_id | Filtrar por tipo de filtro |
| status | Filtrar por su estado |
| q | Buscar por título |
| page | Página |
| per_page | Resultados por página |
Ejemplo
GET promotion?ids=72
HTTP/1.1 200 OK
{
"pagination": {
"total": 1,
"page": 1,
"per_page": 20,
"next_page": null
},
"results": [
{
"id": 72,
"title": "Promo Feriado",
"status": true,
"expirate_date_limit": false,
"expirate_date_start": null,
"expirate_date_end": null,
"type_filter_id": 1,
"type_promotion_id": 2,
"quantity": {
"discount_value": 5,
"quantity_min_buy": 2
},
"created_at": "2026-05-20T15:18:31.000Z"
}
]
}
GET /promotion/{id}
Obtiene una promoción por su ID.
Ejemplo
GET /promotion/72
HTTP/1.1 200 OK
{
"id": 72,
"title": "Promo Feriado",
"status": true,
"expirate_date_limit": false,
"expirate_date_start": null,
"expirate_date_end": null,
"type_filter_id": 1,
"type_promotion_id": 2,
"quantity": {
"discount_value": 5,
"quantity_min_buy": 2
},
"created_at": "2026-05-20T15:18:31.000Z"
}
POST /promotion
Crea una nueva promoción.
Body de request
| Campo | Explicación |
|---|---|
| title | Nombre de la promoción |
| status | Estado |
| expirate_date_start | Fecha de inicio |
| expirate_date_end | Fecha de fin |
| expirate_date_limit | Límite de días de vigencia |
| type_filter_id | Tipo de filtro |
| type_promotion_id | Tipo de promoción |
| categories_id | IDs de categorías asociadas |
| products_id | IDs de productos asociados |
| progressive_quantity | Descuentos progresivos por cantidad |
| progressive_value | Descuento en el carrito de compra |
| quantity | Configuración de promoción por cantidad |
| xy | Configuración de promoción XY |
Ejemplo de request
{
"title": "xy",
"status": false,
"expirate_date_start": "2026-05-20T19:04:45.344Z",
"expirate_date_end": "2026-05-20T19:04:45.344Z",
"expirate_date_limit": true,
"type_filter_id": 3,
"type_promotion_id": 1,
"categories_id": [8],
"products_id": [1],
"xy": { "value_x": 2, "value_y": 1 }
}
Respuesta
HTTP/1.1 201 Created
{
"id": 77,
"title": "xy",
"status": false,
"expirate_date_limit": true,
"expirate_date_start": "2026-05-20T19:04:45.000Z",
"expirate_date_end": "2026-05-20T19:04:45.000Z",
"type_filter_id": 3,
"type_promotion_id": 1,
"products_id": [1],
"xy": {
"value_x": 2,
"value_y": 1
},
"created_at": "2026-05-20T19:11:35.000Z"
}
PUT /promotion/{id}
Actualiza los datos de una promoción existente.
Ejemplo de request
{
"title": "Promo 2x1 actualizada",
"status": 1,
"expirate_date_end": "2026-07-15T23:59:59.000Z",
"type_promotion_id": 1,
"xy": {
"value_x": 2,
"value_y": 1
}
}
Respuesta
HTTP/1.1 200
{
"id": 78,
"title": "Promo 2x1 actualizada",
"status": true,
"expirate_date_limit": true,
"expirate_date_start": "2026-05-20T00:00:00.000Z",
"expirate_date_end": "2026-12-15T23:59:59.000Z",
"type_filter_id": 2,
"type_promotion_id": 1,
"categories_id": [7, 8],
"xy": {
"value_x": 2,
"value_y": 1
},
"created_at": "2026-05-20T16:50:56.000Z"
}
PUT /promotion/{id}/status
Actualiza el estado de la promoción.
Ejemplo
PUT /promotion/78/status
HTTP/1.1 200 OK
{
"id": 78,
"message": "Promotion disabled successfully"
}
DELETE /promotion/{id}
Actualiza el estado de la promoción.
Ejemplo
DELETE /promotion/78
HTTP/1.1 200 OK
{
"id": 78,
"message": "Promotion deleted successfully"
}