curl -X POST "https://ecommerce.jelou.ai/api/v2/apps/{app_id}/batch/products/upsert_by_sku" \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"resources": [
{
"sku": "CAM-BLU",
"name": "Camiseta Básica Azul",
"description": "Camiseta de algodón 100% premium, corte regular",
"price": 29.99,
"has_tax": true,
"status": true,
"stock_type": "limited",
"stock": 150,
"product_url": "https://mi-tienda.com/camiseta-basica-azul",
"discount_type": "percentage",
"discount": 10,
"branch": "SUC-CENTRO",
"categories": ["Ropa", "Camisetas"],
"images": [
"https://mi-tienda.com/images/camiseta-azul-front.jpg",
"https://mi-tienda.com/images/camiseta-azul-back.jpg"
],
"variations": [
{
"sku": "CAM-BLU-S",
"price": 29.99,
"attributes": [
{ "name": "Talla", "value": "S" },
{ "name": "Color", "value": "Azul" }
]
},
{
"sku": "CAM-BLU-M",
"price": 29.99,
"attributes": [
{ "name": "Talla", "value": "M" },
{ "name": "Color", "value": "Azul" }
]
},
{
"sku": "CAM-BLU-L",
"price": 31.99,
"attributes": [
{ "name": "Talla", "value": "L" },
{ "name": "Color", "value": "Azul" }
],
"images": [
"https://mi-tienda.com/images/camiseta-azul-L.jpg"
]
}
]
},
{
"sku": "PAN-NEG-M",
"name": "Pantalón Negro",
"price": 49.99,
"branch": "SUC-NORTE",
"categories": ["Ropa", "Pantalones"]
},
{
"sku": "PIZZA-FAMILIAR",
"name": "Pizza Familiar Pepperoni",
"description": "Pizza familiar de pepperoni con masa artesanal",
"price": 18.99,
"stock_type": "unlimited",
"branch": "SUC-NORTE",
"categories": ["Pizzas", "Promociones"],
"images": ["https://ejemplo.com/pizza-pepperoni.jpg"],
"modifier_groups": [
{
"code": "bebidas",
"name": "Escoja su Bebida",
"min_quantity": 1,
"max_quantity": 1,
"is_required": true,
"options": [
{ "code": "coca-1l", "name": "Coca Cola 1L", "price": 0 },
{ "code": "sprite-1l", "name": "Sprite 1L", "price": 0 },
{ "code": "fanta-1l", "name": "Fanta 1L", "price": 0.50 }
]
},
{
"code": "extras",
"name": "Ingredientes Extra",
"min_quantity": 0,
"max_quantity": 5,
"max_per_option": 2,
"is_required": false,
"options": [
{ "code": "queso-extra", "name": "Queso Extra", "price": 1.50 },
{ "code": "jamon", "name": "Jamón", "price": 2.00 },
{ "code": "aceitunas", "name": "Aceitunas", "price": 1.00 }
]
}
]
}
]
}'
{
"message": "Batch upsert process initiated successfully",
"count": 3,
"jobs": 3
}
Crea y actualiza productos con soporte para sucursales, variaciones y modificadores.
curl -X POST "https://ecommerce.jelou.ai/api/v2/apps/{app_id}/batch/products/upsert_by_sku" \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"resources": [
{
"sku": "CAM-BLU",
"name": "Camiseta Básica Azul",
"description": "Camiseta de algodón 100% premium, corte regular",
"price": 29.99,
"has_tax": true,
"status": true,
"stock_type": "limited",
"stock": 150,
"product_url": "https://mi-tienda.com/camiseta-basica-azul",
"discount_type": "percentage",
"discount": 10,
"branch": "SUC-CENTRO",
"categories": ["Ropa", "Camisetas"],
"images": [
"https://mi-tienda.com/images/camiseta-azul-front.jpg",
"https://mi-tienda.com/images/camiseta-azul-back.jpg"
],
"variations": [
{
"sku": "CAM-BLU-S",
"price": 29.99,
"attributes": [
{ "name": "Talla", "value": "S" },
{ "name": "Color", "value": "Azul" }
]
},
{
"sku": "CAM-BLU-M",
"price": 29.99,
"attributes": [
{ "name": "Talla", "value": "M" },
{ "name": "Color", "value": "Azul" }
]
},
{
"sku": "CAM-BLU-L",
"price": 31.99,
"attributes": [
{ "name": "Talla", "value": "L" },
{ "name": "Color", "value": "Azul" }
],
"images": [
"https://mi-tienda.com/images/camiseta-azul-L.jpg"
]
}
]
},
{
"sku": "PAN-NEG-M",
"name": "Pantalón Negro",
"price": 49.99,
"branch": "SUC-NORTE",
"categories": ["Ropa", "Pantalones"]
},
{
"sku": "PIZZA-FAMILIAR",
"name": "Pizza Familiar Pepperoni",
"description": "Pizza familiar de pepperoni con masa artesanal",
"price": 18.99,
"stock_type": "unlimited",
"branch": "SUC-NORTE",
"categories": ["Pizzas", "Promociones"],
"images": ["https://ejemplo.com/pizza-pepperoni.jpg"],
"modifier_groups": [
{
"code": "bebidas",
"name": "Escoja su Bebida",
"min_quantity": 1,
"max_quantity": 1,
"is_required": true,
"options": [
{ "code": "coca-1l", "name": "Coca Cola 1L", "price": 0 },
{ "code": "sprite-1l", "name": "Sprite 1L", "price": 0 },
{ "code": "fanta-1l", "name": "Fanta 1L", "price": 0.50 }
]
},
{
"code": "extras",
"name": "Ingredientes Extra",
"min_quantity": 0,
"max_quantity": 5,
"max_per_option": 2,
"is_required": false,
"options": [
{ "code": "queso-extra", "name": "Queso Extra", "price": 1.50 },
{ "code": "jamon", "name": "Jamón", "price": 2.00 },
{ "code": "aceitunas", "name": "Aceitunas", "price": 1.00 }
]
}
]
}
]
}'
{
"message": "Batch upsert process initiated successfully",
"count": 3,
"jobs": 3
}
resources acepta los siguientes campos:
limited o unlimited.stock_type es limited.value (monto fijo) o percentage.Show Campos de variación
[], se eliminan todos. Si tiene datos, se reemplazan completamente.Show Campos del grupo de modificadores
Show Campos de opción
linked_product_id (UUID). Si el SKU no se encuentra, se almacena como null.curl -X POST "https://ecommerce.jelou.ai/api/v2/apps/{app_id}/batch/products/upsert_by_sku" \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"resources": [
{
"sku": "CAM-BLU",
"name": "Camiseta Básica Azul",
"description": "Camiseta de algodón 100% premium, corte regular",
"price": 29.99,
"has_tax": true,
"status": true,
"stock_type": "limited",
"stock": 150,
"product_url": "https://mi-tienda.com/camiseta-basica-azul",
"discount_type": "percentage",
"discount": 10,
"branch": "SUC-CENTRO",
"categories": ["Ropa", "Camisetas"],
"images": [
"https://mi-tienda.com/images/camiseta-azul-front.jpg",
"https://mi-tienda.com/images/camiseta-azul-back.jpg"
],
"variations": [
{
"sku": "CAM-BLU-S",
"price": 29.99,
"attributes": [
{ "name": "Talla", "value": "S" },
{ "name": "Color", "value": "Azul" }
]
},
{
"sku": "CAM-BLU-M",
"price": 29.99,
"attributes": [
{ "name": "Talla", "value": "M" },
{ "name": "Color", "value": "Azul" }
]
},
{
"sku": "CAM-BLU-L",
"price": 31.99,
"attributes": [
{ "name": "Talla", "value": "L" },
{ "name": "Color", "value": "Azul" }
],
"images": [
"https://mi-tienda.com/images/camiseta-azul-L.jpg"
]
}
]
},
{
"sku": "PAN-NEG-M",
"name": "Pantalón Negro",
"price": 49.99,
"branch": "SUC-NORTE",
"categories": ["Ropa", "Pantalones"]
},
{
"sku": "PIZZA-FAMILIAR",
"name": "Pizza Familiar Pepperoni",
"description": "Pizza familiar de pepperoni con masa artesanal",
"price": 18.99,
"stock_type": "unlimited",
"branch": "SUC-NORTE",
"categories": ["Pizzas", "Promociones"],
"images": ["https://ejemplo.com/pizza-pepperoni.jpg"],
"modifier_groups": [
{
"code": "bebidas",
"name": "Escoja su Bebida",
"min_quantity": 1,
"max_quantity": 1,
"is_required": true,
"options": [
{ "code": "coca-1l", "name": "Coca Cola 1L", "price": 0 },
{ "code": "sprite-1l", "name": "Sprite 1L", "price": 0 },
{ "code": "fanta-1l", "name": "Fanta 1L", "price": 0.50 }
]
},
{
"code": "extras",
"name": "Ingredientes Extra",
"min_quantity": 0,
"max_quantity": 5,
"max_per_option": 2,
"is_required": false,
"options": [
{ "code": "queso-extra", "name": "Queso Extra", "price": 1.50 },
{ "code": "jamon", "name": "Jamón", "price": 2.00 },
{ "code": "aceitunas", "name": "Aceitunas", "price": 1.00 }
]
}
]
}
]
}'
{
"message": "Batch upsert process initiated successfully",
"count": 3,
"jobs": 3
}
{app_id} con el ID de tu tienda y <API_KEY> con el token proporcionado por Jelou.Procesamiento asíncrono
202 Accepted inmediatamente. Los productos se procesan en segundo plano.Sucursal inexistente
Categorías automáticas
Imágenes asíncronas
Variaciones por SKU
Modificadores
modifier_groups está ausente en el payload, se preservan los modificadores existentes. Si es un array vacío [], se eliminan todos. Si tiene datos, se reemplazan completamente.422 y detalla los campos con error.
{
"message": "The resources field is required.",
"errors": {
"resources": ["The resources field is required."]
}
}
Mensajes de error comunes
| Campo | Mensaje |
|---|---|
resources | At least one product is required. |
resources | Cannot process more than 500 products at once. |
resources.*.sku | Each product must have a SKU. |
resources.*.name | Each product must have a name. |
resources.*.price | Each product must have a price. / Price cannot be negative. |
resources.*.stock_type | Stock type must be either limited or unlimited. |
resources.*.images.* | Each image must be a valid URL. |
resources.*.modifier_groups.*.code | Each modifier group must have a code. |
resources.*.modifier_groups.*.name | Each modifier group must have a name. |
resources.*.modifier_groups.*.options | Each modifier group must have at least one option. |
resources.*.modifier_groups.*.options.*.code | Each modifier option must have a code. |
resources.*.modifier_groups.*.options.*.name | Each modifier option must have a name. |
Was this page helpful?