Requisitos previos

Para poder usar la API externa necesitas una cuenta revo retail y un token de acceso

  1. Inicia sesión en la cuenta deseada
  2. Ir a la administración de la cuenta
  3. Crea un nuevo token

Uso básico

La URL principal para la API externa es

https://revoretail.works/api/external

Y debemos proporcionar las cabezeras obligatorias para la autentificación

username: {account-username}
Authorization: Bearer {token}

Lista genérica de respuesta

Respuesta

{
 "current_page"  : 1,
 "from"          : 1,
 "last_page"     : 2,
 "next_page_url" : "https://revoretail.works/api/external/[resource]?page=2",
 "path"          : "http://revoretail.works/api/external/[resource]",
 "per_page"      : 50,
 "prev_page_url" : null,
 "to"            : 50,
 "total"         : 10,
 "data": []
}

###Recursos disponibles

Obtener lista de grupos

Devuelve una lista de grupos

Llamada de ejemplo

GET https://revoretail.works/api/external/catalog/groups

[
 {
 "id": 1,
        "name", "Shoes",
        "photo" 	: "",
        "order" 	: 0,
        "active" 	: 1,
        "group_id" 	: 1,
        "tax_id" 	: 1
    },
    {
        "id": 2,
        "name", "Pants",
        "photo" 	: "",
        "order" 	: 0,
        "active" 	: 1,
        "group_id" 	: 1,
        "tax_id" 	: 1
    }
]

Obtener lista de categorías

Devuelve una lista de categorías, que se pueden filtrar por grupos

Llamada de ejemplo

GET https://revoretail.works/api/external/catalog/categories?group=

[
    {
        "id": 1,
        "name", "Trousers",
        "photo" 	: "",
        "order" 	: 0,
        "active" 	: 1,
        "group_id" 	: 1,
        "tax_id" 	: 1
    },
    {
        "id": 2,
        "name", "Shorts",
        "photo" 	: "",
        "order" 	: 0,
        "active" 	: 1,
        "group_id" 	: 1,
        "tax_id" 	: 1
    }
]

Obtener lista de productos

Devuelve una lista de productos, que se pueden filtrar por categorías

Llamada de ejemplo

GET https://revoretail.works/api/external/catalog/products?category=

[
    {
        "id": 1,
        "name", "new nike xl",
        "reference"             : "",
        "info"                  : "",
        "shortInfo"             : "",
        "brand"                 : "",
        "season"                : "",
        "photo"                 : "",
        "order"                 : "0",
        "active"                : "1",
        "featured"              : "0",
        "isOpen"                : "0",
        "type"                  : "0",
        "price"                 : "",
        "costPrice"             : "",
        "barcode"               : "",
        "category_id"           : 1,
        "tax_id"                : 1,
        "main_product_id"       : null,
        "usesStockManagement"   : false,
        "usesWeight"            : false,
        "unit_id"               : "1"
    }, {
        "id": 2,
        "name", "new nike m"
        "reference"             : "",
        "info"                  : "",
        "shortInfo"             : "",
        "brand"                 : "",
        "season"                : "",
        "photo"                 : "",
        "order"                 : "0",
        "active"                : "1",
        "featured"              : "0",
        "isOpen"                : "0",
        "type"                  : "0",
        "price"                 : "",
        "costPrice"             : "",
        "barcode"               : "",
        "category_id"           : 1,
        "tax_id"                : 1,
        "main_product_id"       : null,
        "usesStockManagement"   : false,
        "usesWeight"            : false,
        "unit_id"               : "1"    }
]

Si le añadimos el parámetro withStocks dentro de cada producto veremos un listado de los estocs de este producto en cada almacen. ej:

[
    {
        "id": 1,
        "name", "new nike xl",
        ...
        "stocks": [{
            "id": 1,"warehouse_id": 1, "quantity": 10
        },{
            "id": 2,"warehouse_id": 3, "quantity": 15
        }]
    }
]


Variantes

RevoRetail usa variantes para almacenar productos de distintas tallas, colores, etc.

Hay 3 objectos necesarios para representar las variantes.

** 1. Variant Set ** És el tipo de variante, por ejemple, talla o color.

GET https://revoretail.works/api/external/catalog/variantSets

[
    {"id": 1, "name": "Color"},
    {"id": 1, "name": "Talla"}
]

** 2. Variant ** Son las variantes de cada variantSet, es decir; azul, rojo, amarillo, L, XL, etc.

GET https://revoretail.works/api/external/catalog/variants

[
   {
        "id": 1,
        "name": "Red",
        "order": 2,
        "variant_set_id": 1,
        "color": null
    },
    {
        "id": 2,
        "name": "Blue",
        "order": 1,
        "variant_set_id": 1,
        "color": null
    },
    {
        "id": 3,
        "name": "L",
        "order": 1,
        "variant_set_id": 2,
        "color": null
    },
    {
        "id": 4,
        "name": "XL",
        "order": 1,
        "variant_set_id": 2,
        "color": null
    }
]

** 3. Product Variants ** Son las variantes de cada producto.

GET https://revoretail.works/api/external/catalog/productsVariants

[
    {
        "id": 1,
        "product_id": 23,
        "variant_1_id": 1,
        "variant_2_id": 3
    },
    {
        "id": 2,
        "product_id": 23,
        "variant_1_id": 2,
        "variant_2_id": 3
    },
    {
        "id": 3,
        "product_id": 25,
        "variant_1_id": 2,
        "variant_2_id": 4
    },
    {
        "id": 4,
        "product_id": 25,
        "variant_1_id": 1,
        "variant_2_id": 4
    }
]

Obtener lista de impuestos

Devuelve una lista de impuestos disponibles

Llamada de ejemplo

GET https://revoretail.works/api/external/config/taxes

