Introducción

¿Qué es una API?

El término API es una abreviatura de Application Programming Interfaces, que en español significa interfaz de programación de aplicaciones. Se trata de un conjunto de definiciones y protocolos que se usan para desarrollar e integrar software.

¿Para qué sirve esta API?

Esta API nos facilita el suministro de información y recogida de datos de los clientes de Qnubu, de manera automatizada.

Proporcionamos métodos para obtener datos de catálogo, stock, unidades de medida, precios y direcciones.

Además, damos la posibilidad de modificar datos, cómo direcciones, grabaciones de pedidos o presupuestos.

¿Cómo empiezo?

Aquí tienes nuestra URL de base

https://api.qnubu.com/api

Autenticación

Utilizamos API keys para autenticar las peticiones.

Puedes ver, editar, y borrar tus API keys en tu cuenta de usuario, en la sección para desarrolladores.

Tu claves API permiten acceso a mucha de tu información sensible, así que asegúrate de mantenerlas muy seguras. No las expongas en áreas públicas como GitHub o a través de peticiones no seguras.

La autenticación de la API se realiza mediante la cabecera HTTP Authorization vía Bearer token, usando como token de acceso, el obtenido al ejecutar el metodo /login con tu API Key.

Recuerda: Todas las peticiones deben realizarse sobre HTTPS. Si se realizan sobre HTTP, fallarán.

¿Necesitas ayuda con tu API Key?

Genera una API key en tu perfil de usuario

La cabecera de autenticación debería verse cómo la de este ejemplo:

"Authorization: 
    Bearer yJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"

Errores

Utilizamos códigos de respuesta convencionales de HTTP, para indicar el éxito o fracaso de una solicitud API.

Los códigos del rango 2xx indican el correcto funcionamiento de la llamada.

Los códigos del rango 4xx representan errores en las llamadas realizadas (por falta de campos, información incorrecta, usuario no autenticado, etc.).

Los códigos del rango 5xx representan un error en la sintaxis JSON de la llamada, o en casos muy poco frecuentes, un error de conexión con los servidores de Qnubu.

En caso de obtener errores 5xx de servidor, puedes contactar con it@qnubu.com enviando la llamada realizada y el contenido enviado, para que podamos revisar el problema y en buscar una solución en caso de ser posible.

Resumen de códigos de error

200 - OK. Todo funciona de la manera esperada.

204 - OK. Todo funcionó correctamente, pero la llamada no debe devolver ningún contenido.

400 - Error. Error al procesar la llamada. Se devuelve el error concreto como respuesta.

401 - No autorizado. No se ha realizado una autenticación correcta previa a la conexión.

403 - Prohibido. La api key no dispone de permisos para realizar la llamada.

500 - Error de servidor. Algo salió mal, JSON malformado o error de conexión con el servidor (poco frecuente)

Login

Realiza una petición de autenticación, se verifica la API key, y en caso de ser correcta, devuelve el token que se ha de usar en el resto de métodos.

El token generado tiene una caducidad de 24h.

Endpoint:

POST /login

Método para log in

Aquí os mostramos una llamada de ejemplo para realizar el log in:

1var axios = require('axios');
2var data = JSON.stringify({"apiKey":"$2b$12$zni4xlVH0qqhHS0/QlJ9R.YHOLESSG8/XhzgoyatDnaBJrncNlVN"});
3 
4var config = {
5  method: 'post',
6  url: 'https://api.qnubu.com/api/login',
7  headers: { 
8    'Content-Type': 'application/json'
9  },
10  data : data
11};
12 
13axios(config)
14.then(function (response) {
15  console.log(JSON.stringify(response.data));
16})
17.catch(function (error) {
18  console.log(error);
19});
20

Get Catálogo

Devuelve la lista completa de artículos con referencias, imágenes, descripciones, etc.


Endpoint:

GET /producto/getCatalogo

Respuesta obtención catálogo

A continuación, te mostramos un ejemplo de respuesta correcta obtenida:

[
   {
        "itemCode": "ACFU0046",
        "productName": "Pop Top 120mm Qnubu California (Pack 600 Units)",
        "category": 326,
        "shortDescription": "<p><strong>Qnubu California Pop Tops</strong> Vials offer the safest option for packaging, preserving and dispensing your flowers. They come in different formats with different capacities:</p>\n\n<p>20ml - 6D<br />\n50ml - 13D<br />\n70ml - 19D<br />\n110ml - 30D<br />\n220ml - 60D<br />\nSlim Case<br />\nCone - 120mm</p>\n\n<p><br />\n<span style=\"color:#daa520;\"><strong>Carton 600 Units</strong></span></p>\n\n<p><span style=\"color:#daa520;\"><strong>MINIMUM ORDER QUANTITY 1 FULL CARTON</strong></span></p>\n\n<p><strong>Simply by pressing the upper part you can easily open the jar and close it again keeping its flowers always fresh and without giving off odors.</strong></p>",
        "description": "<p><strong>Specifications:</strong> </p>\n\n<ul>\n\t<li>Easy Opening: Pop System</li>\n\t<li>Hermetic closing: Hermetic closing to avoid the entrance of oxygen and the degradation of its flowers.</li>\n\t<li>Anti-Odour: Does not give off odours</li>\n\t<li>Moisture resistant</li>\n\t<li>BPA free - FDA</li>\n\t<li>Suitable for food and pharmaceutical use.</li>\n</ul>\n\n<p><strong>Qnubu's California Safe Pack</strong> line offers the latest in packaging used by dispensaries in the United States and Canada and complies with the most demanding manufacturing and safety standards. We have: Pop Pots, Vacuum Pots, Aluminum Pouches, Lock Pouches</p>",
        "tecnicalDetails": "",
        "manufacturer": "",
        "variationGroup": -1,
        "images": [
            "https://api.qnubu.com/p/ACFU0046/ACFU0046-00.png"
        ]
    },
    {
        "itemCode": "ACVA0061",
        "productName": "Needle tip bottle 15 ml",
        "category": 320,
        "shortDescription": "",
        "description": "",
        "tecnicalDetails": "",
        "manufacturer": "",
        "variationGroup": -1,
        "images": [
            "https://api.qnubu.com/p/ACVA0061/ACVA0061-00.png"
        ]
    }
]

Método para obtener el catálogo

Aquí os mostramos una llamada de ejemplo para obtener el catálogo:

1var axios = require('axios');
2 
3var config = {
4  method: 'get',
5  url: 'https://api.qnubu.com/api/product/getAllProducts',
6  headers: { 
7    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjYXJkQ29kZSI6IkMwMDAxMCIsImdyb3VwQ29kZSI6MTI3LCJsaXN0TnVtIjoxMiwibm9EaXNjb3VudCI6Ik4iLCJkaXNjUmVsIjoiSCIsIm11ZXN0cmFPY3VsdGFzIjoxLCJpYXQiOjE2MTQyNTQzODMsImV4cCI6MTYxNDM0MDc4M30.kDXELgGovdtnpUri5MeaCKZQqT7ba_q_LY7VZ3eurWQ'
8  }
9};
10 
11axios(config)
12.then(function (response) {
13  console.log(JSON.stringify(response.data));
14})
15.catch(function (error) {
16  console.log(error);
17});

Get Categoria

Devuelve el árbol completo de categorías de los productos con el mismo orden que en el website de Qnubu.

El atributo father: null, define la categoría padre del árbol, mientras que el resto, dispone de la categoría inmediatamente superior.


Endpoint:

GET /product/getCategory

Respuesta correcta de obtención de las categorías

A continuación, te mostramos un ejemplo de respuesta correcta obtenida:

[
    {
        "id": 1,
        "name": "",
        "father": null,
        "position": "1"
    },
    {
        "id": 141,
        "name": "Extract",
        "father": 1,
        "position": "1"
    },
   {
        "id": 320,
        "name": "Pack",
        "father": 1,
        "position": "9"
    }
]

Método para obtener las categorías de Qnubu

Aquí os mostramos una llamada de ejemplo para obtener el árbol de categorías:

1var axios = require('axios');
2var data = JSON.stringify({"lang":1});
3 
4var config = {
5  method: 'get',
6  url: 'https://api.qnubu.com/api/product/getCategory',
7  headers: { 
8    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjYXJkQ29kZSI6IkMwMDAxMCIsImdyb3VwQ29kZSI6MTI3LCJsaXN0TnVtIjoxMiwibm9EaXNjb3VudCI6Ik4iLCJkaXNjUmVsIjoiSCIsIm11ZXN0cmFPY3VsdGFzIjoxLCJpYXQiOjE2MTUxOTQ0MzQsImV4cCI6MTYxNTI4MDgzNH0.4SCvWNwD-nzP033a1Rt95uoWlmQkOfpj0hAqB01yMwI', 
9    'Content-Type': 'application/json'
10  },
11  data : data
12};
13 
14axios(config)
15.then(function (response) {
16  console.log(JSON.stringify(response.data));
17})
18.catch(function (error) {
19  console.log(error);
20});
21
22

Get Stock

Obtiene el Stock de productos disponibles.


Endpoint:

GET /product/getStock

Respuesta correcta de obtención de stock del producto

A continuación, te mostramos un ejemplo de respuesta correcta obtenida:

[
    {
        "itemCode": "ACFU0046",
        "stock": 99999
    },
    {
        "itemCode": "ACVA0061",
        "stock": 99999
    },
    {
        "itemCode": "ACVA0062",
        "stock": 2
    },
    {
        "itemCode": "ACVA0063",
        "stock": 99999
    }
]

Método para obtener el stock del producto

Llamada de ejemplo getStock:

1var axios = require('axios');
2    
3var config = {
4  method: 'get',
5  url: 'https://api.qnubu.com/api/product/getStock',
6  headers: { 
7    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjYXJkQ29kZSI6IkMwMjIyNSIsImdyb3VwQ29kZSI6MTA2LCJsaXN0TnVtIjoxMiwibm9EaXNjb3VudCI6Ik4iLCJkaXNjUmVsIjoiSCIsIm11ZXN0cmFPY3VsdGFzIjoxLCJpYXQiOjE2MTQ5NTE4ODgsImV4cCI6MTYxNTAzODI4OH0.bWL_rLE4mmW9Aq2DmVl50LIKu7VisPgHeY5K_n9_GtI'
8  }
9};
10
11axios(config)
12.then(function (response) {
13  console.log(JSON.stringify(response.data));
14})
15.catch(function (error) {
16  console.log(error);
17});

Get Unidades Medida

Devuelve el formato de venta de cada uno de los productos (caja, palet, unidad), con la cantidad unitaria de producto, su peso en kg y medidas en cm.


Endpoint:

GET /product/getMeasurementUnits

Respuesta correcta de obtención de unidades de medida

A continuación, te mostramos un ejemplo de respuesta correcta obtenida:

[
    {
        "itemcode": "ACFU0046",
        "uomcode": "Unt",
        "quantity": 1,
        "weight": 0.05,
        "width": 2,
        "height": 2,
        "length": 12,
        "volume": 48
    },
    {
        "itemcode": "ACFU0046",
        "uomcode": "Box",
        "quantity": 600,
        "weight": 3.8,
        "width": 34,
        "height": 36,
        "length": 30,
        "volume": 36720
    }
]

Método para obtener el formato de venta del producto

Llamada de ejemplo getUnidadMedida:

1var axios = require('axios');
2var data = '';
3 
4var config = {
5  method: 'get',
6  url: 'https://api.qnubu.com/api/product/getMeasurementUnits',
7  headers: { 
8    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjYXJkQ29kZSI6IkMwMDAxMCIsImdyb3VwQ29kZSI6MTI3LCJsaXN0TnVtIjoxMiwibm9EaXNjb3VudCI6Ik4iLCJkaXNjUmVsIjoiSCIsIm11ZXN0cmFPY3VsdGFzIjoxLCJpYXQiOjE2MTUxOTQ0MzQsImV4cCI6MTYxNTI4MDgzNH0.4SCvWNwD-nzP033a1Rt95uoWlmQkOfpj0hAqB01yMwI'
9  },
10  data : data
11};
12 
13axios(config)
14.then(function (response) {
15  console.log(JSON.stringify(response.data));
16})
17.catch(function (error) {
18  console.log(error);
19});
20

Get Precio

Obtiene la tarifa completa de precios del cliente. Estos precios incluyen el descuento aplicado. Además se envía el precio PVP del producto.


Endpoint:

GET /product/getPrice

Respuesta correcta de obtención de precio del producto

A continuación, te mostramos un ejemplo de respuesta correcta obtenida:

[
    {
        "itemCode": "ACVA0061",
        "price": 0.56,
        "pvp": 0.93
    },
    {
        "itemCode": "ACVA0062",
        "price": 0.35,
        "pvp": 0.58
    }
]

Método para obtener el precio del producto

Llamada de ejemplo getPrecio:

1var axios = require('axios');
2 
3var config = {
4  method: 'get',
5  url: 'https://api.qnubu.com/api/product/getPrice',
6  headers: { 
7    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjYXJkQ29kZSI6IkMwMDAxMCIsImdyb3VwQ29kZSI6MTI3LCJsaXN0TnVtIjoxMiwibm9EaXNjb3VudCI6Ik4iLCJkaXNjUmVsIjoiSCIsIm11ZXN0cmFPY3VsdGFzIjoxLCJpYXQiOjE2MTUxOTQ0MzQsImV4cCI6MTYxNTI4MDgzNH0.4SCvWNwD-nzP033a1Rt95uoWlmQkOfpj0hAqB01yMwI'
8  }
9};
10 
11axios(config)
12.then(function (response) {
13  console.log(JSON.stringify(response.data));
14})
15.catch(function (error) {
16  console.log(error);
17});

Get Descuento Cantidad

Devuelve los tramos de descuentos que tienen los productos en función de la cantidad comprada. Se obtiene la cantidad en unidades, el descuento aplicado, el precio final con descuento, y el rango de fechas en la que se encuentra activa la promoción.


Endpoint:

GET /product/getAmountDiscount

Respuesta correcta de obtención de descuentos

A continuación, te mostramos un ejemplo de respuesta correcta obtenida:

[
    {
        "itemCode": "ACFU0046",
        "discounts": [
            {
                "quantity": 600,
                "discount": 10,
                "specialPrice": 0.14,
                "fromDate": "2019-11-26T00:00:00.000Z",
                "toDate": "2021-03-09T10:10:11.873Z"
            },
            {
                "quantity": 3000,
                "discount": 20,
                "specialPrice": 0.12,
                "fromDate": "2019-11-26T00:00:00.000Z",
                "toDate": "2021-03-09T10:10:11.873Z"
            },
            {
                "quantity": 12000,
                "discount": 30,
                "specialPrice": 0.11,
                "fromDate": "2019-11-26T00:00:00.000Z",
                "toDate": "2021-03-09T10:10:11.873Z"
            },
            {
                "quantity": 60000,
                "discount": 25,
                "specialPrice": 0.11,
                "fromDate": "2019-11-26T00:00:00.000Z",
                "toDate": "2021-03-09T10:10:11.873Z"
            }
        ]
    }
]

Método para obtener descuentos por cantidad

Llamada de ejemplo getDescuentoCantidad:

1var axios = require('axios');
2 
3var config = {
4  method: 'get',
5  url: 'https://api.qnubu.com/api/product/getAmountDiscount',
6  headers: { 
7    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjYXJkQ29kZSI6IkMwMDAxMCIsImdyb3VwQ29kZSI6MTI3LCJsaXN0TnVtIjoxMiwibm9EaXNjb3VudCI6Ik4iLCJkaXNjUmVsIjoiSCIsIm11ZXN0cmFPY3VsdGFzIjoxLCJpYXQiOjE2MTUxOTQ0MzQsImV4cCI6MTYxNTI4MDgzNH0.4SCvWNwD-nzP033a1Rt95uoWlmQkOfpj0hAqB01yMwI'
8  }
9};
10 
11axios(config)
12.then(function (response) {
13  console.log(JSON.stringify(response.data));
14})
15.catch(function (error) {
16  console.log(error);
17});

Get Catálogo CSV

Devuelve la lista completa de artículos con preparados para la importación en formato CSV.


Endpoint:

GET /producto/getCsv

Respuesta obtención catálogo

A continuación, te mostramos un ejemplo de respuesta correcta obtenida:

REFERENCE;PRODUCT;BRAND;TAX;STOCK;SHORT_DESCRIPTION;DESCRIPTION;IMAGES;CATEGORY_PATH;ID_CATEGORY_PATH;BASE_PRICE;PVP;WEIGHT;WIDTH;HEIGHT;DEPTH;ID_CATEGORY_DEFAULT;REFERENCE_PARENT;ATTR;ATTR2
ABRA0004;"Abrazadera Metálica Sin Fin";;21;99999;"";"";https://newapi.naturalsystems.es/p/ABRA0004/ABRA0004-00.png;Control de Clima > Conductos de ventilación;3772 > 3866;0.75;0.94;0.04;12;12;1;3866;;465
ABRA0005;"Abrazadera Metálica Sin Fin";;21;99999;"";"";https://newapi.naturalsystems.es/p/ABRA0005/ABRA0005-00.png;Control de Clima > Conductos de ventilación;3772 > 3866;0.8;1;0.01;14;14;1;3866;ABRA0004;466

Método para obtener el catálogo en formato CSV

Aquí os mostramos una llamada de ejemplo para obtener el catálogo:

1var axios = require('axios');
2var data = JSON.stringify({"lang":1});
3 
4var config = {
5  method: 'get',
6  url: 'https://api.qnubu.com/api/producto/getCsv',
7  headers: { 
8    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjYXJkQ29kZSI6IkMwMDAxMCIsImdyb3VwQ29kZSI6MTI3LCJsaXN0TnVtIjoxMiwibm9EaXNjb3VudCI6Ik4iLCJkaXNjUmVsIjoiSCIsIm11ZXN0cmFPY3VsdGFzIjoxLCJpYXQiOjE2MTQyNTQzODMsImV4cCI6MTYxNDM0MDc4M30.kDXELgGovdtnpUri5MeaCKZQqT7ba_q_LY7VZ3eurWQ'
9  },
10  data : data
11};
12 
13axios(config)
14.then(function (response) {
15  console.log(JSON.stringify(response.data));
16})
17.catch(function (error) {
18  console.log(error);
19});

Get Catálogo Prestashop

Devuelve la lista completa de artículos con preparados para la importación de datos en las plataformas Prestashop.


Endpoint:

GET /producto/getCsvPrestashop

Respuesta obtención catálogo

A continuación, te mostramos un ejemplo de respuesta correcta obtenida:

