Obtener productos
GET /1/productsMétodo utilizado para obtener la lista de productos 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. |
Query params
| Parámetro | Tipo | Requerido | Valores aceptados | Descripción |
|---|---|---|---|---|
| query.id_category | string | No | category-{id} | Permite obtener los productos de una categoría en particular. De no especificar, trae los productos de todas las categorías. |
| query.type | int | No | 0: solo minorista 1: solo mayorista 2: mayorista y minorista | Permite filtrar por el tipo de producto. |
| query.digital | int | No | 0: productos físicos 1: producto digital con envío automático (cuando se abona, se manda el link automáticamente). Ejemplo: e-books, cursos. 2: producto digital con envío manual. Ejemplo: diseño de logo, asesoría personalizada | Permite filtrar por productos digitales o físicos. |
| query.offer | int | No | 0: sin oferta 1: con oferta por tiempo ilimitado 2: oferta con fecha de fin 3: oferta con fecha de inicio y fin | Permite filtrar y obtener productos que posean al menos una variante de stock con oferta o sin oferta. |
| query.stock | int | No | 0: productos sin stock 1: productos con stock 2: productos con stock ilimitado | Permite filtrar y obtener productos que posean al menos una variante de stock en el estado solicitado. |
| query.sort | int | No | 0: más nuevo a más viejo 1: más viejo a más nuevo 2: precio menor a mayor (basado en precio minorista sin considerar precio de oferta) 3: precio mayor a menor (basado en precio minorista sin considerar precio de oferta) 4: orden alfabético basado en nombre del producto | Permite ordenar los productos. |
| query.search | string | No | Regex: /^(?=\S.{0,78}\S$)^([A-Za-z0-9ÁÉÍÓÚáéíóúÄËÏÖÜäëïöüñÑ\/\-\!\'\"\,\.\+\[\]\(\)\:\#\s]+)$/ | Permite buscar productos por su nombre. |
| query.page | int | No | page>=0 | Permite paginar los resultados. |
| query.results | int | No (solo se considera si existe query.page) | 0<results<=1000 | Permite definir cuántos resultados traer por página. |
Response exitosa: 200 Ok
[
{
"id": "product-110737",
"name": "test imgss",
"slug": "test-imgss",
"description": "...",
"type": 0,
"wholesale_product_min_quantity": 1,
"digital": 0,
"disabled": false,
"id_category": 33274,
"images": [
{
"id": "image-1234",
"url": "https://cdn.example.com/productos/imagen-1.png",
"order": 0
},
{
"id": "image-1235",
"url": "https://cdn.example.com/productos/imagen-2.png",
"order": 1
},
{
"id": "image-1236",
"url": "https://cdn.example.com/productos/imagen-3.png",
"order": 2
},
//...
],
"categories": [
{
"id": "category-33277",
"name": "Sale",
"parent_id": "category-1234",
"google_category_id": 160
},
//...
],
"attributes": [
{
"id": "attribute-49681",
"name": "Color"
},
//...
],
"stock": [
{
"id": "stock-214106",
"sku": null,
"quantity": 0,
"unlimited": true,
"price": 150,
"offer": 0,
"offer_price": 2,
"offer_start_date": null,
"offer_end_date": "2023-07-12T09:32:00Z",
"wholesale_price": 0,
"wholesale_min_quantity": 1,
"show_price": true,
"weight": 1,
"width": 10,
"height": 10,
"depth": 10,
"image_id": "image-1235",
"digital_link": null,
"digital_term": null,
"digital_observation": null,
"attribute_values": [
{
"id": "attribute-49681",
"name": "Color",
"value": "Negro"
},
//...
]
},
//..
]
},
//...
]Campos de la respuesta
| Atributo | Tipo | Descripción |
|---|---|---|
| id | string | Corresponde al id del producto. |
| name | string | Corresponde al nombre del producto. |
| slug | string | Corresponde al slug del producto, si se concatena con el slug de la línea jerárquica desde id_category hasta root junto con el dominio, se puede generar el link al producto. |
| description | string | Corresponde a la descripción del producto. Es html. |
| type | int | Corresponde al tipo de producto. 0: solo minorista 1: solo mayorista 2: mayorista y minorista |
| wholesale_product_min_quantity | int | Corresponde a la cantidad mínima de compra mayorista a nivel producto. |
| digital | int | Indica si el producto es digital (y con qué modalidad) o si es un producto físico. 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. |
| disabled | boolean | Indica si el producto se encuentra visible o no al público en la tienda. |
| id_category | string | Corresponde a la categoría principal del producto. |
| images[] | [object] | Contiene el array de imágenes de un producto. Actualmente un producto puede tener hasta 5 imágenes. |
| images[].id | string | Corresponde al identificador único de la imagen. |
| images[].url | string | Corresponde al link de la imagen. |
| images[].order | int | Indica el orden en el que serán mostradas las imágenes al ingresar al producto. La primer imagen mostrada es la que posea order=0. |
| categories[] | [object] | Contiene información sobre las categorías (principal y secundarias) asociadas al producto. |
| categories[].id | string | Corresponde al id de la categoría. Si el valor coincide con category_id entonces es la categoría principal del producto. |
| categories[].name | string | Corresponde al nombre de la categoría. |
| categories[].parent_id | string | Corresponde a la categoría padre de la categoría en cuestión. Si su valor es null, entonces es una categoría root. |
| categories[].google_category_id | int | Corresponde al identificador de categoría de Google que fue asignado a dicha categoría. |
| attributes[] | [object] | Corresponde a la lista de atributos utilizados para el producto. |
| attributes[].id | string | Corresponde al identificador único del atributo. |
| attributes[].name | string | Corresponde al nombre del atributo. |
| stock[] | [object] | Corresponde a la lista de stock asociado a dicho producto. |
| stock[].id | string | Corresponde al identificador único de stock. |
| stock[].sku | string | Corresponde al identificador de stock provisto por el comercio. |
| stock[].quantity | int | Corresponde a la cantidad de stock. Si unlimited=true, entonces quantity=0 Si unlimited=false, entonces quantity>=0 |
| stock[].unlimited | boolean | Indica si posee o no stock infinito. |
| stock[].price | float | Indica el precio minorista del producto. price>0 si show_price=1 y type!=1 price=0 si show_price=0 y type!=1 |
| stock[].offer | int | Indica el tipo de oferta minorista. 0: sin oferta 1: con oferta por tiempo ilimitado 2: oferta con fecha de fin 3: oferta con fecha de inicio y fin |
| stock[].offer_price | float | Indica el precio de oferta minorista. Solo contendrá valor si offer>0. |
| stock[].offer_start_date | string | Indica la fecha en ISO 8601 desde que el offer_price es válido. Solo si existe si offer=3. |
| stock[].offer_end_date | string | Indica la fecha en ISO 8601 hasta que el offer_price es válido. Solo si existe si offer=3 o offer=2. |
| stock[].wholesale_price | float | Indica el precio mayorista del producto wholesale_price>0 si type>=1 wholesale_price=0 si type=0 |
| stock[].wholesale_min_quantity | int | 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 | 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. Valores: false: el producto no tiene price y aparece un botón de consultar en lugar de agregar al carrito true: el producto tiene price |
| stock[].weight | float | Indica el peso del producto empaquetado en kg |
| stock[].width | int | Indica el ancho del producto empaquetado en cm |
| stock[].height | int | Indica el alto del producto empaquetado en cm |
| stock[].depth | int | Indica la profundidad del producto empaquetado en cm |
| stock[].image_id | string | Corresponde al identificador único de la imagen asociada al stock del producto. Debe ser un valor del array images. |
| stock[].digital_link | string | 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. Valores: Si digital=1 Regex: /^(https:\/\/|http:\/\/)[0-9a-zA-Z\.\:\/\#\-\_\?\=\&\$\%\@\~\!]{2,200}$/Sino: null |
| stock[].digital_term | string | Es el plazo de entrega del producto digital que se envía cuando el producto es un producto digital con envío manual. Si digital=2 Regex: /^[a-zá-úÁ-Úä-üÄ-ÜA-Z0-9\s\!\.\-\,\?\"\'\:\¡\¿\%\(\)\[\]\$\+\~\#\_\&\/]{2,45}$/Sino: ” o NULL |
| stock[].digital_observation | string | Es una observación disponible para el usuario cuando el producto es un producto digital. Valores: Si digital>=1 Regex: /^[\s\S]{0,200}$/Sino: null |
| stock[].attribute_values[] | [object] | Contiene el valor de cada atributo para dicho stock. |
| stock[].attribute_values[].id | string | Corresponde al attributes[].id |
| stock[].attribute_values[].name | string | Corresponde al attributes[].name |
| stock[].attribute_values[].value | string | Corresponde al valor del atributo para dicho stock. |
Responses de error
En caso de que la respuesta http no sea 200, 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 genérico:
{
"status": 400,
"code": "request_error",
"msg": "Send valid data"
}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 500 Internal Server Error:
{
"status": 500,
"code": "server_error",
"msg": "Something went wrong"
}