Variantes y precios
Crea productos con opciones y variantes, y cambia sus precios con Admin API.
Crea el «Polo de algodón» con Color y Talla, una variante por combinación, y cambia sus precios uno a uno o en lote.
Requisitos
- Un token de Admin en
ECOMIQ_TOKEN. Ver Inicio rápido. - Los permisos
catalog:create,catalog:updateycatalog:delete, según lo que hagas.
Crea el producto
Declara las opciones en options y una variante por combinación en variants.
- Cada variante indica en
optionssu valor por opción, por nombre o porkey. - Las opciones que no existen en la tienda se crean.
price,compareAtPriceycostPricedel producto se aplican a las variantes que no traen los suyos.- Con varias variantes, marca una sola con
isDefault: true.
{
"name": "Polo de algodón",
"description": "Polo de algodón pima para uso diario.",
"status": "draft",
"price": 89,
"compareAtPrice": 99,
"costPrice": 45,
"options": [
{ "name": "Color", "key": "color", "values": ["Azul", "Negro"] },
{ "name": "Talla", "key": "talla", "values": ["S", "M", "L"] }
],
"variants": [
{
"name": "Azul / S",
"sku": "POL-001-AZ-S",
"options": { "Color": "Azul", "Talla": "S" }
},
{
"name": "Azul / M",
"sku": "POL-001-AZ-M",
"options": { "Color": "Azul", "Talla": "M" },
"isDefault": true
},
{
"name": "Negro / S",
"sku": "POL-001-NG-S",
"options": { "Color": "Negro", "Talla": "S" }
},
{
"name": "Negro / M",
"sku": "POL-001-NG-M",
"options": { "Color": "Negro", "Talla": "M" }
}
]
}curl -X POST https://api.ecomiq.pe/api/v1/catalog/products \
-H "Authorization: Bearer $ECOMIQ_TOKEN" \
-H "Content-Type: application/json" \
--data @producto.json{
"id": "7204558912004325302",
"name": "Polo de algodón",
"slug": "polo-de-algodon",
"status": "draft",
"variants": [
{
"id": "7204558912004325377",
"name": "Azul / M",
"sku": "POL-001-AZ-M",
"isDefault": true,
"price": 89,
"compareAtPrice": 99,
"costPrice": 45,
"options": [
{ "name": "Color", "key": "color", "value": "Azul" },
{ "name": "Talla", "key": "talla", "value": "M" }
],
"status": "active"
}
]
}La API responde 201 con el producto y sus variantes. Guarda el id de cada
variante junto a su SKU; los IDs son strings.
El producto queda en borrador. Para activarlo, envía { "status": "active" } a
PATCH /.
Agrega una variante
Agrega la talla L en azul. Si omites price o compareAtPrice, se usan los del
producto. costPrice no se hereda: envíalo si lo usas.
curl -X POST https://api.ecomiq.pe/api/v1/catalog/products/7204558912004325302/variants \
-H "Authorization: Bearer $ECOMIQ_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Azul / L",
"sku": "POL-001-AZ-L",
"price": 89,
"compareAtPrice": 99,
"costPrice": 45,
"options": { "Color": "Azul", "Talla": "L" }
}'{
"id": "7204558912004325381",
"productId": "7204558912004325302",
"name": "Azul / L",
"sku": "POL-001-AZ-L",
"status": "active",
"price": 89,
"compareAtPrice": 99,
"costPrice": 45,
"currency": "PEN",
"options": [
{ "name": "Color", "key": "color", "value": "Azul" },
{ "name": "Talla", "key": "talla", "value": "L" }
]
}La API responde 201. Un SKU repetido o una combinación de opciones que ya
tiene otra variante responde 409.
Cambia el precio de una variante
PATCH / cambia solo los campos que envías.
Aquí, Azul / M pasa a 85 y su costo a 42.
curl -X PATCH https://api.ecomiq.pe/api/v1/catalog/variants/7204558912004325377 \
-H "Authorization: Bearer $ECOMIQ_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "price": 85, "compareAtPrice": 99, "costPrice": 42 }'La respuesta 200 trae la variante actualizada.
- Si
compareAtPriceno superaprice, se elimina. nullencompareAtPriceocostPricelo elimina.- Cada cambio de
priceocompareAtPricequeda en el historial de precios. - El
pricedel producto es el de su variante activa más barata.
La misma ruta cambia también name, sku, barcode y status.
Para editar variantes desde PATCH /, ver
Productos: ahí null no borra
precios y se usan clearCompareAtPrice y clearCostPrice.
Cambia precios en lote
POST / recibe hasta 100 filas en items.
Cada fila elige su destino con targetKind:
product: todas las variantes del producto, por suid.variant: una variante, por suid.sku: una variante, por SKU, sin distinguir mayúsculas.
Este ejemplo pone en oferta las tres tallas azules.
curl -X POST https://api.ecomiq.pe/api/v1/catalog/products/batch/prices \
-H "Authorization: Bearer $ECOMIQ_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"reason": "promotionStart",
"items": [
{ "targetKind": "sku", "target": "POL-001-AZ-S", "price": 79, "compareAtPrice": 99 },
{ "targetKind": "sku", "target": "POL-001-AZ-M", "price": 79, "compareAtPrice": 99 },
{ "targetKind": "sku", "target": "POL-001-AZ-L", "price": 79, "compareAtPrice": 99 }
]
}'{
"results": [
{ "index": 0, "id": null, "status": "updated", "errors": [] },
{ "index": 1, "id": null, "status": "updated", "errors": [] },
{ "index": 2, "id": null, "status": "updated", "errors": [] }
]
}200 devuelve results[] en el orden recibido. Revisa las filas failed:
las demás se aplican igual. Con targetKind: sku, id es null; usa index
para ubicar la fila.
Para más filas, envía filters en lugar de items, con price,
compareAtPrice o clearCompareAtPrice. Responde 202 con una operación.
- Omite
pricepara conservar el precio actual. clearCompareAtPrice: trueelimina el precio de comparación.reasonqueda en el historial; por defecto esbulkEdit.costPriceno se cambia en lote: usaPATCHen cada variante.
Elimina una variante
Elimina Negro / S. La API responde 204, sin cuerpo.
curl -X DELETE https://api.ecomiq.pe/api/v1/catalog/variants/7204558912004325379 \
-H "Authorization: Bearer $ECOMIQ_TOKEN"Para ocultar una variante sin eliminarla, envía { "status": "inactive" } con
PATCH. Solo las variantes activas cuentan para el precio y el stock del
producto.
Crea una lista de precios
Una lista de precios fija el precio de variantes concretas. El carrito usa ese precio mientras la lista está activa y vigente.
itemsfijaunitPricepor variante.breakscambia el precio desdeminQuantityunidades, con un mínimo de 2.validFromyvalidTolimitan la vigencia.- Con
customerId, la lista aplica solo a ese cliente.
curl -X POST https://api.ecomiq.pe/api/v1/catalog/price-lists \
-H "Authorization: Bearer $ECOMIQ_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Mayoristas",
"currency": "PEN",
"isActive": true,
"priority": 1,
"scope": "product",
"productId": "7204558912004325302",
"items": [
{
"variantId": "7204558912004325377",
"unitPrice": 70,
"breaks": [{ "minQuantity": 12, "unitPrice": 65 }]
},
{ "variantId": "7204558912004325380", "unitPrice": 70 }
]
}'{
"id": "7204558912004321823"
}Si varias listas cubren una variante, gana la del cliente y luego la de mayor
priority. Para cambiar una lista, envíala completa a
PUT /. Reemplaza su contenido y responde
204.
Errores
| Estado | code | Qué hacer |
|---|---|---|
400 | Common.Validation | Revisa errors: falta un campo o tiene otro formato. |
400 | Product.TooManyVariants | Un producto admite hasta 2048 variantes. |
404 | Variant.NotFound | La variante no existe en la tienda o ya se eliminó. |
409 | Variant.AlreadyExists | Otra variante ya usa ese SKU: cámbialo. |
409 | Variant.OptionsTaken | Otra variante del producto ya tiene esa combinación. |
409 | Variant.Changed | La variante cambió desde que la leíste: léela otra vez. |
Siguientes pasos
- Inventario: carga el stock de cada variante.
- Variantes: operaciones y campos.
- Listas de precios: crea, lista y actualiza listas.
Última actualización: