Modelo de Datos del Producto
Entiende la jerarquía de entidades de producto y el orden obligatorio de creación
Antes de gestionar productos vía API, es fundamental entender cómo se relacionan las entidades y en qué orden deben crearse.
Jerarquía de Entidades
flowchart TD
CAT["<b>Catalog</b><br/><i>read-only</i>"]
PROD["<b>Product</b><br/>nombre, descripción, estado"]
OPT["<b>Option</b><br/>ej. Talla, Color"]
VAL["<b>OptionValue</b><br/>ej. S, M, L"]
VAR["<b>Variant</b><br/>precio, stock, estado"]
MED["<b>Media</b><br/>imágenes"]
TAG["<b>Category</b><br/>etiqueta global"]
CAT -->|contiene| PROD
PROD -->|tiene| OPT
OPT -->|tiene| VAL
PROD -->|tiene| VAR
VAR -->|tiene| MED
TAG -.->|"asignada vía tag_ids"| PROD
style CAT fill:#f3e8ff,stroke:#7c3aed,color:#1e1e1e
style PROD fill:#ede9fe,stroke:#7c3aed,color:#1e1e1e
style OPT fill:#e0f2fe,stroke:#0284c7,color:#1e1e1e
style VAL fill:#e0f2fe,stroke:#0284c7,color:#1e1e1e
style VAR fill:#dcfce7,stroke:#16a34a,color:#1e1e1e
style MED fill:#dcfce7,stroke:#16a34a,color:#1e1e1e
style TAG fill:#fef3c7,stroke:#d97706,color:#1e1e1e| Entidad | Descripción |
|---|---|
| Catalog | Contenedor principal de productos. Se crea automáticamente con el merchant. La API solo permite consultarlo con GET /v1/catalogs. |
| Product | Artículo del catálogo con nombre, descripción y estado. |
| Category | Etiqueta global para organizar productos (ej. "Ropa", "Electrónica"). Se asigna al producto vía tag_ids. |
| Option | Grupo de variación (ej. "Talla", "Color"). |
| OptionValue | Valor dentro de una opción (ej. "S", "M", "L" para Talla). |
| Variant | Combinación específica de valores de opción con precio propio (ej. "Polo Negro - Talla M"). |
| Media | Imagen o archivo asociado a una variante, no al producto directamente. |
Orden Obligatorio de Creación
sequenceDiagram
participant M as Merchant
participant API as Business API
M->>API: GET /v1/catalogs
API-->>M: catalog_id
M->>API: POST /v1/products
API-->>M: product_id
M->>API: POST .../options
API-->>M: option_value_ids
M->>API: POST .../variants (con option_values)
API-->>M: variant_id
M->>API: POST .../media
M->>API: POST .../categories- Obtener catálogo —
GET /v1/catalogs→ tucatalog_id - Crear producto —
POST /v1/productsconcatalog_id - Crear opciones —
POST /v1/products/{id}/options→ guarda los IDs de valores - Crear variantes —
POST /v1/products/{id}/variantsconoption_values - Agregar media —
POST /v1/products/{product_id}/variants/{variant_id}/media - Asignar categorías —
POST /v1/products/{id}/categoriescontag_ids
Las categorías (POST /v1/categories) son globales y se pueden crear en cualquier momento — no dependen del producto.
Reglas Clave
Los catálogos son de solo lectura. Se crean automáticamente al registrar el merchant. La API solo permite consultarlos con GET /v1/catalogs.
Las opciones DEBEN existir antes de crear variantes. El campo option_values es obligatorio y requiere al menos 1 ID. Si envías option_values: [] o no incluyes el campo, recibirás un error 422.
Las categorías son globales. Crear una categoría no la asocia a ningún producto. Debes asignarla explícitamente con POST /v1/products/{product_id}/categories usando tag_ids (array de IDs).
Las imágenes pertenecen a variantes, no a productos. Cada variante puede tener sus propias imágenes.
¿Por qué se requieren opciones antes de variantes?
Internamente, cada producto necesita al menos una opción con valores para funcionar correctamente en el catálogo. Esto aplica incluso para productos simples que no tienen variaciones reales (sin talla, color, etc.).
Producto con variaciones (ej. "Polo Negro"):
- Opción: "Talla" → Valores: "S", "M", "L"
- 3 variantes, una por talla
Producto simple (ej. "Dona Glaseada"):
- Opción: "Presentación" → Valor: "Estándar"
- 1 variante con ese valor
El nombre de la opción es libre. Ejemplos: "Talla", "Color", "Presentación".
Estados
| Entidad | Estados posibles |
|---|---|
| Product | published |
| Variant | available (disponible), not_available (no disponible) |