[
    {
        "id": 1,
        "name": "10%",
        "taxPercentage": 10.00
    },
    {
        "id": 2,
        "name": "21%",
        "taxPercentage": 21.00
    }
]

Generación del catálogo

Para generar el catálogo podemos crear grupos, categorías asignadas a grupos y productos asignados a categorías. En los tres casos la api permite enviar un diccionario con el objeto a crear (grupo, categoría o producto) o se le puede enviar un listado de diccionarios y así crear varios objectos a la vez. Ej:

POST https://revoretail.works/api/external/catalog/groups

BODY Diccionario:

{
    "name": "Group 1",
    "active": 1,        // Optional, defaults to 1
    "tax_id": 1         // Optional, defaults to null
}

BODY Listado de diccionarios:

[
    {
        "name": "Group 1",
        "active": 1,        // Optional, defaults to 1
        "tax_id": 1         // Optional, defaults to null
    }, {
        "name": "Group 2"
        "active": 1,        // Optional, defaults to 1
        "tax_id": 1         // Optional, defaults to null
    }
]

En cualquiera de los tres casos la respuesta es un JSON 200 con dos campos

{
    "success": 1,                   // Número de objetos creados
    "errors": [{"name": "Group 1"}] // Listado de objetos que no han sido procesados correctamente
}

Crear un categoría

Llamada de ejemplo

POST https://revoretail.works/api/external/catalog/categories

{
    "name": "Category 1",
    "group_id": 1,
    "active": 1,            // Optional, defaults to 1
    "tax_id": 1             // Optional, defaults to null
}

Crear un producto

Llamada de ejemplo

POST https://revoretail.works/api/external/catalog/products

{
    "name": "Category 1",
    "category_id": 1,
    "id":                   // Optional, defaults autoincrement
    "active": 1,            // Optional, defaults to 1
    "tax_id": 1,            // Optional, defaults to null
    "reference": "",		// Optional
    "info": "",				// Optional
    "shortInfo": "",		// Optional
    "brand": "",			// Optional
    "season": "",			// Optional
    "order": "",			// Optional
    "featured": "",			// Optional
    "isOpen": "",			// Optional
    "price": "",			// Optional
    "costPrice": "",		// Optional
    "barcode": "",			// Optional
    "main_product_id": "",	// Optional
    "usesStockManagement": "",	// Optional
    "usesWeight": "",		// Optional
    "unit_id": 1			// Optional
}

Obtener listado de estocs

Devuelve una lista de los estocs de todos los productos

Llamada de ejemplo

GET https://revoretail.works/api/external/catalog/stocks

[
    {
        "id": 1,
        "item_id": "1",
        "warehouse_id": "1",
        "quantity": 10.00
    },
    {
        "id": 2,
        "item_id": "1",
        "warehouse_id": "2",
        "quantity": 20.00
    },
    {
        "id": 3,
        "item_id": "2",
        "warehouse_id": "2",
        "quantity": 15.00
    }
]

Generar un movimiento de estoc

Podemos generar movimientos de estoc con el siguiente POST (parametros: id de almacén, id de producto y cantidad a mover)

Llamada de ejemplo

POST https://revoretail.works/api/external/stocks/add

{
    "product_id": 1,
    "warehouse_id": 1,
    "quantity": 22.5
}

La respuesta es un JSON 200 con la quantity actual del estoc en el almacén.

Obtener lista de métodos de pago

Devuelve una lista de métodos de pago disponibles (tarjeta, efectivo, otros...)

Llamada de ejemplo

GET https://revoretail.works/api/external/config/payment_methods

[
    {
        "id": 1,
        "name": "Card",
    },
    {
        "id": 2,
        "name": "Cash",
    }
]

Crear Orden

Almacenar una orden.

Llamada de ejemplo

POST https://revoretail.works/api/external/orders

{
    "notes": "",
    "shippingAmount": 0,
    "sum": 71.5,
    "subtotal": 59.09,
    "discount": 17.5,
    "orderDiscount": 6.5,
    "tax": 1,
    "total": 65,
    "discountObject": {
        "amount": 1.1,
        "id": null,
        "isPercentage": true,
        "name": "Without iva"
    },
    "customer_id": null,
    "shipping_id": null,
    "employee_id": 1,
    "closed_at": "2017-12-31 13:00:00",
    "order_contents": [
        {
            "name": "Dark shoes XL", 
            "quantity": 2, 
            "weight": null,
            "price": 27,
            "sum": 54,
            "discount": 11,
            "subtotal": 40,
            "tax": 4,
            "total": 44,
            "taxPercentage": 10,
            "discountObject": {
                "amount": 1.1,
                "id": null,
                "isPercentage": false,
                "name": "2nd unit 50%"
            },
            "notes": "",
            "margin": 0,
            "product_id": 1
        }, {
            "name": "Red shoes M", 
            "quantity": 1, 
            "weight": null,
            "price": 27.5,
            "sum": 27.5,
            "discount": 0,
            "subtotal": 25,
            "tax": 2.75,
            "total": 27.5,
            "taxPercentage": 10,
            "discountObject": {},
            "notes": "",
            "margin": 0,
            "product_id": 2
        }
    ]
}

Así, el programa devuelve una orden. Como campos relevantes, obtenemos el ID del pedido que se usará para realizar pagos y crear una factura. {"id": 1, "status": 0, ...}

Crear pagos

Crear pagos con su factura.

Example call

POST https://revoretail.works/api/external/orders/{order_id}/invoices

{
    "payments": [
    {
        "amount": 65,
        "change": 0,
        "extra": 0,
        "payment_method_id": 1
    }
    ]
}

Esta llamada devuelve una factura con la su id, número y sus pagos. {"id": 1, "number": "E-1", ...}