REFERENCE;PRODUCT;BRAND;TAX;WEIGHT;STOCK;SHORT_DESCRIPTION;DESCRIPTION;IMAGES;CATEGORY_PATH;ID_CATEGORY_PATH;PRICE_CLIENTE;PVP;WIDTH;HEIGHT;DEPTH;ID_CATEGORY_DEFAULT;REFERENCE_PARENT;ATTR;ATTR2
ABRA0004;"Abrazadera Metálica Sin Fin";;21;0.04;99999;"";"";https://newapi.naturalsystems.es/p/ABRA0004/ABRA0004-00.png;Control de Clima > Conductos de ventilación;3772 > 3866;0.75;0.94;12;12;1;3866;;465
ABRA0005;"Abrazadera Metálica Sin Fin";;21;0.01;99999;"";"";https://newapi.naturalsystems.es/p/ABRA0005/ABRA0005-00.png;Control de Clima > Conductos de ventilación;3772 > 3866;0.8;1;14;14;1;3866;ABRA0004;466

Método para obtener el catálogo adaptado a Prestashop

Aquí os mostramos una llamada de ejemplo para obtener el catálogo:

1var axios = require('axios');
2var data = JSON.stringify({"lang":1});
3 
4var config = {
5  method: 'get',
6  url: 'https://api.qnubu.com/api/producto/getCsvPrestashop',
7  headers: { 
8    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjYXJkQ29kZSI6IkMwMDAxMCIsImdyb3VwQ29kZSI6MTI3LCJsaXN0TnVtIjoxMiwibm9EaXNjb3VudCI6Ik4iLCJkaXNjUmVsIjoiSCIsIm11ZXN0cmFPY3VsdGFzIjoxLCJpYXQiOjE2MTQyNTQzODMsImV4cCI6MTYxNDM0MDc4M30.kDXELgGovdtnpUri5MeaCKZQqT7ba_q_LY7VZ3eurWQ'
9  },
10  data : data
11};
12 
13axios(config)
14.then(function (response) {
15  console.log(JSON.stringify(response.data));
16})
17.catch(function (error) {
18  console.log(error);
19});

Get Catálogo Woocommerce

Devuelve la lista completa de artículos con preparados para la importación de datos en las plataformas Woocommerce.


Endpoint:

GET /producto/getCsvWoocommerce

Respuesta obtención catálogo

A continuación, te mostramos un ejemplo de respuesta correcta obtenida:

Tipo;SKU;Nombre;Publicado;"¿Está destacado?";"Visibilidad en el catálogo";"Descripción corta";Descripción;"Día en que empieza el precio rebajado";"Día en que termina el precio rebajado";"Estado del impuesto";"Clase de impuesto";"¿En inventario?";Inventario;"Cantidad de bajo inventario";"¿Permitir reservas de productos agotados?";"¿Vendido individualmente?";"Peso (kg)";"Longitud (cm)";"Anchura (cm)";"Altura (cm)";"¿Permitir valoraciones de clientes?";"Nota de compra";"Precio rebajado";"Precio normal";Categorías;Etiquetas;"Clase de envío";Imágenes;"Límite de descargas";"Días de caducidad de la descarga";Superior;"Productos agrupados";"Ventas dirigidas";"Ventas cruzadas";URL externa";"Texto del botón";Posición;meta:Brand;"Nombre del atributo 1";"Valor(es) del atributo 1";"Atributo visible 1";"Atributo global 1";"Nombre del atributo 2";"Valor(es) del atributo 2";"Atributo visible 2";"Atributo global 2";"Nombre del atributo 3";"Valor(es) del atributo 3";"Atributo visible 3";"Atributo global 3";"Nombre del atributo 4";"Valor(es) del atributo 4";"Atributo visible 4";"Atributo global 4";"Nombre del atributo 5";"Valor(es) del atributo 5";"Atributo visible 5"
simple;ABRA0004;"Abrazadera Metálica Sin Fin";1;0;visible;"";"";0;0;taxable;;1;99999;;0;0;0.04;1;12;12;1;;;0.75;Control de Clima > Conductos de ventilación;;;https://newapi.naturalsystems.es/p/ABRA0004/ABRA0004-00.png;;;;;;;;;;;100 95mm-105mm;465;1;
simple;ABRA0005;"Abrazadera Metálica Sin Fin";1;0;visible;"";"";0;0;taxable;;1;99999;;0;0;0.01;1;14;14;1;;;0.8;Control de Clima > Conductos de ventilación;;;https://newapi.naturalsystems.es/p/ABRA0005/ABRA0005-00.png;;;;;;;;;;;125 119mm-131mm;466;1;

Método para obtener el catálogo adaptado a Woocommerce

Aquí os mostramos una llamada de ejemplo para obtener el catálogo:

1var axios = require('axios');
2var data = JSON.stringify({"lang":1});
3 
4var config = {
5  method: 'get',
6  url: 'https://api.qnubu.com/api/producto/getCsvWoocommerce',
7  headers: { 
8    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjYXJkQ29kZSI6IkMwMDAxMCIsImdyb3VwQ29kZSI6MTI3LCJsaXN0TnVtIjoxMiwibm9EaXNjb3VudCI6Ik4iLCJkaXNjUmVsIjoiSCIsIm11ZXN0cmFPY3VsdGFzIjoxLCJpYXQiOjE2MTQyNTQzODMsImV4cCI6MTYxNDM0MDc4M30.kDXELgGovdtnpUri5MeaCKZQqT7ba_q_LY7VZ3eurWQ'
9  },
10  data : data
11};
12 
13axios(config)
14.then(function (response) {
15  console.log(JSON.stringify(response.data));
16})
17.catch(function (error) {
18  console.log(error);
19});

Get Combinaciones

Devuelve la lista completa de combinaciones de artículos preparados para la importación en formato CSV.


Endpoint:

GET /producto/getCsvVariations

Respuesta de obtención de combinaciones

A continuación, te mostramos un ejemplo de respuesta correcta obtenida:

ID_COMB;ITEMCODE
2707;ADNU0003
2707;ADNU0026
2707;ADNU0102
2707;ADNU0101
2708;ADNU0177
2708;ADNU0250

Método para obtener las combinaciones de artículo

Aquí os mostramos una llamada de ejemplo para obtener las combinaciones:

1var axios = require('axios');
2var data = JSON.stringify({"lang":1});
3 
4var config = {
5  method: 'get',
6  url: 'https://api.qnubu.com/api/producto/getCsvVariations',
7  headers: { 
8    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjYXJkQ29kZSI6IkMwMDAxMCIsImdyb3VwQ29kZSI6MTI3LCJsaXN0TnVtIjoxMiwibm9EaXNjb3VudCI6Ik4iLCJkaXNjUmVsIjoiSCIsIm11ZXN0cmFPY3VsdGFzIjoxLCJpYXQiOjE2MTQyNTQzODMsImV4cCI6MTYxNDM0MDc4M30.kDXELgGovdtnpUri5MeaCKZQqT7ba_q_LY7VZ3eurWQ'
9  },
10  data : data
11};
12 
13axios(config)
14.then(function (response) {
15  console.log(JSON.stringify(response.data));
16})
17.catch(function (error) {
18  console.log(error);
19});

Get Atributos

Devuelve la lista completa de atributos de artículos preparados para la importación en formato CSV.


Endpoint:

GET /producto/getCsvAtributes

Respuesta obtención atributos

A continuación, te mostramos un ejemplo de respuesta correcta obtenida:

ID_ATTRIBUTE_GROUP;NAME_ATTRIBUTE_GROUP;ID_ATTRIBUTE;NAME_ATTRIBUTE
4;Liquidos;44;30 ml
15;Macetas;1580;24.7x24.7x26.1cm (11L)
6;Extractores;1605;3250m3/h (2 Boca Entrada 250mm - 1 Boca Salida 315mm)

Método para obtener los atributos de artículo

Aquí os mostramos una llamada de ejemplo para obtener los atributos:

1var axios = require('axios');
2var data = JSON.stringify({"lang":1});
3 
4var config = {
5  method: 'get',
6  url: 'https://api.qnubu.com/api/producto/getCsvAtributes',
7  headers: { 
8    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjYXJkQ29kZSI6IkMwMDAxMCIsImdyb3VwQ29kZSI6MTI3LCJsaXN0TnVtIjoxMiwibm9EaXNjb3VudCI6Ik4iLCJkaXNjUmVsIjoiSCIsIm11ZXN0cmFPY3VsdGFzIjoxLCJpYXQiOjE2MTQyNTQzODMsImV4cCI6MTYxNDM0MDc4M30.kDXELgGovdtnpUri5MeaCKZQqT7ba_q_LY7VZ3eurWQ'
9  },
10  data : data
11};
12 
13axios(config)
14.then(function (response) {
15  console.log(JSON.stringify(response.data));
16})
17.catch(function (error) {
18  console.log(error);
19});

Create Nuevo Pedido

Envía un nuevo pedido o presupuesto. Se permiten pedidos directos y de dropshipping.


Endpoint:

POST /order/newOrder

Objeto de ejemplo

{
    "isQuote": "Y",
    "isDropship": "Y",
    "shipInstructions": "C/ Test 123 Montilla 14550 Córdoba España",
    "shipAddress": "Tienda Córdoba",
    "billAddress": "Tienda Córdoba",
    "orderIntructions": "Do not send documentation",
    "remarks": "Order Comments",
    "items": [
        {
            "itemCode": "MAEX0188",
            "quantity": 10
        },
        {
            "itemCode": "PREN0009",
            "quantity": 1
        }
    ]
}

Respuesta correcta Obtenida

Order successfully grabbed

Método para crear nuevo pedido

Llamada de ejemplo createNuevoPedido:

