Saltar al contenido principal
POST
/
ecommerce
/
v2
/
apps
/
{app_id}
/
batch
/
categories
/
upsert
curl -X POST "https://gateway.jelou.ai/ecommerce/v2/apps/{app_id}/batch/categories/upsert" \
  -H "x-api-key: TU_CLAVE_API" \
  -H "Content-Type: application/json" \
  -d '{
    "resources": [
      {
        "name": "Pizzas",
        "description": "Todas nuestras pizzas artesanales",
        "image": "https://ejemplo.com/images/pizzas.jpg",
        "order": 1,
        "status": true,
        "branch": "SUC-CENTRO"
      },
      {
        "name": "Bebidas",
        "description": "Bebidas frías y calientes",
        "order": 2,
        "branch": "SUC-CENTRO"
      },
      {
        "name": "Postres",
        "order": 3
      }
    ]
  }'
{
  "message": "Batch upsert process initiated successfully",
  "count": 3,
  "jobs": 1
}
Puedes crear o actualizar categorías en lote según su nombre. Si una categoría con el mismo nombre ya existe en la misma tienda y sucursal, se actualiza; si no, se crea.
app_id
string
requerido
ID de tu tienda en Jelou Shop.
resources
object[]
requerido
Lista de categorías a crear o actualizar (máx. 500 por solicitud).
La sucursal debe estar creada antes de asignarla a una categoría. Usa el endpoint Crear sucursales para registrarla primero.
curl -X POST "https://gateway.jelou.ai/ecommerce/v2/apps/{app_id}/batch/categories/upsert" \
  -H "x-api-key: TU_CLAVE_API" \
  -H "Content-Type: application/json" \
  -d '{
    "resources": [
      {
        "name": "Pizzas",
        "description": "Todas nuestras pizzas artesanales",
        "image": "https://ejemplo.com/images/pizzas.jpg",
        "order": 1,
        "status": true,
        "branch": "SUC-CENTRO"
      },
      {
        "name": "Bebidas",
        "description": "Bebidas frías y calientes",
        "order": 2,
        "branch": "SUC-CENTRO"
      },
      {
        "name": "Postres",
        "order": 3
      }
    ]
  }'
{
  "message": "Batch upsert process initiated successfully",
  "count": 3,
  "jobs": 1
}

Comportamiento

El endpoint retorna 202 Accepted inmediatamente. Las categorías se procesan en segundo plano.
Las categorías se identifican por su name dentro de la misma tienda y sucursal. Si ya existe una con ese nombre, se actualiza en lugar de crear una nueva.
Si el código de sucursal no coincide con ninguna sucursal de la tienda, la categoría se crea sin sucursal asignada.
Si se proporciona una URL de imagen, se descarga y almacena en segundo plano después de la creación de la categoría. La URL debe ser pública; las URLs privadas/internas se rechazan.
Usa parent_id para anidar categorías. El padre debe existir en la misma tienda antes de procesarse el lote. Para construir una jerarquía nueva, crea primero las categorías padre y luego envía las hijas referenciando su parent_id.
Cuando order es mayor que 0, debe ser único dentro del mismo nivel (app + categoría padre + sucursal). Si dos categorías del mismo lote comparten order en el mismo nivel, o si choca con una categoría existente, la solicitud falla con 422. El order 0 o nulo se considera “sin orden” y no valida unicidad.

Errores de validación

CampoMensaje
resourcesThe resources field is required.
resourcesAt least one category is required.
resourcesCannot process more than 500 categories at once.
resources.*.nameEach category must have a name.
resources.*.imageCategory image must be a valid URL.
resources.*.orderCategory order must be an integer. / Category order cannot be negative. / Category order cannot exceed 999999.
resources.*.orderOrder is duplicated within this batch for the same parent/branch. / Order is already assigned to another category.
resources.*.statusCategory status must be a boolean.
resources.*.parent_idParent category id must be an integer. / The parent category does not exist for this app.
resourcesThis app already has categories. Adding new categories would exceed the limit of .

Límites

  • Máximo 500 categorías por solicitud.
  • Límite total de categorías por tienda (configurable; por defecto 500). Si el lote supera el límite restante, la solicitud falla con 422.
  • Todas las categorías se validan antes de procesarse.
Reemplaza {app_id} con el ID de tu tienda y TU_CLAVE_API con tu clave API.