Editar producto
PUT /1/products/:idMétodo utilizado para editar un determinado producto de una tienda en particular.
Headers
{
"Authorization": "Bearer {access_token}",
"X-Shop-Id": "12345"
}| Parámetro | Tipo | Requerido | Valores aceptados | Descripción |
|---|---|---|---|---|
| Authorization | string | Si | Bearer + access_token | Token obtenido mediante client_id y client_secret. |
| X-Shop-Id | string | Si | String numérico | Identificador único de la tienda a la cual se desea obtener sus ventas. |
Params
{
"id": "product-1234"
}| Parámetro | Tipo | Requerido | Valores aceptados | Descripción |
|---|---|---|---|---|
| id | string | Si | product-{id} | Especifica qué producto editar a través de su identificador único. |
Body
{
"name": "Product name",
"description": "....",
"type": 0,
"digital": 0,
"wholesale_product_min_quantity": 1,
"category_id": "category-123456",
"images": [
"default.png",
"imagen-1.jpg",
//...hasta 6
],
"categories": [
"category-123456",
//...
],
"attributes_values": [
{ // Atributo que ya existía en el producto (posee id)
"name": "Color",
"id": "attribute-123456"
},
{ // Atributo que se agrega al producto (no posee id)
"name": "Talle"
}
],
"stock": [
{ // elemento de stock que ya existía en el producto (posee id)
"id": "stock-312412351",
"sku": "T12365",
"quantity": 4,
"price": 150,
"offer_price": 3,
"wholesale_price": 0,
"wholesale_min_quantity": 1,
"show_price": true,
"weight": 1,
"width": 10,
"height": 10,
"depth": 10,
"image_position": 1, // esta variante de stock usará la imagen 2
"digital_link": null,
"digital_term": null,
"digital_observation": null,
"attribute_values": [
{
"name": "Color",
"value": "Negro"
},
{
"name": "Talle",
"value": "L"
},
//...
]
},
{ // elemento de stock que no existía en el producto y hay que crearlo (no posee id)
"sku": "T12365",
"quantity": 3,
"price": 1500,
"offer_price": 3,
"wholesale_price": 0,
"wholesale_min_quantity": 1,
"show_price": true,
"weight": 1,
"width": 10,
"height": 10,
"depth": 10,
"image_position": 0, // esta variante de stock usará la imagen 1
"digital_link": null,
"digital_term": null,
"digital_observation": null,
"attribute_values": [
{
"name": "Color",
"value": "Negro"
},
{
"name": "Talle",
"value": "L"
},
//...
]
}
]
}En stock[], la ausencia del campo id indica que se trata de un elemento de stock nuevo que debe crearse; si se envía id, se editan los valores de esa variante de stock existente. Lo mismo aplica para attributes_values[]: sin id es un atributo nuevo, con id es un atributo ya existente que se edita.
| Parámetro | Tipo | Requerido | Valores aceptados | Descripción |
|---|---|---|---|---|
| name | string | Si | Debe cumplir con el regex: /^(?=\S.{0,78}\S$)^([A-Za-z0-9ÁÉÍÓÚáéíóúÄËÏÖÜäëïöüñÑ\/\-\!\'\"\,\.\+\[\]\(\)\:\#\s]+)$/ | Corresponde al nombre del producto. |
| description | string | Si | String de entre 0 y 20.000 caracteres. | Corresponde a la descripción del producto. Soporta html. |
| type | int | Si | Corresponde al tipo de producto. 0: solo minorista 1: solo mayorista 2: mayorista y minorista | Indica el público que podrá comercializar el producto. |
| digital | int | Si | 0: es un producto tangible y físico 1: es producto digital con envío automático (cuando se abona, se manda el link automáticamente). Ejemplo: e-books, cursos. 2: es un producto digital con envío manual. Ejemplo: diseño de logo, asesoría personalizada. | Indica si el producto es digital (y con qué modalidad) o si es un producto físico. |
| wholesale_product_min_quantity | int | Si | wholesale_product_min_quantity>0. | Corresponde a la cantidad mínima de compra mayorista a nivel producto. |
| category_id | string | Si | Id de categoría en el formato “category-id”. | Corresponde a la categoría principal del producto. Debe existir como elemento en el array categories[]. |
| images[] | array[string] | Si | Array cuyos valores son soportados por el regex: /^([a-z0-9\-]+\.(jpeg|jpg|png|gif|webp))$/ Debe contener entre 1 y 6 elementos. | Array de imágenes del producto. Utilizar “default.png” como imagen por defecto. |
| categories[] | [string] | Si | Array cuyos valores son id de categoría en el formato “category-id”. Debe contener al menos un elemento que debe coincidir con el parámetro category_id. No puede contener valores repetidos. | Contiene información sobre las categorías (principal y secundarias) asociadas al producto. |
| attributes_values[] | [object] | No | No posee limitación en cuanto a la cantidad de elementos. En caso de no especificarse o enviarse vacío indica que el producto no posee variantes de atributos. No puede contener valores repetidos. | Corresponde a la lista de atributos utilizados para el producto. |
| attributes_values[].id | string | No | Id de atributo en el formato “attribute-id”. En caso de no enviarse, significa que es un nuevo atributo. | Corresponde con el identificador único del atributo en cuestión. |
| attributes_values[].name | string | Si | Debe cumplir con el regex: /^(?=.{2,25}$)(a-zá-úÁ-Úä-üÄ-ÜA-Z0-9?(\s)?)*$/ | Corresponde al nombre del atributo. |
| stock[] | [object] | Si | Debe contener al menos un elemento que cumpla con los atributos mínimos. Como máximo puede contener 150 elementos. Solo puede haber más de un elemento de stock si el producto va a poseer atributos, en caso contrario, el producto solo puede tener un elemento de stock. | Corresponde a la lista de stock asociado a dicho producto. |
| stock[].id | string | No | Id de stock en el formato “stock-id”. La no existencia de este valor indica que el ítem de stock del array es nuevo y se debe agregar. En caso contrario, se editarán los valores del id stock viejo. Cuando el producto no posee atributos, no debe ser enviado. | Corresponde al identificador de la variante de stock. |
| stock[].sku | string | Si | Debe cumplir con el regex: /^[a-zA-Z0-9\-\,\.\s]{1,50}$/ | Corresponde al identificador de stock provisto por el comercio. |
| stock[].quantity | int | Si | Si quantity=null, entonces la variante de stock del producto va a poseer stock infinito. Si quantity>=0, el producto va a poseer stock finito. | Corresponde a la cantidad de stock. |
| stock[].price | float | Solo es opcional si type=1. En caso contrario es obligatorio. | price>0. | Corresponde al precio minorista del producto. |
| stock[].offer_price | float | No | offer_price<price (solo debe cumplirse si price y offer_price no son null). En caso de que type=1, es ignorado. | Corresponde al precio de oferta minorista del producto. |
| stock[].wholesale_price | float | No. Solo es requerido si type>=1. | wholesale_price>0. | Indica el precio mayorista del producto. |
| stock[].wholesale_min_quantity | int | No. Solo considerado si type>=1. | wholesale_min_quantity>=1. | Indica la cantidad mínima mayorista que el cliente debe comprar de dicha variante de stock. Aclaración: la diferencia con wholesale_product_min_quantity es que el mismo es un límite a nivel producto, es decir que si su valor es 5, entonces si se compran diferentes variantes de stock del mismo producto hasta llegar a dicha suma 5. |
| stock[].show_price | boolean | No | Valores: false: el producto no tiene price y aparece un botón de consultar en lugar de agregar al carrito. Si se especifica este valor, el valor de price será ignorado. true: el producto tiene price | Indica si el producto es un producto con o sin price. Usado para mostrar productos como formato catálogo. El producto puede ser de venta mayorista con type=2 (no los de type=1), tener wholesale_price y a su vez no tener price. De manera que las personas no mayoristas tendrán un botón de consultar y los clientes mayoristas podrán agregarlo al carrito. |
| stock[].weight | float | No. Es obligatorio si digital=0. | weight>=0. A excepción de que la tienda requiera que las dimensiones sean estrictamente mayores a 0 (por tener un método de envío como por Ej: Correo Argentino, Epick, etc). | Indica el peso del producto empaquetado en kg. |
| stock[].width | int | No. Es obligatorio si digital=0. | width>=0. A excepción de que la tienda requiera que las dimensiones sean estrictamente mayores a 0 (por tener un método de envío como por Ej: Correo Argentino, Epick, etc). | Indica el ancho del producto empaquetado en cm. |
| stock[].height | int | No. Es obligatorio si digital=0. | height>=0. A excepción de que la tienda requiera que las dimensiones sean estrictamente mayores a 0 (por tener un método de envío como por Ej: Correo Argentino, Epick, etc). | Indica el alto del producto empaquetado en cm. |
| stock[].depth | int | No. Es obligatorio si digital=0. | depth>=0. A excepción de que la tienda requiera que las dimensiones sean estrictamente mayores a 0 (por tener un método de envío como por Ej: Correo Argentino, Epick, etc). | Indica la profundidad del producto empaquetado en cm. |
| stock[].image_position | int | Si | Posición de un elemento en array images[]. | Permite asociar una imagen a una variante de stock. |
| stock[].digital_link | string | No. Solo requerido si digital=1. | Debe cumplir con el regex: /^(https:\/\/|http:\/\/)[0-9a-zA-Z\.\:\/\#\-\_\?\=\&\$\%\@\~\!]{2,200}$/ | Es el link de descarga del producto digital que se envía cuando el producto es un producto digital con descarga automática y el usuario abona. |
| stock[].digital_term | string | No. Solo requerido si digital=2. | Debe cumplir con el regex: /^[a-zá-úÁ-Úä-üÄ-ÜA-Z0-9\s\!\.\-\,\?\"\'\:\¡\¿\%\(\)\[\]\$\+\~\#\_\&\/]{2,45}$/ | Es el plazo de entrega del producto digital que se envía cuando el producto es un producto digital con envío manual. |
| stock[].digital_observation | string | No. Solo considerada si digital>=1. | Debe cumplir con el regex: /^[\s\S]{0,200}$/ | Es una observación disponible para el usuario cuando el producto es un producto digital. |
| stock[].attribute_values[] | [object] | No. Solo requerido si attributes_values[] posee al menos un elemento. | Para cada elemento existente en attributes_values[], se debe especificar un valor asociado a dicho atributo en éste array. | Contiene el valor de cada atributo para dicho stock. |
| stock[].attribute_values[].name | string | Si | Debe coincidir exactamente con un elemento del array attributes_values[]. Solo se debe especificar un único valor para cada atributo. | Corresponde al atributo para el cual se está especificando un valor. |
| stock[].attribute_values[].value | string | Si | Debe cumplir con el regex: /^(?=.{1,25}$)(a-zá-úÁ-Úä-üÄ-ÜA-Z0-9?(\s)?([\/\-\!\'\"\,\.\+\[\]\(\)\:\#]{0,3}))*$/ | Corresponde al valor del atributo para dicho stock. |
Response exitosa: 201 Ok
{
"id": "product-110737"
}Campos de la respuesta
| Atributo | Tipo | Descripción |
|---|---|---|
| id | string | Corresponde al id del producto editado. |
Responses de error
En caso de que la respuesta http no sea 201, entonces se debe considerar el error.
| Atributo | Tipo | Descripción |
|---|---|---|
| status | int | Http code de respuesta. |
| code | string | Código de error, indica la naturaleza del mismo. |
| msg | string | Mensaje de error. |
Ejemplo response 401 Unauthorized:
{
"status": 401,
"code": "error",
"msg": "Unauthorized"
}Ejemplo response 400 Bad Request si algún parámetro de entrada requerido no es enviado:
{
"status": 400,
"code": "param_required",
"msg": "invalid <param_name>. The value is required"
}Ejemplo response 400 Bad Request si algún parámetro de entrada es inválido:
{
"status": 400,
"code": "param_invalid",
"msg": "Invalid <param_name>. The value is invalid"
}Ejemplo response 400 Bad Request si el producto ya existe:
{
"status": 400,
"code": "request_error",
"msg": "There is another product with the same name, please try with another one."
}Ejemplo response 500 Internal Server Error:
{
"status": 500,
"code": "server_error",
"msg": "Something went wrong"
}