Actualización masiva de ofertas

Este endpoint permite enviar de manera masiva la actualización de oferta de productos (stock, precio, descuento).

📘

Stock y precio generales que aplican a todos los canales.

Los datos de oferta se proporcionan en una lista de objetos JSON en formato JSONL, que incluyen el SKU, stock y precio del producto.

Nota: El descuento no es general, se debe enviar por canal.

📘

Stock, precio y descuento por canal (opcional).

Notas:

  • No mandes stock por canal si quieres manejar un stock compartido entre tus canales. Se manda stock por canal cuando manejas una bodega específica por canal (es poco recomendado y casi ningún cliente lo utiliza pero existe).
  • Manda precio por canal cuando quieres manejar un precio distinto por canal. Se trata del precio base (o precio full) del SKU.
  • El descuento se maneja únicamente por canal. En esta sección puedes ver los campos de descuento por canal (por lo general son 4 campos: tipo de descuento, precio de final de oferta, fecha de inicio, fecha final).

El endpoint retorna un ID de tarea que se utilizará para consultar el estado del proceso. Una vez finalizado, se enviará un webhook con el topic products-offer notificando la finalización del proceso.


Límite:

Puedes actualizar hasta 20,000 SKUs en un solo llamado.

Endpoint:

POST https://api.tp.yuju.io/products-offer

Modelo

CampoDescripción
skuSKU del producto que se desea actualizar
pricePrecio
stockStock
channel_fieldschannel fields es un objeto que agrupa la información de diferentes canales. Cada canal está representado por una clave única dentro de este objeto. Dentro de cada canal, encontramos dos objetos: uno para los datos generales (stock, price) y otro para los datos específicos del canal en cuestión (ver la tabla de campos personalizados, solo son permitidos para este endpoint los campos relacionados con descuentos).

{"sku": "1034-24-spg0282", "price": 78946000.0, "stock": 5, "channel_fields": {"13": {"general": {"stock": 4, "price": 78946000.0}, "custom": {"discount": 13}}}}  
{"sku": "1034-24-spg0450", "price": 91014000.0, "stock": 2, "channel_fields": {"7": {"general": {"stock": 1, "price": 91014000.0}, "custom": {"discount": 10, "discount_from": "2023-06-01", "discount_to": "2023-06-10"}}}}  
{"sku": "0158 A-spg0043", "price": 48330000.0, "stock": 7, "channel_fields": {"7": {"general": {"stock": 6, "price": 48330000.0}, "custom": {"discount": 14, "discount_from": "2023-06-01", "discount_to": "2023-06-10"}}}}  
{"sku": "1034 A-spg0003", "price": 87821000.0, "stock": 8, "channel_fields": {"13": {"general": {"stock": 7, "price": 87821000.0}, "custom": {"discount": 10}}}}  
{"sku": "1034-24-spg0284", "price": 76813000.0, "stock": 2, "channel_fields": {"13": {"general": {"stock": 1, "price": 76813000.0}, "custom": {"discount": 15}}}}

Ejemplo:

{  
   "status": "CREATED",  
   "message": "La tarea se encuentra siendo procesada",  
   "id_task": "fac23de",  
   "details": {}  
}
{  
   "status": "REJECTED",  
   "message": "Ya hay una tarea de actualización masiva de oferta en progreso",  
   "id_task": null,  
   "details": {  
       "current_id_task": "fac23de"  
   }  
}

Consultar estado de la tarea:

Endpoint:

GET https://api.tp.yuju.io/products-offer/{id_task}

CampoDescripción
id_taskid de la tarea que se recibe cuando se envía la carga masiva o que se recibe en el webhook
{  
  "status": "COMPLETED",  
  "total_rows": 2002,  
  "found_skus": 2000,  
  "success": 1998,  
  "errors": 2,  
  "details": [  
    {  
      "sku": "ABC123",  
			"warnings": [],  
			"errors": [  
        "El sku no existe para la tienda 123123"  
      	]  
    	},  
    {  
			"sku": "CBA321",  
			"warnings": [],  
			"errors": [  
        "El campo `price` debe ser numérico"  
      ]  
    }  
  ]  
}