1var axios = require('axios');
2var data = JSON.stringify({"isQuote":"Y","isDropship":"Y","shipInstructions":"C/ Test 123 Montilla 14550 Córdoba España","shipAddress":"Tienda Córdoba","billAddress":"Tienda Córdoba","orderIntructions":"No enviar documentación","remarks":"Comentarios del pedido","items":[{"itemCode":"TONE0011","quantity":80},{"itemCode":"LUMI0017","quantity":5},{"itemCode":"SUST0110","quantity":2}]});
3 
4var config = {
5  method: 'post',
6  url: 'https://api.qnubu.com/api/order/newOrder',
7  headers: { 
8    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjYXJkQ29kZSI6IkMwMDAxMCIsImdyb3VwQ29kZSI6MTI3LCJsaXN0TnVtIjoxMiwibm9EaXNjb3VudCI6Ik4iLCJkaXNjUmVsIjoiSCIsIm11ZXN0cmFPY3VsdGFzIjoxLCJpYXQiOjE2MTUxOTQ0MzQsImV4cCI6MTYxNTI4MDgzNH0.4SCvWNwD-nzP033a1Rt95uoWlmQkOfpj0hAqB01yMwI', 
9    'Content-Type': 'application/json'
10  },
11  data : data
12};
13 
14axios(config)
15.then(function (response) {
16  console.log(JSON.stringify(response.data));
17})
18.catch(function (error) {
19  console.log(error);
20});

Get Direccion Envio

Obtiene las direcciones de envío registradas en la cuenta del usuario.


Endpoint:

GET /customer/getShippingAddress

Respuesta correcta Obtenida

[
{
        "address": "My address",
        "street": "123rd test street",
        "city": "Montilla",
        "zipCode": "14550",
        "state": "Córdoba",
        "country": "Córdoba",
        "contactPerson": "Manuel Fernández López.",
        "phone": "+34 6xx xx xx xx",
        "schedule": "From 10 a.m. to 2 p.m.",
        "remark": "Transport Remarks"
    }
]

Método para obtener la/s direccion/es de envío

Llamada de ejemplo getDireccionEnvio:

1var axios = require('axios');
2 
3var config = {
4  method: 'get',
5  url: 'https://api.qnubu.com/api/customer/getShippingAddress',
6  headers: { 
7    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjYXJkQ29kZSI6IkMwMjIyNSIsImdyb3VwQ29kZSI6MTI2LCJsaXN0TnVtIjoxMiwibm9EaXNjb3VudCI6Ik4iLCJkaXNjUmVsIjoiSCIsIm11ZXN0cmFPY3VsdGFzIjoxLCJpYXQiOjE2MTQyNTUxMDIsImV4cCI6MTYxNDM0MTUwMn0.2MiXr-C-JOtyvn__o09MXCLlpe7EiUr3ZFPfSEMmUa8'
8  }
9};
10 
11axios(config)
12.then(function (response) {
13  console.log(JSON.stringify(response.data));
14})
15.catch(function (error) {
16  console.log(error);
17});

Create Direccion Envio

Crea una nueva dirección de envío con los datos de la llamada.


Endpoint:

POST /customer/createShippingAddress

Objeto de ejemplo

1{
2    "name": "Córdoba Shop 2",
3    "street": "Sample Street 123",
4    "zipCode": "14550",
5    "city": "Montilla",
6    "state": "Córdoba",
7    "country": "ES",
8    "contactPerson": "Antonio Gutiérrez",
9    "phone": "+34 6xx xx xx xx",
10    "phoneShipping": "+34 6xx xx xx xx",
11    "shippingRemarks": "Transport Remarks"
12}

Respuesta correcta Obtenida

Address 'Córdoba Shop 2' created successfully.

Método para crear una nueva dirección de envío

Llamada de ejemplo createDireccionEnvio:

1var axios = require('axios');
2var data = JSON.stringify({
3    "name": "Córdoba Shop 2",
4    "street": "Sample Street 123",
5    "zipCode": "14550",
6    "city": "Montilla",
7    "state": "Córdoba",
8    "country": "ES",
9    "contactPerson": "Antonio Gutiérrez",
10    "phone": "+34 6xx xx xx xx",
11    "phoneShipping": "+34 6xx xx xx xx",
12    "shippingRemarks": "Transport Remarks"
13});
14 
15var config = {
16  method: 'post',
17  url: 'https://api.qnubu.com/api/customer/createShippingAddress',
18  headers: { 
19    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjYXJkQ29kZSI6IkMwMDAxMCIsImdyb3VwQ29kZSI6MTI3LCJsaXN0TnVtIjoxMiwibm9EaXNjb3VudCI6Ik4iLCJkaXNjUmVsIjoiSCIsIm11ZXN0cmFPY3VsdGFzIjoxLCJpYXQiOjE2MTQ5NDE5MDEsImV4cCI6MTYxNTAyODMwMX0.qesOvjyWZfQJF3TOYk4iHa4o0OYoqZElGXam_yyQWsk', 
20    'Content-Type': 'application/json'
21  },
22  data : data
23  };
24 
25axios(config)
26.then(function (response) {
27  console.log(JSON.stringify(response.data));
28})
29.catch(function (error) {
30  console.log(error);
31});
32

