Categorías
Las categorías soportan estructura de árbol mediante parent_id. Cada categoría tiene un path materializado (ej: root/electronics/phones) y un depth que indica el nivel de anidamiento.
Listar categorías
GET /api/v1/catalog/categories
Parámetros:
| Nombre | Tipo | Descripción |
|---|---|---|
cursor | string | Cursor de paginación |
limit | int | Items por página (default 25, máx 100) |
filter[status] | string | active, draft |
Respuesta 200:
{
"data": [
{
"id": "uuid",
"parent_id": null,
"title": "Electrónica",
"slug": "electronica",
"depth": 0,
"path": "root/electronica",
"status": "active",
"visible_in_menu": true,
"product_count": 42,
"children": [
{
"id": "uuid",
"parent_id": "uuid",
"title": "Celulares",
"slug": "celulares",
"depth": 1,
"path": "root/electronica/celulares"
}
]
}
],
"meta": { "pagination": { "cursor": "eyJ...", "has_next": true } }
}
Crear categoría
POST /api/v1/catalog/categories
{
"title": "Celulares",
"slug": "celulares",
"description": "Smartphones y accesorios",
"parent_id": "uuid-de-electronica",
"position": 1,
"seo_title": "Celulares y Smartphones",
"seo_description": "Los mejores celulares al mejor precio"
}
| Campo | Requerido | Tipo | Descripción |
|---|---|---|---|
title | sí | string | Nombre de la categoría |
slug | no | string | URL-friendly (auto-generado si vacío) |
description | no | string | Descripción larga |
parent_id | no | uuid | Categoría padre (null = raíz) |
position | no | int | Orden de aparición |
seo_title | no | string | Título para SEO |
seo_description | no | string | Meta descripción |
Respuesta 201: objeto Category completo.
Obtener categoría
GET /api/v1/catalog/categories/:id
Incluye children anidados y product_count.
Actualizar categoría
PUT /api/v1/catalog/categories/:id
Mismos campos que crear. Adicionalmente:
| Campo | Tipo | Descripción |
|---|---|---|
status | string | active o draft |
visible_in_menu | bool | Mostrar en navegación |
image_media_id | uuid | ID de imagen en media library |
Eliminar categoría
DELETE /api/v1/catalog/categories/:id
Respuesta 204 No Content
Para eliminar con productos asociados, usar DELETE /api/v1/catalog/categories/:id/archive-products (marca productos como archived).