Update Direccion Envio

Actualiza los datos de una dirección de envío ya existente. Sólo es obligatorio el campo “address” y los campos a actualizar.


Endpoint:

PATCH /customer/updateShippingAddress

Respuesta correcta Obtenida

Address 'Córdoba Shop 2' updated successfully.

Método para actualizar los datos de tus direcciones de envío

Llamada de ejemplo updateDireccionEnvio:

1var axios = require('axios');
2var data = JSON.stringify({"address":"My address","country":"ES","zipCode":"","phone":"+34 6xx xx xx xx","phoneShipping":"+34 6xx xx xx xx xx "});
3 
4var config = {
5  method: 'patch',
6  url: 'https://api.qnubu.com/api/customer/updateShippingAddress',
7  headers: { 
8    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjYXJkQ29kZSI6IkMwMjIyNSIsImdyb3VwQ29kZSI6MTA2LCJsaXN0TnVtIjoxMiwibm9EaXNjb3VudCI6Ik4iLCJkaXNjUmVsIjoiSCIsIm11ZXN0cmFPY3VsdGFzIjoxLCJpYXQiOjE2MTQ5NTE4ODgsImV4cCI6MTYxNTAzODI4OH0.bWL_rLE4mmW9Aq2DmVl50LIKu7VisPgHeY5K_n9_GtI', 
9    'Content-Type': 'application/json'
10  },
11  data : data
12};
13 
14axios(config)
15.then(function (response) {
16  console.log(JSON.stringify(response.data));
17})
18.catch(function (error) {
19  console.log(error);
20});

Delete Direccion Envio

Elimina la dirección de envío especificada en la llamada. La dirección debe ser exacta.


Endpoint:

DELETE /customer/deleteShippingAddress

Objeto de ejemplo

1{
2    "address": "Córdoba Tienda"
3}

Respuesta correcta obtenida

Address 'Córdoba Tienda 2' deleted successfully.

Método para eliminar una dirección de envío

Llamada de ejemplo deleteDireccionEnvio:

1var axios = require('axios');
2var data = JSON.stringify({  "address": "Tienda Córdoba" });
3 
4var config = {
5  method: 'delete',
6  url: 'https://api.qnubu.com/api/customer/deleteShippingAddress',
7  headers: { 
8    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjYXJkQ29kZSI6IkMwMDAxMCIsImdyb3VwQ29kZSI6MTI3LCJsaXN0TnVtIjoxMiwibm9EaXNjb3VudCI6Ik4iLCJkaXNjUmVsIjoiSCIsIm11ZXN0cmFPY3VsdGFzIjoxLCJpYXQiOjE2MTQ5NDE5MDEsImV4cCI6MTYxNTAyODMwMX0.qesOvjyWZfQJF3TOYk4iHa4o0OYoqZElGXam_yyQWsk', 
9    'Content-Type': 'application/json'
10  },
11  data : data
12};
13 
14axios(config)
15.then(function (response) {
16  console.log(JSON.stringify(response.data));
17})
18.catch(function (error) {
19  console.log(error);
20});

Get Direccion Facturacion

Obtiene las direcciones de facturación registradas en la cuenta del usuario.


Endpoint:

GET /customer/getBillingAddress

Respuesta correcta Obtenida

[
    {
        "address": "Córdoba Address",
        "street": "Sample street 123",
        "city": "Montilla",
        "zipCode": "14550",
        "state": "Córdoba",
        "country": "Córdoba"
    }
]

Método para obtener la/s direccion/es de facturación

Llamada de ejemplo getDireccionFacturacion:

1var axios = require('axios');
2 
3var config = {
4  method: 'get',
5  url: 'https://api.qnubu.com/api/customer/getBillingAddress',
6  headers: { 
7    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjYXJkQ29kZSI6IkMwMDAxMCIsImdyb3VwQ29kZSI6MTI3LCJsaXN0TnVtIjoxMiwibm9EaXNjb3VudCI6Ik4iLCJkaXNjUmVsIjoiSCIsIm11ZXN0cmFPY3VsdGFzIjoxLCJpYXQiOjE2MTQ5NDE5MDEsImV4cCI6MTYxNTAyODMwMX0.qesOvjyWZfQJF3TOYk4iHa4o0OYoqZElGXam_yyQWsk'
8  }
9};
10 
11axios(config)
12.then(function (response) {
13  console.log(JSON.stringify(response.data));
14})
15.catch(function (error) {
16  console.log(error);
17});

Colección métodos

Para facilitar el uso de todos estos métodos hemos creado una colección para Postman.

Sólo tienes que importar este archivo, seguir los métodos de autenticación y login y ya dispondrás de todos los datos necesarios para realizar las peticiones a nuestra API.