NAV Navbar
Shell C# Java PHP

Introduction

¡Bienvenido a la API de Sabbatic!

La API de Sabbatic está estructurada siguiendo los fundamentos de una API RESTful.
Todas las respuestas, incluyendo las respuestas de errores, devuelven un JSON.
En este documento podrás encontrar los diferentes servicios que ofrecemos para visualizar y gestionar las principales entidades de Sabbatic.

Important!

Authentication

Login

Para autenticarse, debes hacerlo con la siguiente llamada al servicio web:

    # Llamada desde consola Linux
    curl --request POST "https://api.sabbatic.es/v2/login"
    --data "user=youruser@email.xxx"
    --data "password=yoursabbaticpassword"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/login");
    var request = new RestRequest(Method.POST);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddParameter("user", "youruser@email.xxx");
    request.AddParameter("password", "yoursabbaticpassword");
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "user=youruser@email.xxx&password=yoursabbaticpassword");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/login")
        .post(body)
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/login');
        $request->setMethod(HTTP_METH_POST);

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'Content-Type' => 'application/x-www-form-urlencoded'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'user' => 'youruser@email.xxx',
            'password' => 'yoursabbaticpassword'
        ));

        try {
            $response = $request->send();

            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

La respuesta devolverá la session_id que deberás utilizar en cada petición a los servicios de Sabbatic:

    {
        "session_id": "YWH3KIjOF3GyWyedbtcIUkr..."
    }

Sabbatic utiliza un sistema de identificadores de sesión para autorizar a un usuario a realizar llamadas a cualquier servicio web.

HTTP Request

POST https://api.sabbatic.es/v2/login

Parámetros de datos

Parámetro Tipo Descripción
user string Cuenta de correo registrada en Sabbatic. Si no dispones de una, por favor regístrate en Sabbatic.
password string Contraseña utilizada en el registro de Sabbatic.

Si el usuario no utiliza este identificador, el servicio devolverá el error "Unauthorized" y se deberá volver a identificar para seguir haciendo uso de los servicios.

session_id: Respuesta del servicio POST https://api.sabbatic.es/v2/login

Expenses

La entidad Expenses (Gastos) es en realidad una agrupación de otras entidades, como son: Receipts (Tickets), Invoices (Facturas) y Misc (Gastos variados).

Esta entidad cuenta únicamente con un servicio que permite listar de forma agrupada los diferentes gastos de un usuario. Para crear, editar o borrar cualquier tipo de gastos, hay que recurrir a la ruta de la entidad correspondiente (Receipts/Invoices/Misc).

List all expenses

Este servicio permite consultar un listado de gastos digitalizados en Sabbatic. La utilización de diferentes parámetros permite filtrar los resultados y obtener solo los gastos requeridos.

Ejemplo de llamada al servicio List all expenses:

    # Llamada desde consola Linux
    curl --request GET "https://api.sabbatic.es/v2/expenses?json=%7B%22expense_date_from%22:%2201/01/2017%22%2C%22expense_date_to%22:%2231/01/2017%22%7D"
        -H "session_id:YOURSESSIONID"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/expenses");
    var request = new RestRequest(Method.GET);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("content-type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        page = 5
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/expenses?json=%7B%7D")
        .get()
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/expenses');
        $request->setMethod(HTTP_METH_GET);

        $request->setQueryData(array(
            'json' => '%7B%7D'
        ));

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'session_id' => 'YOURSESSIONID'
        ));

        try {
            $response = $request->send();

            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

Ejemplo de JSON de respuesta:

    {
        "entities_list": [
            {
                "expense_id": 242365,
                "user": {
                    "user_id": 2863,
                    "user_id_custom": "Campo de usuario personalizado",
                    "username": "email1@gmail.com",
                    "email": "email1@gmail.com",
                    "name": "José",
                    "surname": "Velasco Perez",
                    "language": "es",
                    "company": {
                        "company_id": 289363,
                        "company_id_custom": "Campo de empresa personalizada 1",
                        "vat_id": "34571346T",
                        "name": "Company Name 1",
                        "postal_code": 20001,
                        "city": "DONOSTIA-SAN SEBASTIAN",
                        "address": "Avenida Nº 21",
                        "province": "GIPUZKOA/GUIPUZCOA",
                        "country": "ESP",
                        "acronym": "TST"
                    },
                    "bank_account": "ES0000000000000000000000"
                },
                "company": {
                    "company_id": 289363,
                    "company_id_custom": "Campo de empresa personalizada 1",
                    "vat_id": "34571346T",
                    "name": "Company Name 1",
                    "postal_code": 20001,
                    "city": "DONOSTIA-SAN SEBASTIAN",
                    "address": "Avenida Nº 21",
                    "province": "GIPUZKOA/GUIPUZCOA",
                    "country": "ESP"
                },
                "title": "2015/12/12 - Company Name 1 - 15.00",
                "expense_type": {
                    "expense_type_id": 1,
                    "name": "Ticket"
                },
                "origin": {
                    "id": 0,
                    "name": "Manual"
                },
                "supplier": {
                    "vat_id": "B52369823",
                    "name": "Empresa proveedora 3",
                    "postal_code": 46009,
                    "city": "Valencia",
                    "address": "Calle Mayor Nº 19",
                    "province": "Valencia",
                    "country": "ESP"
                },
                "creation_date": "13/12/2017",
                "expense_date": "12/12/2017",
                "total": 15,
                "total_euros": 15,
                "reconciled": true,
                "currency": "EUR",
                "currency_base": "EUR",
                "country": "ESP",
                "status": {
                    "name": "digitalizado",
                    "updated_datetime": "18/09/2018 10:33:15"
                },
                "labels": [
                    {
                        "label_id": 293621,
                        "name": "Cenas"
                    }
                ],
                "image": {
                    "image_full_url": "https://image-url-public-link",
                    "image_full_url_list": ["https://image-url-public-link"],
                    "image_large_url": "https://smallerimage-url-public-link",
                    "image_large_url_list": ["https://smallerimage-url-public-link"],
                    "pdf_url": "https://pdf-url-public-link",
                    "pdf_url_list": ["https://pdf-url-public-link"],
                    "original_document_url_list": ["https://original-document-url-public-link"]
                },
                "alerts": [
                    {
                        "alert_id": 123456,
                        "name": "Alerta limite",
                        "message": "El importe del gasto de 43,72€, ha sido superior a 15,00€.",
                        "creation_datetime": "26/07/2021 11:58:14"
                    }
                ],
                "notes": "Observaciones del gasto"
            },
            {
                "expense_id": 136963,
                "user": {
                    "user_id": 2864,
                    "user_id_custom": "Campo de usuario personalizado 2",
                    "username": "email2@outlook.es",
                    "email": "email2@outlook.es",
                    "name": "Manuel",
                    "surname": "Sanchez García",
                    "language": "es",
                    "company": {
                        "company_id": 326986,
                        "company_id_custom": "Campo de empresa personalizada 2",
                        "vat_id": "B56326855",
                        "name": "Company Name 2",
                        "postal_code": 28001,
                        "city": "MADRID",
                        "address": "Gran Via Nº 112",
                        "province": "MADRID",
                        "country": "ESP"
                    }
                },
                "company": {
                    "company_id": 326986,
                    "company_id_custom": "Campo de empresa personalizada 2",
                    "vat_id": "B56326855",
                    "name": "Company Name 2",
                    "postal_code": 28001,
                    "city": "MADRID",
                    "address": "Gran Via Nº 112",
                    "province": "MADRID",
                    "country": "ESP"
                },
                "title": "0 - Company Name 2 - 10.74",
                "expense_type": {
                    "expense_type_id": 2,
                    "name": "Factura"
                },
                "origin": {
                    "id": 1,
                    "name": "Sabbatic OCR"
                },
                "supplier": {
                    "vat_id": "A89636212",
                    "name": "Empresa proveedora 2",
                    "postal_code": 46009,
                    "city": "Valencia",
                    "address": "Calle Mayor Nº 11",
                    "province": "Valencia",
                    "country": "ESP"
                },
                "creation_date": "18/01/2017",
                "expense_date": "18/01/2017",
                "taxes": [
                    {
                        "net_price": 11.31,
                        "tax_percent": 10,
                        "tax_amount": 1.13,
                        "tax_subtotal": 12.44
                    },
                    {
                        "net_price": 0,
                        "tax_percent": 0,
                        "tax_amount": 0,
                        "tax_subtotal": 0,
                        "free_of_tax": true
                    }
                ],
                "tax_retention_base": 11.31,
                "tax_retention_percentage": 15,
                "tax_retention_import": -1.7,
                "total": 10.74,
                "total_euros": 10.74,
                "invoice_number": "FXE45639-A4",
                "bank_accounts": [
                    {
                        "bank_account": "ES4236598653245698723657"
                    },
                    {
                        "bank_account": "ES2365587423659863523698"
                    }
                ],
                "free_of_taxes": false,
                "currency": "EUR",
                "currency_base": "EUR",
                "reconciled": false,
                "invoice_number": "zxcvzfe5w3542345",
                "country": "ESP",
                "status": {
                    "name": "aprobado"
                },
                "labels": [
                    {
                        "label_id": 276103,
                        "label_id_custom":"Etiqueta Personalizada 1",
                        "name": "Gasolina"
                    },
                    {
                        "label_id": 293621,
                        "name": "Cenas"
                    }
                ],
                "image": {
                    "image_full_url": "https://image-url-public-link",
                    "image_full_url_list": ["https://image-url-public-link"],
                    "image_large_url": "https://smallerimage-url-public-link",
                    "image_large_url_list": ["https://smallerimage-url-public-link"],
                    "pdf_url": "https://pdf-url-public-link",
                    "pdf_url_list": ["https://pdf-url-public-link"],
                    "original_document_url_list": ["https://original-document-url-public-link"]
                },
                "notes": "Observaciones de la factura"
            }
        ],
        "total_entities": 2,
        "entities_per_page": 20,
        "page": 0,
        "total_pages": 0
    }

HTTP Request

GET https://api.sabbatic.es/v2/expenses?json={}

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
user_id int Identificador numérico del usuario sobre el que se desea filtrar los gastos.
username string E-mail del usuario. solo los administradores pueden ver gastos correspondientes a otros usuarios. Ej. youruser@email.xxx
company_id int Identificador de empresa. Ej. 82828
company_id_custom string Identificador propio y personalizable que identifica a una empresa en el sistema propio del cliente. El par company_id,company_id_custom determina a una única empresa en Sabbatic.
user_id_custom string Identificador propio y personalizable que identifica a un usuario por empresa en el sistema del propio cliente. El par company_id,user_id_custom determina a un único usuario en Sabbatic.
expense_id array<int> Identificador del gasto. Puede ser múltiple. Ej. [28282, 15475]
expense_type_id int Identificador del tipo de gasto, puede usarse el servicio GET ExpenseTypes para obtener los tipos de gasto accesibles para un usuario.
creation_date_from string Límite menor de la fecha de envío del gasto. Ej. 01/01/2017
creation_date_to string Límite mayor de la fecha de envío del gasto.. Ej. 31/01/2017
expense_date_from string Límite menor de la fecha del gasto. Ej. 15/01/2017
expense_date_to string Límite mayor de la fecha del gasto. Ej. 15/02/2017
updated_date_from string Limite menor de la fecha de modificación sobre la que se quiere consultar. Ej. 20/02/2017
updated_date_to string Limite mayor de la fecha de modificación sobre la que se quiere consultar. Ej. 20/02/2017
total float Total del gasto. Ej. 25.70
currency string Acrónimo de la divisa establecido en la norma ISO 4217. Ej. EUR,GBP
country string Acrónimo del país de la divisa establecido en la norma ISO 3166. Ej. ESP,GBR
status_name string Parámetro para filtrar por Estado del gasto. Ej. Digitalizado, Pendiente, Rechazado, Aprobado, Confirmado
status_update_name string Parámetro para filtrar por los gastos que han esta en algun 'Estado'. Ej. Digitalizado, Pendiente, Rechazado, Aprobado, Confirmado
status_update_date_from string Limite menor de la fecha de cambio de estado. Sirve para buscar gastos que han cambiado de estado en una fecha. Ej. 20/02/2017
status_update_date_to string Limite mayor de la fecha de cambio de estado. Sirve para buscar gastos que han cambiado de estado en una fecha. Ej. 20/02/2017
label_id array<int> Identificadores de una o más etiquetas. Ej. [ 1234, 5789, 612457 ]
reconciled boolean Indica si los gastos filtrados son conciliados true, o no conciliados false. En caso de no incluir este parámetro mostrará ambos, conciliados y no conciliados.
supplier_vat_id string Parámetro para filtrar por NIF del proveedor. Ej. A12345678
supplier_name string Parámetro para filtrar por Razón Social del proveedor. Ej. Compañía de Ejemplo, S.L.
net_price float Base imponible. Ej. 15.50
tax_percent float Porcentaje del impuesto. Ej. 21
tax_amount float Importe del impuesto. Ej. 2.50
units float Número de unidades del gasto concreto. Ej. 125.50
unit_cost float Coste unitario del gasto concreto, multiplicando por units se obtiene el total del gasto. Ej. 0.19
entities_per_page int Número de gastos a mostrar en cada página. En caso de omitir dicho parámetro, se mostrarán 20 gastos por página. Actualmente, el límite de gastos mostrados por página en Sabbatic es 100.
page int Los resultados del servicio vienen paginados cuando se obtienen más de los especificados en entities_per_page. En caso de omitir dicho parámetro, se mostrará la página 0.

Receipts

La entidad Receipts (Tickets) es la entidad que engloba los tickets de gasto (tanto los introducidos manualmente, como los digitalizados automáticamente). Este tipo de gasto siempre se corresponde con expense_type_id = 1 en el sistema de Sabbatic. Esta entidad permite las operaciones GET, POST, PUT, DELETE sobre dichas entidades.

List all receipts

Este servicio permite consultar un listado de tickets digitalizados en Sabbatic. La utilización de diferentes parámetros permite filtrar los resultados y obtener solo los tickets requeridos.

Ejemplo de llamada al servicio List all receipts:

    # Llamada desde consola Linux
    curl --request GET "https://api.sabbatic.es/v2/expenses/receipts?json=%7B%22expense_date_from%22:%2201/01/2017%22,%22expense_date_to%22:%2210/01/2017%22%7D"
        -H "session_id:YOURSESSIONID"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/expenses/receipts");
    var request = new RestRequest(Method.GET);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {};
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/expenses/receipts?json=%7B%7D")
        .get()
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/expenses/receipts');
        $request->setMethod(HTTP_METH_GET);

        $request->setQueryData(array(
            'json' => '%7B%7D'
        ));

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'session_id' => 'YOURSESSIONID'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

Ejemplo de JSON de respuesta:

    {
        "entities_list": [
            {
                "expense_id": 242365,
                "user": {
                    "user_id": 2863,
                    "user_id_custom": "Campo de usuario personalizado",
                    "username": "email1@gmail.com",
                    "email": "email1@gmail.com",
                    "name": "José",
                    "surname": "Velasco Perez",
                    "language": "es",
                    "company": {
                        "company_id": 289363,
                        "company_id_custom": "Campo de empresa personalizada 1",
                        "vat_id": "34571346T",
                        "name": "Company Name 1",
                        "postal_code": 20001,
                        "city": "DONOSTIA-SAN SEBASTIAN",
                        "address": "Avenida Nº 21",
                        "province": "GIPUZKOA/GUIPUZCOA",
                        "country": "ESP"
                    }
                },
                "company": {
                    "company_id": 289363,
                    "company_id_custom": "Campo de empresa personalizada 1",
                    "vat_id": "34571346T",
                    "name": "Company Name 1",
                    "postal_code": 20001,
                    "city": "DONOSTIA-SAN SEBASTIAN",
                    "address": "Avenida Nº 21",
                    "province": "GIPUZKOA/GUIPUZCOA",
                    "country": "ESP"
                },
                "title": "2015/12/12 - Company Name 1 - 15.00",
                "expense_type": {
                    "expense_type_id": 1,
                    "name": "Ticket"
                },
                "supplier": {
                    "vat_id": "A23698412",
                    "name": "Empresa proveedora 3",
                    "postal_code": 46009,
                    "city": "Zaragoza",
                    "address": "Calle Vistalegre Nº 44",
                    "province": "ZARAGOZA",
                    "country": "ESP"
                },
                "creation_date": "13/12/2017",
                "expense_date": "12/12/2017",
                "total": 15,
                "total_euros": 15,
                "currency": "EUR",
                "country": "ESP",
                "status": {
                    "name": "digitalizado",
                    "updated_datetime": "18/09/2018 10:33:15"
                },
                "labels": [
                    {
                        "id": 293621,
                        "name": "Cenas"
                    }
                ],
                "image": {
                    "image_full_url": "https://image-url-public-link",
                    "image_full_url_list": ["https://image-url-public-link"],
                    "image_large_url": "https://smallerimage-url-public-link",
                    "image_large_url_list": ["https://smallerimage-url-public-link"],
                    "pdf_url": "https://pdf-url-public-link",
                    "pdf_url_list": ["https://pdf-url-public-link"],
                    "original_document_url_list": ["https://original-document-url-public-link"]
                },
                "notes": "Observaciones del gasto"
            },
            {
                "expense_id": 296368,
                "user": {
                    "user_id": 2864,
                    "user_id_custom": "Campo de usuario personalizado 2",
                    "username": "email2@outlook.es",
                    "email": "email2@outlook.es",
                    "name": "Manuel",
                    "surname": "Sanchez García",
                    "language": "es",
                    "company": {
                        "company_id": 326986,
                        "company_id_custom": "Campo de empresa personalizada 2",
                        "vat_id": "B56326855",
                        "name": "Company Name 2",
                        "postal_code": 28001,
                        "city": "MADRID",
                        "address": "Gran Via Nº 112",
                        "province": "MADRID",
                        "country": "ESP"
                    }
                },
                "company": {
                    "company_id": 326986,
                    "company_id_custom": "Campo de empresa personalizada 2",
                    "vat_id": "34571346T",
                    "name": "Company Name 2",
                    "postal_code": 28001,
                    "city": "MADRID",
                    "address": "Gran Via Nº 112",
                    "province": "MADRID",
                    "country": "ESP"
                },
                "title": "0 - Company Name 4 - 3.25",
                "expense_type": {
                    "expense_type_id": 1,
                    "name": "Ticket"
                },
                "supplier": {
                    "vat_id": "A4536325",
                    "name": "Empresa proveedora 4",
                    "postal_code": 46009,
                    "city": "Malaga",
                    "address": "Calle Sotomonte Nº 3",
                    "province": "MALAGA",
                    "country": "ESP"
                },
                "creation_date": "29/05/2017",
                "expense_date": "11/05/2017",
                "taxes": [
                    {
                        "net_price": 3.12,
                        "tax_percent": 4,
                        "tax_amount": 0.12,
                        "tax_subtotal": 3.24
                    }
                ],
                "total": 3.25,
                "total_euros": 3.25,
                "invoice_equivalency_charge": {
                    "net_price": 3.12,
                    "tax_percent": 7,
                    "tax_amount": 0.21
                },
                "currency": "EUR",
                "country": "ESP",
                "status": {
                    "name": "rechazado",
                    "reject_reason_id": 5,
                    "reject_reason": "No se trata de un justificante de gasto procedente de un proveedor, sino de otro tipo de documento.",
                    "updated_datetime": "20/09/2018 14:58:05"
                },
                "labels": [
                    {
                        "label_id": 276103,
                        "label_id_custom": "Etiqueta Personalizada 1",
                        "name": "Gasolina"
                    },
                    {
                        "label_id": 293621,
                        "name": "Cenas"
                    }
                ],
                "image": {
                    "image_full_url": "https://image-url-public-link",
                    "image_full_url_list": ["https://image-url-public-link"],
                    "image_large_url": "https://smallerimage-url-public-link",
                    "image_large_url_list": ["https://smallerimage-url-public-link"],
                    "pdf_url": "https://pdf-url-public-link",
                    "pdf_url_list": ["https://pdf-url-public-link"],
                    "original_document_url_list": ["https://original-document-url-public-link"]
                },
                "notes": "Observaciones de la factura"
            }
        ],
        "total_entities": 2,
        "entities_per_page": 20,
        "page": 0,
        "total_pages": 0
    }

HTTP Request

GET https://api.sabbatic.es/v2/expenses/receipts?json={}

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
user_id int Identificador numérico del usuario sobre el que se desea filtrar los gastos.
username string E-mail del usuario. solo los administradores pueden ver gastos correspondientes a otros usuarios. Ej. youruser@email.xxx
company_id int Identificador de empresa. Ej. 82828
company_id_custom string Identificador propio y personalizable que identifica a una empresa en el sistema propio del cliente. El par company_id,company_id_custom determina a una única empresa en Sabbatic.
user_id_custom string Identificador propio y personalizable que identifica a un usuario por empresa en el sistema del propio cliente. El par company_id,user_id_custom determina a un único usuario en Sabbatic.
expense_id array<int> Identificador del gasto. Puede ser múltiple. Ej. [28282, 15475]
expense_type_id int Identificador del tipo de gasto, puede usarse el servicio GET ExpenseTypes para obtener los tipos de gasto accesibles para un usuario.
creation_date_from string Límite menor de la fecha de envío del gasto. Ej. 01/01/2017
creation_date_to string Límite mayor de la fecha de envío del gasto.. Ej. 31/01/2017
expense_date_from string Límite menor de la fecha del gasto. Ej. 15/01/2017
expense_date_to string Límite mayor de la fecha del gasto. Ej. 15/02/2017
updated_date_from string Limite menor de la fecha de modificación sobre la que se quiere consultar. Ej. 20/02/2017
updated_date_to string Limite mayor de la fecha de modificación sobre la que se quiere consultar. Ej. 20/02/2017
total float Total del gasto. Ej. 25.70
currency string Acrónimo de la divisa establecido en la norma ISO 4217. Ej. EUR,GBP
country string Acrónimo del país de la divisa establecido en la norma ISO 3166. Ej. ESP,GBR
status_name string Parámetro para filtrar por Estado del gasto. Ej. Digitalizado, Pendiente, Rechazado, Aprobado, Confirmado
label_id array<int> Identificadores de una o más etiquetas. Ej. [ 1234, 5789, 612457 ]
reconciled boolean Indica si los gastos filtrados son conciliados true, o no conciliados false. En caso de no incluir este parámetro mostrará ambos, conciliados y no conciliados.
supplier_vat_id string Parámetro para filtrar por NIF del proveedor. Ej. A12345678
supplier_name string Parámetro para filtrar por Razón Social del proveedor. Ej. Compañía de Ejemplo, S.L.
net_price float Base imponible. Ej. 15.50
tax_percent float Porcentaje del impuesto. Ej. 21
tax_amount float Importe del impuesto. Ej. 2.50
entities_per_page int Número de gastos a mostrar en cada página. En caso de omitir dicho parámetro, se mostrarán 20 gastos por página. Actualmente, el límite de gastos mostrados por página en Sabbatic es 100.
page int Los resultados del servicio vienen paginados cuando se obtienen más de los especificados en entities_per_page. En caso de omitir dicho parámetro, se mostrará la página 0.

Create a receipt

Este servicio permite digitalizar un ticket en Sabbatic La utilización de diferentes parámetros permite la creación de tickets manuales con los datos proporcionados por el mismo usuario.

Ejemplo de llamada al servicio Create a receipt:

    # Llamada desde consola Linux
    curl --request POST "https://api.sabbatic.es/v2/expenses/receipts"
        -H "Content-Type:application/x-www-form-urlencoded"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22image_base64%22:%22SAVWW42FEW11245CQWCV....%22,%22notes%22:%22Viajes al extranjero%22%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/expenses/receipts");
    var request = new RestRequest(Method.POST);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        image_base64 = "AVWW42FEW11245CQWCV..."
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22image_base64%22%3A%22SAVWW42FEW11245CQWCV....%22%2C%22notes%22%3A%22Viajes%20al%20extranjero%22%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/expenses/receipts")
        .post(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/expenses/receipts');
        $request->setMethod(HTTP_METH_POST);

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'session_id' => 'YOURSESSIONID'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"image_base64":"SAVWW42FEW11245CQWCV....","notes":"Viajes al extranjero"}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

Ejemplo de JSON de respuesta:

    {
        "expense_id": 296368,
        "user": {
            "user_id": 2864,
            "user_id_custom": "Campo de usuario personalizado 2",
            "username": "email2@outlook.es",
            "email": "email2@outlook.es",
            "name": "Manuel",
            "surname": "Sanchez García",
            "language": "es",
            "company": {
                "company_id": 326986,
                "company_id_custom": "Campo de empresa personalizada 2",
                "vat_id": "B56326855",
                "name": "Company Name 2",
                "postal_code": 28001,
                "city": "MADRID",
                "address": "Gran Via Nº 112",
                "province": "MADRID",
                "country": "ESP"
            }
        },
        "company": {
            "company_id": 326986,
            "company_id_custom": "Campo de empresa personalizada 2",
            "vat_id": "34571346T",
            "name": "Company Name 2",
            "postal_code": 28001,
            "city": "MADRID",
            "address": "Gran Via Nº 112",
            "province": "MADRID",
            "country": "ESP"
        },
        "title": "0 - Company Name 4 - 3.25",
        "expense_type": {
            "expense_type_id": 1,
            "name": "Ticket"
        },
        "supplier": {
            "vat_id": "A4536325",
            "name": "Empresa proveedora 4",
            "postal_code": 46009,
            "city": "Malaga",
            "address": "Calle Sotomonte Nº 3",
            "province": "MALAGA",
            "country": "ESP"
        },
        "creation_date": "29/05/2017",
        "expense_date": "11/05/2017",
        "taxes": [
            {
                "net_price": 3.12,
                "tax_percent": 4,
                "tax_amount": 0.12,
                "tax_subtotal": 3.24
            }
        ],
        "total": 3.25,
        "total_euros": 3.25,
        "currency": "EUR",
        "country": "ESP",
        "status": {
            "name": "digitalizado"
        },
        "labels": [
            {
                "label_id": 276103,
                "label_id_custom": "Etiqueta Personalizada 1",
                "name": "Gasolina"
            },
            {
                "label_id": 293621,
                "name": "Cenas"
            }
        ],
        "image": {
            "image_full_url": "https://image-url-public-link",
            "image_full_url_list": ["https://image-url-public-link"],
            "image_large_url": "https://smallerimage-url-public-link",
            "image_large_url_list": ["https://smallerimage-url-public-link"],
            "pdf_url": "https://pdf-url-public-link",
            "pdf_url_list": ["https://pdf-url-public-link"]
        },
        "alerts": [
            {
                "alert_id": 123456,
                "name": "Alerta limite",
                "message": "El importe del gasto de 43,72€, ha sido superior a 15,00€.",
                "creation_datetime": "26/07/2021 11:58:14"
            }
        ],
        "notes": "Viajes al extranjero"
    }

HTTP Request

POST https://api.sabbatic.es/v2/expenses/receipts?json={}

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de datos

* Obligatorios

Parámetro Tipo Descripción
user_id int Identificador numérico del usuario sobre el que se desea crear el gasto.
username string E-mail del usuario. Solo los administradores pueden crear gastos en nombre de otros usuarios. Ej. youruser@email.xxx
company_id int Identificador de empresa. Ej. 82828. Si el usuario integrador dispone de identificadores propios, debe usar este parámetro para identificar un usuario o empresa en el sistema Sabbatic.
company_id_custom string Identificador personal que identifica a una empresa en el sistema propio del cliente. El par company_id
user_id_custom string Identificador personal que identifica a un usuario en el sistema del propio cliente. El par company_id
expense_company_id int Identificador de Sabbatic de la empresa a la que se asignará el nuevo gasto creado. Si el integrador tiene una configuración multi-empresa, puede asignar un gasto a una de dichas empresas.
expense_company_id_custom int Identificador propio de la empresa a la que se asignará el nuevo gasto creado. El par company_id
image_base64* string Imagen serializada de un ticket en Base64.
supplier_vat_id string Parámetro opcional (en tickets manuales) para asignar el NIF del proveedor al gasto. Ej. A12345678
supplier_name string Parámetro opcional (en tickets manuales) para asignar la Razón Social del proveedor al gasto. Ej. Compañía de Ejemplo, S.L
expense_date string Parámetro opcional (en tickets manuales) para asignar una fecha al gasto. Ej. 05/01/2017
net_price float Parámetro opcional (en tickets manuales) para asignar una base imponible al gasto. Ej. 15.50
tax_percent float Parámetro opcional (en tickets manuales) para asignar un porcentaje de impuesto al gasto. Ej. 21
total float Parámetro opcional (en tickets manuales) para asignar un total al gasto. Ej. 25.50
country string Parámetro opcional para asignar la divisa y país al gasto, segun la norma ISO 3166-1. Ej. ESP. En caso de no especificarlo, el parámetro por defecto es ESP
label_id array<int> Parámetro opcional para asignar etiquetas al gasto. Ej. [ 1234, 5789, 612457 ]
notes string Campo de texto libre hasta 255 carácteres, para incluir cualquier observación al ticket.
no_response boolean Parámetro para indicar si se desea recibir una notificacion con el resultado del proceso cuando haya terminado. Para recuperar los datos hay que hacer GET expenses/receipts

Edit a receipt

Este servicio permite editar un ticket digitalizado en Sabbatic. Cabe destacar que dependiendo del usuario, del flujo de aprobación y del tipo de ticket (manual o automático) algunos campos no son editables. De tener los permisos adecuados, se modificarán los valores de aquellos parámetros que se envíen en la llamada permaneciendo inalterados los que no.

Ejemplo de llamada al servicio "Edit a receipt":

    # Llamada desde consola Linux
    curl --request PUT "https://api.sabbatic.es/v2/expenses/receipts"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22expense_id%22:[287345,289203],%22total%22:23.45%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/expenses/receipts");
    var request = new RestRequest(Method.PUT);
     request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        expense_id = 1234,
        total = 120.4
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22expense_id%22%3A%20%5B675039%5D%2C%22total%22%3A%20%2223.45%22%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/expenses/receipts")
        .put(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
    $request = new HttpRequest();
    $request->setUrl('https://api.sabbatic.es/v2/expenses/receipts');
    $request->setMethod(HTTP_METH_PUT);

    $request->setHeaders(array(
        'cache-control' => 'no-cache',
        'Content-Type' => 'application/x-www-form-urlencoded',
        'session_id' => 'YOURSESSIONID'
    ));

    $request->setContentType('application/x-www-form-urlencoded');
    $request->setPostFields(array(
        'json' => '{"expense_id":[675039],"total":"23.45"}'
    ));

    try {
        $response = $request->send();
        echo $response->getBody();
    } catch (HttpException $ex) {
        echo $ex;
    }

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "Entities id parameter not valid or some elements do not exist"
    }

HTTP Request

PUT https://api.sabbatic.es/v2/expenses/receipts?json={}

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

* Obligatorios

Parámetros de filtrado

Parámetro Tipo Descripción
expense_id* array<int> Identificadores de los tickets. Puede ser múltiple Ej. [ 28282, 15475 ]

Parámetros de datos

Parámetro Tipo Descripción
supplier_vat_id string NIF del proveedor. Ej. A12345678
supplier_name string Razón Social del proveedor. Ej. Compañía de Ejemplo, S.L.
expense_date string Fecha de gasto en formato dd/mm/yyyy. Ej. 05/01/2017
total float Importe total del gasto.
country string Acrónimo del país establecido en la norma ISO 3166. Ej. ESP
status_name string Estado del gasto. Ej. Rechazado, Aprobado, Confirmado. También puede reportarse un gasto asignando el valor Reportado.
status_reason string Motivo del cambio de estado. Solo se devuelve cuando el estado es rechazado.
label_id array<int> Identificadores de una o más etiquetas. Se sobreescribirá la totalidad de las mismas. Ej. [ 1234, 5789, 612457 ]
notes string Campo de texto libre hasta 255 carácteres, para incluir cualquier observación al ticket que se desee.

Delete a receipt

Este servicio permite eliminar un ticket en Sabbatic.

Ejemplo de llamada al servicio Delete a receipt:

    # Llamada desde consola Linux
    curl --request DELETE "https://api.sabbatic.es/v2/expenses/receipts"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22expense_id%22:[287345]%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/expenses/receipts");
    var request = new RestRequest(Method.DELETE);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        expense_id = new Int[]{
            1234
        }
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22expense_id%22%3A%5B287345%5D%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/expenses/receipts")
        .delete(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php

    $request = new HttpRequest();
    $request->setUrl('https://api.sabbatic.es/v2/expenses/receipts');
    $request->setMethod(HTTP_METH_DELETE);

    $request->setHeaders(array(
        'cache-control' => 'no-cache',
        'Content-Type' => 'application/x-www-form-urlencoded',
        'session_id' => 'YOURSESSIONID'
    ));

    $request->setContentType('application/x-www-form-urlencoded');
    $request->setPostFields(array(
        'json' => '{"expense_id":[287345]}'
    ));

    try {
        $response = $request->send();
        echo $response->getBody();
    } catch (HttpException $ex) {
        echo $ex;
    }

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "Entities id parameter not valid or some elements do not exist"
    }

HTTP Request

DELETE https://api.sabbatic.es/v2/expenses/receipts?json={}

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
expense_id array<int> Identificadores de los tickets que se desea eliminar. Puede ser múltiple. Ej. [ 28282, 15475 ]

Invoices

La entidad Invoices (Facturas) es la entidad que engloba las facturas de los usuarios con campos adicionales a los que suele llevar un ticket. Este tipo de gasto siempre se corresponde con expense_type_id = 2 en el sistema de Sabbatic. Esta entidad permite la operacion GET, POST, PUT, DELETE sobre dichas entidades.

List all invoices

Este servicio permite consultar un listado de facturas digitalizadas en Sabbatic. La utilización de diferentes parámetros permite filtrar los resultados y obtener solo las facturas requeridas.

Ejemplo de llamada al servicio List all invoices:

    # Llamada desde consola Linux
    curl --request GET "https://api.sabbatic.es/v2/expenses/invoices?json=%7B%22expense_date_from%22:%2201/01/2017%22,%22expense_date_to%22:%2210/01/2017%22%7D"
        -H "session_id:YOURSESSIONID"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/expenses/invoices");
    var request = new RestRequest(Method.GET);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {};
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/expenses/invoices?json=%7B%7D")
        .get()
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php

        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/expenses/invoices');
        $request->setMethod(HTTP_METH_GET);

        $request->setQueryData(array(
            'json' => '%7B%7D'
        ));

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'session_id' => 'YOURSESSIONID'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

Ejemplo de JSON de respuesta:

    {
        "entities_list": [
        {
            "expense_id": 136963,
            "user": {
                "user_id": 2864,
                "user_id_custom": "Campo de usuario personalizado 2",
                "username": "email2@outlook.es",
                "email": "email2@outlook.es",
                "name": "Manuel",
                "surname": "Sanchez García",
                "language": "es",
                "company": {
                    "company_id": 326986,
                    "company_id_custom": "Campo de empresa personalizada 2",
                    "vat_id": "B56326855",
                    "name": "Company Name 2",
                    "postal_code": 28001,
                    "city": "MADRID",
                    "address": "Gran Via Nº 112",
                    "province": "MADRID",
                    "country": "ESP"
                }
            },
            "company": {
                "company_id": 326986,
                "company_id_custom": "Campo de empresa personalizada 2",
                "vat_id": "34571346T",
                "name": "Company Name 2",
                "postal_code": 28001,
                "city": "MADRID",
                "address": "Gran Via Nº 112",
                "province": "MADRID",
                "country": "ESP"
            },
            "title": "0 - Company Name 2 - 10.74",
            "expense_type": {
                "expense_type_id": 2,
                "name": "Factura"
            },
            "supplier": {
                "vat_id": "A89636212",
                "name": "Empresa proveedora 2",
                "postal_code": 46009,
                "city": "Valencia",
                "address": "Calle Mayor Nº 11",
                "province": "Valencia",
                "country": "ESP"
            },
            "creation_date": "18/01/2017",
            "expense_date": "18/01/2017",
            "taxes": [
                {
                    "net_price": 11.31,
                    "tax_percent": 10,
                    "tax_amount": 1.13
                }
            ],
            "tax_retention_percentage": 15,
            "tax_retention_import": 1.7,
            "total": 10.74,
            "total_euros": 10.74,
            "invoice_equivalency_charge": {
                "tax_percent": 7,
                "tax_amount": 25.58
            },
            "invoice_number": "FXE45639-A4",
            "bank_accounts": [
                {
                    "bank_account": "ES4236598653245698723657"
                },
                {
                    "bank_account": "ES2365587423659863523698"
                }
            ],
            "free_of_taxes": false,
            "currency": "EUR",
            "country": "ESP",
            "status": {
                "name": "aprobado",
                "updated_datetime": "18/09/2018 15:23:11"
            },
            "labels": [
                {
                    "label_id": 276103,
                    "label_id_custom":"Etiqueta Personalizada 1",
                    "name": "Gasolina"
                },
                {
                    "label_id": 293621,
                    "name": "Cenas"
                }
            ],
            "image": {
                "image_full_url": "https://image-url-public-link",
                "image_full_url_list": ["https://image-url-public-link"],
                "image_large_url": "https://smallerimage-url-public-link",
                "image_large_url_list": ["https://smallerimage-url-public-link"],
                "pdf_url": "https://pdf-url-public-link",
                "pdf_url_list": ["https://pdf-url-public-link"],
                "original_document_url_list": ["https://original-document-url-public-link"]
            },
            "alerts": [
                {
                    "alert_id": 123456,
                    "name": "Alerta limite",
                    "message": "El importe del gasto de 43,72€, ha sido superior a 15,00€.",
                    "creation_datetime": "26/07/2021 11:58:14"
                }
            ],
            "notes": "Observaciones de la factura"
        },
        {
            "expense_id": 236589,
            "user": {
                "user_id": 3125,
                "user_id_custom": "Campo de usuario personalizado 3",
                "username": "email3@gmail.es",
                "email": "email3@gmail.es",
                "name": "Antonio",
                "surname": "Rodriguez Montero",
                "language": "es",
                "company": {
                    "company_id": 326986,
                    "company_id_custom": "Campo de empresa personalizada 2",
                    "vat_id": "B56326855",
                    "name": "Company Name 2",
                    "postal_code": 28001,
                    "city": "MADRID",
                    "address": "Gran Via Nº 112",
                    "province": "MADRID",
                    "country": "ESP"
                }
            },
            "company": {
                "company_id": 326986,
                "company_id_custom": "Campo de empresa personalizada 2",
                "vat_id": "34571346T",
                "name": "Company Name 2",
                "postal_code": 28001,
                "city": "MADRID",
                "address": "Gran Via Nº 112",
                "province": "MADRID",
                "country": "ESP"
            },
            "title": "0 - Company Name 5 - 10.74",
            "expense_type": {
                "expense_type_id": 2,
                "name": "Factura"
            },
            "supplier": {
                "vat_id": "A56333266",
                "name": "Empresa proveedora 5",
                "postal_code": 33002,
                "city": "Oviedo",
                "address": "Calle General Nº 61",
                "province": "ASTURIAS",
                "country": "ESP"
            },
            "creation_date": "18/01/2017",
            "expense_date": "18/01/2017",
            "taxes": [
                {
                    "net_price": 11.31,
                    "tax_percent": 10,
                    "tax_amount": 1.13
                }
            ],
            "tax_retention_percentage": 15,
            "tax_retention_import": 1.7,
            "total": 10.74,
            "total_euros": 10.74,
            "reconciled": true,
            "invoice_number": "GBEE//203943",
            "bank_accounts": [
                {
                    "bank_account": "ES4236598653245698723657"
                },
                {
                    "bank_account": "ES2365587423659863523698"
                }
            ],
            "free_of_taxes": false,
            "currency": "EUR",
            "country": "ESP",
            "status": {
                "name": "digitalizado"
            },
            "labels": [
                {
                    "label_id": 276103,
                    "label_id_custom":"Etiqueta Personalizada 1",
                    "name": "Gasolina"
                },
                {
                    "label_id": 293621,
                    "name": "Cenas"
                }
            ],
            "image": {
                "image_full_url": "https://image-url-public-link",
                "image_full_url_list": ["https://image-url-public-link"],
                "image_large_url": "https://smallerimage-url-public-link",
                "image_large_url_list": ["https://smallerimage-url-public-link"],
                "pdf_url": "https://pdf-url-public-link",
                "pdf_url_list": ["https://pdf-url-public-link"],
                "original_document_url_list": ["https://original-document-url-public-link"]
            },
            "notes": "Observaciones de la factura"
        }
        ],
        "total_entities": 2,
        "entities_per_page": 20,
        "page": 0,
        "total_pages": 0
    }

HTTP Request

GET https://api.sabbatic.es/v2/expenses/invoices?json={}

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
user_id int Identificador numérico del usuario sobre el que se desea filtrar los gastos.
username string E-mail del usuario. solo los administradores pueden ver gastos correspondientes a otros usuarios. Ej. youruser@email.xxx
company_id int Identificador de empresa. Ej. 82828
company_id_custom string Identificador propio y personalizable que identifica a una empresa en el sistema propio del cliente. El par company_id,company_id_custom determina a una única empresa en Sabbatic.
user_id_custom string Identificador propio y personalizable que identifica a un usuario por empresa en el sistema del propio cliente. El par company_id,user_id_custom determina a un único usuario en Sabbatic.
expense_id array<int> Identificador del gasto. Puede ser múltiple. Ej. [28282, 15475]
expense_type_id int Identificador del tipo de gasto, puede usarse el servicio GET ExpenseTypes para obtener los tipos de gasto accesibles para un usuario.
creation_date_from string Límite menor de la fecha de envío del gasto. Ej. 01/01/2017
creation_date_to string Límite mayor de la fecha de envío del gasto.. Ej. 31/01/2017
expense_date_from string Límite menor de la fecha del gasto. Ej. 15/01/2017
expense_date_to string Límite mayor de la fecha del gasto. Ej. 15/02/2017
updated_date_from string Limite menor de la fecha de modificación sobre la que se quiere consultar. Ej. 20/02/2017
updated_date_to string Limite mayor de la fecha de modificación sobre la que se quiere consultar. Ej. 20/02/2017
total float Total del gasto. Ej. 25.70
currency string Acrónimo de la divisa establecido en la norma ISO 4217. Ej. EUR,GBP
country string Acrónimo del país de la divisa establecido en la norma ISO 3166. Ej. ESP,GBR
status_name string Parámetro para filtrar por Estado del gasto. Ej. Digitalizado, Pendiente, Rechazado, Aprobado, Confirmado
label_id array<int> Identificadores de una o más etiquetas. Ej. [ 1234, 5789, 612457 ]
reconciled boolean Indica si los gastos filtrados son conciliados true, o no conciliados false. En caso de no incluir este parámetro mostrará ambos, conciliados y no conciliados.
supplier_vat_id string Parámetro para filtrar por NIF del proveedor. Ej. A12345678
supplier_name string Parámetro para filtrar por Razón Social del proveedor. Ej. Compañía de Ejemplo, S.L.
net_price float Base imponible. Ej. 15.50
tax_percent float Porcentaje del impuesto. Ej. 21
tax_amount float Importe del impuesto. Ej. 2.50
entities_per_page int Número de gastos a mostrar en cada página. En caso de omitir dicho parámetro, se mostrarán 20 gastos por página. Actualmente, el límite de gastos mostrados por página en Sabbatic es 100.
page int Los resultados del servicio vienen paginados cuando se obtienen más de los especificados en entities_per_page. En caso de omitir dicho parámetro, se mostrará la página 0.

Create an invoice

Este servicio permite crear un gasto del tipo 'Invoice' en Sabbatic.

Ejemplo de llamada al servicio "Create an invoice":

    # Llamada desde consola Linux
    curl --request POST "https://api.sabbatic.es/v2/expenses/invoices"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22image_base64%22:%22SAVWW42FEW11245CQWCV....%22,%22notes%22:%22Cliente con retención de IVA%22%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/expenses/invoices");
    var request = new RestRequest(Method.POST);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        image_base64 = "BASE64IMAGE..."
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22image_base64%22%3A%22SAVWW42FEW11245CQWCV....%22%2C%22notes%22%3A%22Cliente%20con%20retenci%C3%B3n%20de%20IVA%22%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/expenses/invoices")
        .post(body)
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/expenses/invoices');
        $request->setMethod(HTTP_METH_POST);

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'session_id' => 'YOURSESSIONID',
            'Content-Type' => 'application/x-www-form-urlencoded'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"image_base64":"SAVWW42FEW11245CQWCV....","notes":"Cliente con retención de IVA"}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

Ejemplo de JSON de respuesta:

    {
        "expense_id": 236589,
        "user": {
            "user_id": 3125,
            "user_id_custom": "Campo de usuario personalizado 3",
            "username": "email3@gmail.es",
            "email": "email3@gmail.es",
            "name": "Antonio",
            "surname": "Rodriguez Montero",
            "language": "es",
            "company": {
                "company_id": 326986,
                "company_id_custom": "Campo de empresa personalizada 2",
                "vat_id": "B56326855",
                "name": "Company Name 2",
                "postal_code": 28001,
                "city": "MADRID",
                "address": "Gran Via Nº 112",
                "province": "MADRID",
                "country": "ESP"
            }
        },
        "company": {
            "company_id": 326986,
            "company_id_custom": "Campo de empresa personalizada 2",
            "vat_id": "34571346T",
            "name": "Company Name 2",
            "postal_code": 28001,
            "city": "MADRID",
            "address": "Gran Via Nº 112",
            "province": "MADRID",
            "country": "ESP"
        },
        "title": "0 - Company Name 5 - 10.74",
        "expense_type": {
            "expense_type_id": 2,
            "name": "Factura"
        },
        "supplier": {
            "vat_id": "A56333266",
            "name": "Empresa proveedora 5",
            "postal_code": 33002,
            "city": "Oviedo",
            "address": "Calle General Nº 61",
            "province": "ASTURIAS",
            "country": "ESP"
        },
        "creation_date": "18/01/2017",
        "expense_date": "18/01/2017",
        "taxes": [
            {
                "net_price": 11.31,
                "tax_percent": 10,
                "tax_amount": 1.13,
                "tax_subtotal": 12.44
            }
        ],
        "tax_retention_base": 11.31,
        "tax_retention_percentage": 15,
        "tax_retention_import": 1.7,
        "total": 10.74,
        "total_euros": 10.74,
        "invoice_equivalency_charge": {
            "net_price": 11.31,
            "tax_percent": 15,
            "tax_amount": 1.7
        },
        "invoice_equivalency_charge_list": [
            {
                "net_price": 11.31,
                "tax_percent": 15,
                "tax_amount": 1.7
            }
        ],
        "invoice_number": "GBEE//203943",
        "bank_accounts": [
            {
                "bank_account": "ES4236598653245698723657"
            },
            {
                "bank_account": "ES2365587423659863523698"
            }
        ],
        "currency": "EUR",
        "currency_base": "EUR",
        "reconciled": false,
        "country": "ESP",
        "status": {
            "name": "digitalizado"
        },
        "labels": [
            {
                "label_id": 276103,
                "label_id_custom":"Etiqueta Personalizada 1",
                "name": "Gasolina"
            },
            {
                "label_id": 293621,
                "name": "Cenas"
            }
        ],
        "image": {
            "image_full_url": "https://image-url-public-link",
            "image_full_url_list": ["https://image-url-public-link"],
            "image_large_url": "https://smallerimage-url-public-link",
            "image_large_url_list": ["https://smallerimage-url-public-link"],
            "pdf_url": "https://pdf-url-public-link",
            "pdf_url_list": ["https://pdf-url-public-link"]
        },
        "alerts": [
            {
                "alert_id": 123456,
                "name": "Alerta limite",
                "message": "El importe del gasto de 43,72€, ha sido superior a 15,00€.",
                "creation_datetime": "26/07/2021 11:58:14"
            }
        ],
        "notes": "Cliente con retención de IVA"
    }

HTTP Request

POST https://api.sabbatic.es/v2/expenses/invoices

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de datos

* Obligatorios

Parámetro Tipo Descripción
user_id int Identificador numérico del usuario sobre el que se desea crear el gasto.
username string E-mail del usuario. Solo los administradores pueden crear gastos en nombre de otros usuarios. Ej. youruser@email.xxx
company_id int Identificador de empresa. Ej. 82828. Si el usuario integrador dispone de identificadores propios, debe usar este parámetro para identificar un usuario o empresa en el sistema Sabbatic.
company_id_custom string Identificador personal que identifica a una empresa en el sistema propio del cliente. El par company_id
user_id_custom string Identificador personal que identifica a un usuario en el sistema del propio cliente. El par company_id
expense_company_id int Identificador de Sabbatic de la empresa a la que se asignará el nuevo gasto creado. Si el integrador tiene una configuración multi-empresa, puede asignar un gasto a una de dichas empresas.
expense_company_id_custom int Identificador propio de la empresa a la que se asignará el nuevo gasto creado. El par company_id
image_base64* string Imagen serializada de un ticket en Base64.
supplier_vat_id string Parámetro opcional (en tickets manuales) para asignar el NIF del proveedor al gasto. Ej. A12345678
supplier_name string Parámetro opcional (en tickets manuales) para asignar la Razón Social del proveedor al gasto. Ej. Compañía de Ejemplo, S.L
expense_date string Parámetro opcional (en tickets manuales) para asignar una fecha al gasto. Ej. 05/01/2017
net_price float Parámetro opcional (en tickets manuales) para asignar una base imponible al gasto. Ej. 15.50
tax_percent float Parámetro opcional (en tickets manuales) para asignar un porcentaje de impuesto al gasto. Ej. 21
total float Parámetro opcional (en tickets manuales) para asignar un total al gasto. Ej. 25.50
country string Parámetro opcional para asignar la divisa y país al gasto, segun la norma ISO 3166-1. Ej. ESP. En caso de no especificarlo, el parámetro por defecto es ESP
label_id array<int> Parámetro opcional para asignar etiquetas al gasto. Ej. [ 1234, 5789, 612457 ]
notes string Campo de texto libre hasta 255 carácteres, para incluir cualquier observación al ticket.
no_response boolean Parámetro para indicar si se desea recibir una notificacion con el resultado del proceso cuando haya terminado. Para recuperar los datos hay que hacer GET expenses/receipts

Edit an invoice

Este servicio permite editar una factura digitalizada en Sabbatic. Cabe destacar que dependiendo del usuario, del flujo de aprobación y el campo a editar puede no tener efecto dicha acción. De tener los permisos adecuados, se modificarán los valores de aquellos parámetros que se envíen en la llamada permaneciendo inalterados los que no.

Ejemplo de llamada al servicio Edit an invoice:

    # Llamada desde consola Linux
    curl --request PUT "https://api.sabbatic.es/v2/expenses/invoices"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22expense_id%22:[287345,289203],%22total%22:23.45%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/expenses/invoices");
    var request = new RestRequest(Method.PUT);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        expense_id = 1234,
        total = 14.12
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22expense_id%22%3A%5B287345%2C289203%5D%2C%22total%22%3A23.45%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/expenses/invoices")
        .put(body)
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/expenses/invoices');
        $request->setMethod(HTTP_METH_PUT);

        $request->setHeaders(array(
            'Postman-Token' => 'acc1dddb-9fe3-495a-a081-3b88650095d9',
            'cache-control' => 'no-cache',
            'session_id' => 'YOURSESSIONID',
            'Content-Type' => 'application/x-www-form-urlencoded'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"expense_id":[287345,289203],"total":23.45}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "Entities id parameter not valid or some elements do not exist"
    }

HTTP Request

PUT https://api.sabbatic.es/v2/expenses/receipts

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

* Obligatorios

Parámetros de filtrado

Parámetro Tipo Descripción
expense_id* array<int> Identificadores de los tickets. Puede ser múltiple Ej. [ 28282, 15475 ]

Parámetros de datos

Parámetro Tipo Descripción
supplier_vat_id string NIF del proveedor. Ej. A12345678
supplier_name string Razón Social del proveedor. Ej. Compañía de Ejemplo, S.L.
expense_date string Fecha de gasto en formato dd/mm/yyyy. Ej. 05/01/2017
total float Importe total del gasto.
country string Acrónimo del país establecido en la norma ISO 3166. Ej. ESP
status_name string Estado del gasto. Ej. Rechazado, Aprobado, Confirmado. También puede reportarse un gasto asignando el valor Reportado.
status_reason string Motivo del cambio de estado. Solo se devuelve cuando el estado es rechazado.
label_id array<int> Identificadores de una o más etiquetas. Se sobreescribirá la totalidad de las mismas. Ej. [ 1234, 5789, 612457 ]
notes string Campo de texto libre hasta 255 carácteres, para incluir cualquier observación al ticket que se desee.

Delete an invoice

Este servicio permite eliminar una factura en Sabbatic.

Ejemplo de llamada al servicio "Delete an invoice":

    # Llamada desde consola Linux
    curl --request DELETE "https://api.sabbatic.es/v2/expenses/invoices"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22expense_id%22:[287345]%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/expenses/invoices");
    var request = new RestRequest(Method.DELETE);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        expense_id = new Int[]{
            1234,
            4321
        }
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22expense_id%22%3A%5B287345%5D%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/expenses/invoices")
        .delete(body)
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php

        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/expenses/invoices');
        $request->setMethod(HTTP_METH_DELETE);

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'session_id' => 'YOURSESSIONID',
            'Content-Type' => 'application/x-www-form-urlencoded'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"expense_id":[287345]}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "Entities id parameter not valid or some elements do not exist"
    }

HTTP Request

DELETE https://api.sabbatic.es/v2/expenses/invoices

HEADER Parámetros

Parámetro Descripción
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
expense_id array<int> Identificadores de las facturas que se desea eliminar. Puede ser múltiple. Ej. [ 28282, 15475 ]

Miscelánea

La entidad Miscelánea (Misc) es la entidad que engloba cualquier otro tipo de gasto como kilometrajes, dietas, pernoctaciones, etc... Esta entidad permite las operaciones GET, POST, PUT, DELETE sobre los gastos miscelánea enviados por el usuario. Dichos tipos de gastos estarán identificados por un expense_type_id que se puede consultar en el servicio GET ExpenseTypes. Para cualquier uso de estos servicios es imprescindible usar el parámetro input expense_type_id adecuado.

List all misc

Este servicio permite listar los gastos de un tipo de gasto Misc en Sabbatic.

Ejemplo de llamada al servicio List all misc (en este caso Kilometraje):

    # Llamada desde consola Linux
    curl --request GET "https://api.sabbatic.es/v2/expenses/misc?json=%7B%22expense_type_id%22:3%7D"
    -H "session_id:YOURSESSIONID"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/expenses/misc");
    var request = new RestRequest(Method.GET);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        expense_type_id = 3
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    Request request = new Request.Builder()
    .url("https://api.sabbatic.es/v2/expenses/misc?json=%7B%22expense_type_id%22:3%7D")
    .get()
    .addHeader("session_id", "YOURSESSIONID")
    .addHeader("cache-control", "no-cache")
    .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php

    $request = new HttpRequest();
    $request->setUrl('https://api.sabbatic.es/v2/expenses/misc');
    $request->setMethod(HTTP_METH_GET);

    $request->setQueryData(array(
        'json' => '%7B%22expense_type_id%22:3%7D'
    ));

    $request->setHeaders(array(
        'cache-control' => 'no-cache',
        'session_id' => 'YOURSESSIONID'
    ));

    try {
        $response = $request->send();
        echo $response->getBody();
    } catch (HttpException $ex) {
        echo $ex;
    }

Ejemplo de JSON de respuesta:

    {
        "entities_list": [
        {
            "expense_id": 360252,
            "user": {
                "user_id": 1563,
                "user_id_custom": "Cliente personalizado 4",
                "username": "email4@gmail.com",
                "email": "email4@gmail.com",
                "company": {
                    "company_id": 2365869,
                    "company_id_custom": "Compañia personalizada 6",
                    "vat_id": "A23369698",
                    "name": "Compañia del usuario S.L.",
                    "postal_code": 46001,
                    "city": "MADRID",
                    "address": "Camino Mundo Nº 50",
                    "province": "MADRID",
                    "country": "ESP"
                },
                "name": "Juan",
                "surname": "Fernandez Fernandez",
                "language": "es"
            },
            "company": {
                "company_id": 2365869,
                "company_id_custom": "Compañia personalizada 6",
                "vat_id": "A23369698",
                "name": "Compañia del usuario S.L.",
                "postal_code": 46001,
                "city": "MADRID",
                "address": "Camino Mundo Nº 50",
                "province": "MADRID",
                "country": "ESP"
            },
            "title": "Kilometraje - 110 Km",
            "expense_type": {
                "expense_type_id": 3,
                "name": "Kilometraje"
            },
            "creation_date": "25/09/2017",
            "expense_date": "26/01/2017",
            "units": 110,
            "unit_cost": 0.2,
            "total": 22,
            "total_euros": 22,
            "currency": "EUR",
            "country": "ESP",
            "status": {
                "name": "aprobado",
                "updated_datetime": "18/09/2018 19:03:46"
            },
            "image": {
                "image_full_url": "https://image-url-public-link",
                "image_full_url_list": ["https://image-url-public-link"],
                "image_large_url": "https://smallerimage-url-public-link",
                "image_large_url_list": ["https://smallerimage-url-public-link"],
                "pdf_url": "https://pdf-url-public-link",
                "pdf_url_list": ["https://pdf-url-public-link"]
            },
            "notes": "Autopista"
        },
        {
            "expense_id": 225254,
            "user": {
                "user_id": 1999,
                "username": "email1@sabbatic.es",
                "email": "email1@sabbatic.es",
                "company": {
                    "company_id": 211252,
                    "vat_id": "B12245898",
                    "name": "Compañia del usuario 2 S.L.",
                    "postal_code": 46001,
                    "city": "MADRID",
                    "address": "Camino Mundo Nº 51",
                    "province": "MADRID",
                    "country": "ESP"
                },
                "name": "Isabel",
                "surname": "Valero Jimenez",
                "language": "es"
            },
            "company": {
                "company_id": 211252,
                "vat_id": "B12245898",
                "name": "Compañia del usuario 2 S.L.",
                "postal_code": 46001,
                "city": "MADRID",
                "address": "Camino Mundo Nº 51",
                "province": "MADRID",
                "country": "ESP"
            },
            "title": "Kilometraje - 205.33 Km",
            "expense_type": {
                "expense_type_id": 3,
                "name": "Kilometraje"
            },
            "creation_date": "25/09/2017",
            "expense_date": "26/01/2017",
            "units": 205.33,
            "unit_cost": 0.19,
            "total": 39.01,
            "total_euros": 39.01,
            "currency": "EUR",
            "country": "ESP",
            "status": {
                "name": "digitalizado"
            },
            "labels": [
            {
                "label_id": 272357,
                "name": "Comidas"
            },
            {
                "label_id": 236586,
                "name": "Tarjeta de Empresa"
            }
            ]
        }
        ],
        "total_entities": 2,
        "entities_per_page": 20,
        "page": 0,
        "total_pages": 0
    }

HTTP Request

GET https://api.sabbatic.es/v2/expenses/misc?json={}

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

* Obligatorio

Parámetro Tipo Descripción
expense_type_id* int Identificador del tipo de gasto, puede usarse el servicio GET ExpenseTypes para obtener los tipos de gasto accesibles para un usuario.
user_id int Identificador numérico del usuario sobre el que se desea filtrar los gastos.
username string E-mail del usuario. solo los administradores pueden ver gastos correspondientes a otros usuarios. Ej. youruser@email.xxx
company_id int Identificador de empresa. Ej. 82828
company_id_custom string Identificador propio y personalizable que identifica a una empresa en el sistema propio del cliente. El par company_id,company_id_custom determina a una única empresa en Sabbatic.
user_id_custom string Identificador propio y personalizable que identifica a un usuario por empresa en el sistema del propio cliente. El par company_id,user_id_custom determina a un único usuario en Sabbatic.
expense_id array<int> Identificador del gasto. Puede ser múltiple. Ej. [28282, 15475]
creation_date_from string Límite menor de la fecha de envío del gasto. Ej. 01/01/2017
creation_date_to string Límite mayor de la fecha de envío del gasto.. Ej. 31/01/2017
expense_date_from string Límite menor de la fecha del gasto. Ej. 15/01/2017
expense_date_to string Límite mayor de la fecha del gasto. Ej. 15/02/2017
updated_date_from string Limite menor de la fecha de modificación sobre la que se quiere consultar. Ej. 20/02/2017
updated_date_to string Limite mayor de la fecha de modificación sobre la que se quiere consultar. Ej. 20/02/2017
total float Total del gasto. Ej. 25.70
currency string Acrónimo de la divisa establecido en la norma ISO 4217. Ej. EUR,GBP
country string Acrónimo del país de la divisa establecido en la norma ISO 3166. Ej. ESP,GBR
status_name string Parámetro para filtrar por Estado del gasto. Ej. Digitalizado, Pendiente, Rechazado, Aprobado, Confirmado
label_id array<int> Identificadores de una o más etiquetas. Ej. [ 1234, 5789, 612457 ]
reconciled boolean Indica si los gastos filtrados son conciliados true, o no conciliados false. En caso de no incluir este parámetro mostrará ambos, conciliados y no conciliados.
entities_per_page int Número de gastos a mostrar en cada página. En caso de omitir dicho parámetro, se mostrarán 20 gastos por página. Actualmente, el límite de gastos mostrados por página en Sabbatic es 100.
page int Los resultados del servicio vienen paginados cuando se obtienen más de los especificados en entities_per_page. En caso de omitir dicho parámetro, se mostrará la página 0.

Create a Misc Expense

Este servicio permite crear un gasto miscelánea en Sabbatic.

Ejemplo de llamada al servicio Create a misc expense:

    # Llamada desde consola Linux
    curl --request POST "https://api.sabbatic.es/v2/expenses/misc"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22expense_type_id%22:3,%22expense_date%22:%2205/02/2017%22,%22units%22:89.36,%22unit_cost%22:0.19%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/expenses/misc");
    var request = new RestRequest(Method.POST);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        expense_type_id = 3,
        expense_date = "05/04/2020",
        units = 2.3,
        unit_cost = 0.19
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22expense_type_id%22%3A3%2C%22expense_date%22%3A%2205%2F02%2F2017%22%2C%22units%22%3A89.36%2C%22unit_cost%22%3A0.19%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/expenses/misc")
        .post(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/expenses/misc');
        $request->setMethod(HTTP_METH_POST);

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'session_id' => 'YOURSESSIONID'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"expense_type_id":3,"expense_date":"05/02/2017","units":89.36,"unit_cost":0.19}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

Ejemplo de JSON de respuesta:

{
    "expense_id": 312611,
    "user": {
        "user_id": 789,
        "user_id_custom": "Usuario personalizado",
        "username": "youruser@email.xxx",
        "email": "youruser@email.xxx",
        "company": {
            "company_id": 289363,
            "company_id_custom": "Id Custom",
            "vat_id": "A36598523",
            "name": "Empresa Usuario Nombre",
            "postal_code": 40020,
            "city": "VALENCIA",
            "address": "Plaza Arroyo, Nº 31",
            "province": "VALENCIA",
            "country": "ESP"
        },
        "name": "Cesar",
        "surname": "Garcia Atienza",
        "language": "es"
    },
    "company": {
        "company_id": 289363,
        "company_id_custom": "Id Custom",
        "vat_id": "A36598523",
        "name": "Empresa Usuario Nombre",
        "postal_code": 40020,
        "city": "VALENCIA",
        "address": "Plaza Arroyo, Nº 31",
        "province": "VALENCIA",
        "country": "ESP"
    },
    "title": "Kilometraje - 89.36 Km",
    "expense_type": {
        "expense_type_id": 3,
        "name": "Kilometraje"
    },
    "creation_date": "26/09/2017",
    "expense_date": "26/01/2017",
    "units": 89.36,
    "unit_cost": 0.19,
    "total": 16.9784,
    "total_euros": 16.9784,
    "alerts": [
        {
            "alert_id": 123456,
            "name": "Alerta limite",
            "message": "El importe del gasto de 43,72€, ha sido superior a 15,00€.",
            "creation_datetime": "26/07/2021 11:58:14"
        }
    ],
    "details": {
        "start": {
            "name": "Donostia, Gipuzkoa, Spain",
            "type": "coordinate",
            "value": {
                "lat": 43.32,
                "lng": -1.98
            }
        },
        "end": {
            "name": "Aretxabaleta, Gipuzkoa, Spain",
            "type": "coordinate",
            "value": {
                "lat": 43.03611,
                "lng": -2.50444
            }
        },
        "units": {
            "type": "decimal",
            "value": 74.07
        },
        "unit_cost": {
            "name": "Standar",
            "type": "decimal",
            "value": 0.4536,
            "option_id": 99
        }
    },
    "currency": "EUR",
    "country": "ESP",
    "status": {
        "name": "digitalizado"
    }
}

HTTP Request

POST https://api.sabbatic.es/v2/expenses/misc

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de datos

* Obligatorios

Parámetro Tipo Descripción
user_id int Identificador numérico del usuario sobre el que se desea crear el gasto.
username string E-mail del usuario. Solo los administradores pueden crear gastos en nombre de otros usuarios. Ej. youruser@email.xxx
company_id int Identificador de empresa. Ej. 82828. Si el usuario integrador dispone de identificadores propios, debe usar este parámetro para identificar un usuario o empresa en el sistema Sabbatic.
company_id_custom string Identificador personal que identifica a una empresa en el sistema propio del cliente. El par company_id
user_id_custom string Identificador personal que identifica a un usuario en el sistema del propio cliente. El par company_id
expense_company_id int Identificador de Sabbatic de la empresa a la que se asignará el nuevo gasto creado. Si el integrador tiene una configuración multi-empresa, puede asignar un gasto a una de dichas empresas.
expense_company_id_custom int Identificador propio de la empresa a la que se asignará el nuevo gasto creado. El par company_id
image_base64* string Imagen serializada de un ticket en Base64.
supplier_vat_id string Parámetro opcional (en tickets manuales) para asignar el NIF del proveedor al gasto. Ej. A12345678
supplier_name string Parámetro opcional (en tickets manuales) para asignar la Razón Social del proveedor al gasto. Ej. Compañía de Ejemplo, S.L
expense_date string Parámetro opcional (en tickets manuales) para asignar una fecha al gasto. Ej. 05/01/2017
net_price float Parámetro opcional (en tickets manuales) para asignar una base imponible al gasto. Ej. 15.50
tax_percent float Parámetro opcional (en tickets manuales) para asignar un porcentaje de impuesto al gasto. Ej. 21
total float Parámetro opcional (en tickets manuales) para asignar un total al gasto. Ej. 25.50
country string Parámetro opcional para asignar la divisa y país al gasto, segun la norma ISO 3166-1. Ej. ESP. En caso de no especificarlo, el parámetro por defecto es ESP
label_id array<int> Parámetro opcional para asignar etiquetas al gasto. Ej. [ 1234, 5789, 612457 ]
notes string Campo de texto libre hasta 255 carácteres, para incluir cualquier observación al ticket.
no_response boolean Parámetro para indicar si se desea recibir una notificacion con el resultado del proceso cuando haya terminado. Para recuperar los datos hay que hacer GET expenses/receipts

Edit a Misc Expense

Este servicio permite editar un gasto miscelánea en Sabbatic. Cabe destacar que dependiendo del usuario y del flujo de aprobación algunos campos no son editables. En su caso, se modificarán los valores de aquellos parámetros que se envíen en la llamada.

Ejemplo de llamada al servicio Edit a misc expense:

    # Llamada desde consola Linux
    curl --request PUT "https://api.sabbatic.es/v2/expenses/misc"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22expense_type%22:3,%22expense_id%22:[289203],%22units%22:123.45%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/expenses/misc");
    var request = new RestRequest(Method.PUT);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        expense_id = 1234,
        units = 2.3
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22expense_id%22%3A%5B289203%5D%2C%22expense_type_id%22%3A3%2C%C2%A1%2C%22units%22%3A123.45%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/expenses/misc")
        .put(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/expenses/misc');
        $request->setMethod(HTTP_METH_PUT);

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'Content-Type' => 'application/x-www-form-urlencoded',
            'session_id' => 'YOURSESSIONID'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"expense_id":[289203],"expense_type_id":3,¡,"units":123.45}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "Entities id parameter not valid or some elements do not exist"
    }

HTTP Request

PUT https://api.sabbatic.es/v2/expenses/misc

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
expense_id string Identificadores de los gastos misc que se desean editar. Puede ser múltiple. Ej. [ 100101,100102,100103 ]

Parámetros de datos

Parámetro Tipo Descripción
expense_date string Fecha del gasto misc en formato dd/mm/aaaa. Ej. [ 15/02/2017 ]
units float Número de unidades asignadas. Ej. [ 125.50 ]
unit_cost float Número del coste por unidad de medida, en este caso, coste por kilometro. El total del gasto se calculará multiplicando mileage por unit_cost.
status_name string Estado del gasto. Ej. Rechazado, Aprobado, Confirmado
label_id array<int> Identificadores de una o más etiquetas. Se sobreescribirá la totalidad de las mismas. Ej. [ 1234, 5789, 612457 ]
notes string Campo de texto libre hasta 255 carácteres, para incluir cualquier observación al ticket que se desee.

Delete a Misc Expense

Este servicio permite eliminar un gasto miscelánea en Sabbatic.

Ejemplo de llamada al servicio "Delete a misc expense":

    # Llamada desde consola Linux
    curl --request DELETE "https://api.sabbatic.es/v2/expenses/misc"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22expense_type_id%22:3,%22expense_id%22:[287345]%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/expenses/misc");
    var request = new RestRequest(Method.DELETE);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        expense_id = new Int[]{
            1234
        }
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22expense_id%22%3A%5B287345%5D%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/expenses/misc")
        .delete(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/expenses/misc');
        $request->setMethod(HTTP_METH_DELETE);

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'Content-Type' => 'application/x-www-form-urlencoded',
            'session_id' => 'YOURSESSIONID'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"expense_id":[287345]}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "Entities id parameter not valid or some elements do not exist"
    }

HTTP Request

DELETE https://api.sabbatic.es/v2/expenses/misc

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
expense_id array<int> Identificadores de los gastos que se desean eliminar. Ej. [ 100101,100102,100103,... ]

Categories

La entidad Categories (categoría) es la entidad contenedora que utiliza Sabbatic para agrupar diferentes etiquetas. Las categorías siempre están relacionadas con una única empresa. Esta entidad permite las operaciones GET, POST, PUT, DELETE sobre las categorías creadas por el administrador. Las acciones POST, PUT y DELETE están solo disponibles para los administradores. Adicionalmente un usuario Integrador multi-empresa podrá gestionar y visualizar categorías pertenecientes a sus empresas.

List all categories

Este servicio permite listar las categorías de Sabbatic.

Ejemplo de llamada al servicio List all categories:

    # Llamada desde consola Linux
    curl --request GET "https://api.sabbatic.es/v2/categories?json=%7B%7D"
        -H "session_id:YOURSESSIONID"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/categories");
    var request = new RestRequest(Method.GET);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {};
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/categories?json=%7B%7D")
        .get()
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/categories');
        $request->setMethod(HTTP_METH_GET);

        $request->setQueryData(array(
            'json' => '%7B%7D'
        ));

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'session_id' => 'YOURSESSIONID'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

Ejemplo de JSON de respuesta:

    {
        "entities_list": [
            {
                "category_id": 233447,
                "name": "Proyecto",
                "company": {
                    "company_id": 289363,
                    "company_id_custom": "Id Custom",
                    "vat_id": "A36598523",
                    "name": "Empresa Usuario Nombre",
                    "postal_code": 40020,
                    "city": "VALENCIA",
                    "address": "Plaza Arroyo, Nº 31",
                    "province": "VALENCIA",
                    "country": "ESP"
                },
                "labels": [
                    {
                        "label_id": 281208,
                        "name": "Tren",
                        "category_id": 233447,
                        "closed": false
                    },
                    {
                        "label_id": 288209,
                        "name": "Avión",
                        "category_id": 233447,
                        "closed": false
                    }
                ],
                "required": false,
                "closed": true,
                "multivalue": false,
                "permissions": {
                    "users": [
                        {
                            "user_id": 389,
                            "user_id_custom": "JSP232"
                        },
                        {
                            "user_id": 2357,
                            "user_id_custom": "JSP4236"
                        }
                    ]
                }
            },
            {
                "category_id": 283997,
                "category_id_custom": "Cuenta08",
                "name": "Forma de Pago",
                "company": {
                    "company_id": 289363,
                    "company_id_custom": "Id Custom",
                    "vat_id": "A36598523",
                    "name": "Empresa Usuario Nombre",
                    "postal_code": 40020,
                    "city": "VALENCIA",
                    "address": "Plaza Arroyo, Nº 31",
                    "province": "VALENCIA",
                    "country": "ESP"
                },
                "labels": [
                    {
                        "label_id": 222238,
                        "name": "Efectivo",
                        "category_id": 283997,
                        "closed": false
                    },
                    {
                        "label_id": 222239,
                        "name": "Tarjeta",
                        "category_id": 283997,
                        "closed": false
                    }
                ],
                "required": false,
                "closed": false,
                "multivalue": false,
                "permissions": {
                    "users": [
                        {
                            "user_id": 5959
                        }
                    ],
                    "groups": [
                        {
                            "group_id": 397189,
                            "group_id_custom": "Ext0545"
                        },
                        {
                            "group_id": 397190,
                            "group_id_custom": "Ext0546"
                        }
                    ]
                }
            }
        ]
    }

HTTP Request

GET https://api.sabbatic.es/v2/categories?json={}

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
company_id int Identificador de empresa. Ej. 82828
company_id_custom string Identificador personal que identifica a una empresa en el sistema propio del cliente. El par company_id,company_id_custom determina a una única empresa en Sabbatic.
required boolean Indica si los usuarios deben indicar una etiqueta de dicha categoría en cada ticket que se digitalice. Puede contener true o false.
closed boolean Indica si la categoría está cerrada o no, y por lo tanto, si son o no visibles para los usuarios. Puede contener true o false.
category_id array<int> Identificador de categoría. Permite múltiple. Ej. [ 28282, 15475 ]
category_id_custom array<string> Identificador personal que identifica a una categoría en el entorno del equipo cliente, el integrador puede utilizar sus propias claves para identificar a una categoría previamente creada en Sabbatic, ej: "653236" o "Marketing-23"
user_id int Identificador numérico del usuario sobre el que se desea filtrar las categorías.
user_id_custom string Identificador personal que identifica a un usuario por empresa en el sistema del propio cliente. El par company_id,user_id_custom determina a un único usuario en Sabbatic.
username string E-mail del usuario. Solo los administradores pueden ver categorías correspondientes a otros usuarios. Ej. youruser@email.xxx
multivalue boolean Filtra las categorías (true o false) que permite seleccionar más de un etiqueta y por tanto son multi-valor.

Create a category

Este servicio permite crear una categoría de Sabbatic.

Ejemplo de llamada al servicio Create a category:

    # Llamada desde consola Linux
    curl --request POST "https://api.sabbatic.es/v2/categories"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22name%22:%22Servicios adicionales%22,%22category_id_custom%22:%22cod_2341%22,%22required%22:1,%22closed%22:false,%22permissions%22:%7B%22users%22:[2369,5959]%7D,%22parent_labels%22:[%7B%22company_id%22:289363,%22label_id_custom%22:%22Lbl056%22%7D],%22required_expense_type_id%22:[1,3]%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/categories");
    var request = new RestRequest(Method.POST);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        name = "Cat1",
        category_id_custom = "cod_123",
        required = true
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22name%22%3A%22Servicios%20adicionales%22%2C%22category_id_custom%22%3A%22cod_2341%22%2C%22required%22%3A1%2C%22closed%22%3Afalse%2C%22permissions%22%3A%7B%22users%22%3A%5B2369%2C5959%5D%7D%2C%22parent_labels%22%3A%5B%7B%22company_id%22%3A289363%2C%22label_id_custom%22%3A%22Lbl056%22%7D%5D%2C%22required_expense_type_id%22%3A%5B1%2C3%5D%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/categories")
        .post(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/categories');
        $request->setMethod(HTTP_METH_POST);

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'Content-Type' => 'application/x-www-form-urlencoded',
            'session_id' => 'YOURSESSIONID'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"name":"Servicios adicionales","category_id_custom":"cod_2341","required":1,"closed":false,"permissions":{"users":[2369,5959]},"parent_labels":[{"company_id":289363,"label_id_custom":"Lbl056"}],"required_expense_type_id":[1,3]}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

Ejemplo de JSON de respuesta:

    {
        "category_id": 311631,
        "category_id_custom": "cod_2341",
        "name": "Servicios adicionales",
        "company": {
            "company_id": 289363,
            "company_id_custom": "Id Custom",
            "vat_id": "A36598523",
            "name": "Empresa Usuario Nombre",
            "postal_code": 40020,
            "city": "VALENCIA",
            "address": "Plaza Arroyo, Nº 31",
            "province": "VALENCIA",
            "country": "ESP"
        },
        "required": true,
        "closed": false,
        "multivalue": false,
        "permissions": {
                "users": [
                {
                    "user_id": 2369
                },
                {
                    "user_id": 5959
                }
            ]
        },"parent_labels": [
            {
                "label_id": 302194,
                "label_id_custom": "Lbl056",
                "name": "Transporte"
            }
        ],
        "required_expense_type": [
            {
                "expense_type_id":1
            },
            {
                "expense_type_id":3
            }
        ]
    }

HTTP Request

POST https://api.sabbatic.es/v2/categories

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de datos

* Obligatorios

Parámetro Tipo Descripción
name* string Nombre de la categoría. Ej. "Tipo de gasto"
company_id int Identificador de empresa en la que se quiere crear la nueva categoría. Solo apto para administradores con funciones de integración de varias empresas.
company_id_custom string Identificador personal que identifica a una empresa en el sistema propio del cliente. El par company_id,company_id_custom determina a una única empresa en Sabbatic.
category_id_custom string Identificador personal de una categoría en el entorno del equipo cliente, el integrador puede utilizar sus propias claves para identificar a una categoría previamente creada en Sabbatic, ej: "653236" o "Marketing-23".
required int Asigna a la categoría a crear si empezará como obligatoria (true o false). Por aquellas que son obligatorias se entiende que tienen que tener alguna etiqueta seleccionada por el usuario cuando se realiza una creación o edición de un gasto.
closed int Asigna a la categoría a crear si empezará como cerrada (true/false). Por aquellas que están cerradas se entiende que son visibles o no por un usuario que no sea administrador. No se podrá crear o editar etiquetas de una categoría que esté cerrada.
multivalue int Asigna a la categoría a crear si empezará como multi-valor (true/false). Por aquellas que son multi-valor se entiende que permite seleccionar más de un etiqueta.
permissions object<permission> Objeto que representa una estructura de permisos para usuarios
parent_labels array<label> Sabbatic permite especificar una jerarquía de anidación entre categorías, de tal modo que solo se despliegue o se haga visible una categoría cuando otra (denominada padre) haya sido seleccionada previamente. Esta anidación es visible en las plataformas móviles y en la API supone una capa extra de permisos sobre que categorías se pueden editar o asignar dentro de un gasto. Ej: Considerando la categoría {"id":423652, "name":"Viajes representación"}, las categorías {"id":468532, "name":"Barcelona", "parent_labels":[{"label_id":423652}]}, {"id":325112,"name":"Madrid","parent_labels":[{"label_id":423652}]} permitiria mostrar únicamente estas 2 cuando la categoría padre haya sido seleccionada en un entorno móvil, o bien no permitir crear o editar un gasto en la API si no se cumple todos los requisitos de dependencia.
required_expense_type_id array<int> Este parámetro establece para que tipo/s de gasto/s aparece o es utilizable esta categoría en el entorno Sabbatic. Si no se especifica nada en este campo, dicha categoría es accesible para todos los tipos de gasto, pero si se establece uno o varios tipos de gasto obligatorios, entonces dichas categorías solo son accesibles para los tipos especificados. Ej: Si se establece "required_expense_type_id":[1,2,3] entonces dicha categoría solo esta disponible para Tickets, Facturas y Kilometrajes. Las id de los tipos de gasto son consultables en el servicio GET Expense Types.

Edit a category

Este servicio permite editar una categoría de Sabbatic.

Ejemplo de llamada al servicio Edit a category:

    # Llamada desde consola Linux
    curl --request PUT "https://api.sabbatic.es/v2/categories"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22category_id%22:[289203], %22name%22:%22Nuevo titulo%22,%22permissions%22:%7B%22users%22:[%7B%22user_id%22:529%7D,%7B%22user_id%22: 441%7D]%7D,%22parent_labels%22:[%7B%22label_id%22:302194%7D],%22required_expense_type_id%22:[2]%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/categories");
    var request = new RestRequest(Method.PUT);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        category_id = 1234,
        name = "Cat1.1"
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22category_id%22%3A%5B289203%5D%2C%20%22name%22%3A%22Nuevo%20titulo%22%2C%22permissions%22%3A%7B%22users%22%3A%5B%7B%22user_id%22%3A529%7D%2C%7B%22user_id%22%3A%20441%7D%5D%7D%2C%22parent_labels%22%3A%5B%7B%22label_id%22%3A302194%7D%5D%2C%22required_expense_type_id%22%3A%5B2%5D%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/categories")
        .put(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php

        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/categories');
        $request->setMethod(HTTP_METH_PUT);

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'Content-Type' => 'application/x-www-form-urlencoded',
            'session_id' => 'YOURSESSIONID'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"category_id":[289203], "name":"Nuevo titulo","permissions":{"users":[{"user_id":529},{"user_id": 441}]},"parent_labels":[{"label_id":302194}],"required_expense_type_id":[2]}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "Entities id parameter not valid or some elements do not exist"
    }

HTTP Request

PUT https://api.sabbatic.es/v2/categories

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
category_id array<int> Identificadores de las categorías que se desea editar. Ej. [ 100101,100102,100103,... ]
company_id int Identificador de empresa en la que se quiere editar la nueva categoría. solo apto para administradores con funciones de integración de varias empresas.
company_id_custom string Identificador propio y personalizable que identifica a una empresa en el sistema propio del cliente. El par "company_id","company_id_custom" determina a una única empresa en Sabbatic.
category_id_custom string Identificador (string alfanumérico) que identifica a una categoría en el entorno del equipo cliente, el integrador puede utilizar sus propias claves para identificar a una categoría previamente creada en Sabbatic, ej: "653236" o "Marketing-23".

Parámetros de datos

Parámetro Tipo Descripción
name string Nombre de la categoría.
required boolean Editará si la categoría es obligatoria (true/false). Por aquellas que son obligatorias se entiende que tienen que tener alguna etiqueta seleccionada por el usuario cuando se realiza una creación o edición de un gasto.
closed boolean Editará si la categoría es cerrada (true/false). Por aquellas que están cerradas se entiende que son visibles o no por un usuario que no sea administrador. No se podrá crear o editar etiquetas de una categoría que esté cerrada.
multivalue boolean Editará si la categoría es multi-valor (true/false). Por aquellas que son multi-valor se entiende que permite seleccionar más de un etiqueta.
permissions object<permission> Objeto que representa una estructura de permisos para usuarios
parent_labels array<label> Sabbatic permite especificar una jerarquía de anidación entre categorías, de tal modo que solo se despliegue o se haga visible una categoría cuando otra (denominada padre) haya sido seleccionada previamente. Esta anidación es visible en las plataformas móviles y en la API supone una capa extra de permisos sobre que categorías se pueden editar o asignar dentro de un gasto. Ej: Considerando la categoría {"id":423652, "name":"Viajes representación"}, las categorías {"id":468532, "name":"Barcelona", "parent_labels":[{"label_id":423652}]}, {"id":325112,"name":"Madrid","parent_labels":[{"label_id":423652}]} permitiria mostrar únicamente estas 2 cuando la categoría padre haya sido seleccionada en un entorno móvil, o bien no permitir crear o editar un gasto en la API si no se cumple todos los requisitos de dependencia.
required_expense_type_id array<int> Este parámetro establece para que tipo/s de gasto/s aparece o es utilizable esta categoría en el entorno Sabbatic. Si no se especifica nada en este campo, dicha categoría es accesible para todos los tipos de gasto, pero si se establece uno o varios tipos de gasto obligatorios, entonces dichas categorías solo son accesibles para los tipos especificados. Ej: Si se establece "required_expense_type_id":[1,2,3] entonces dicha categoría solo esta disponible para Tickets, Facturas y Kilometrajes. Las id de los tipos de gasto son consultables en el servicio GET Expense Types.

Delete a category

Este servicio permite eliminar una categoría Sabbatic.

Ejemplo de llamada al servicio Delete a category:

    # Llamada desde consola Linux
    curl --request DELETE "https://api.sabbatic.es/v2/categories"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22category_id%22:[287345]%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/categories");
    var request = new RestRequest(Method.DELETE);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new Int[]{
        category_id = 1234
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22category_id%22%3A%5B287345%5D%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/categories")
        .delete(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/categories');
        $request->setMethod(HTTP_METH_DELETE);

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'Content-Type' => 'application/x-www-form-urlencoded',
            'session_id' => 'YOURSESSIONID'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"category_id":[287345]}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "Entities id parameter not valid or some elements do not exist"
    }

HTTP Request

DELETE https://api.sabbatic.es/v2/categories

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
category_id array<int> Identificadores de las categorías que se desea eliminar. Ej. [ 100101,100102,100103,... ]
category_id_custom string Identificador personal de una categoría en el entorno del cliente, el integrador puede utilizar sus propias claves para identificar a una categoría previamente creada en Sabbatic, ej: "653236" o "Marketing-23"

Labels

La entidad Labels (Etiquetas) es la entidad que utiliza Sabbatic para categorizar los diferentes tipos de gasto. Una etiqueta siempre está relacionada con una única categoría. Esta entidad permite las operaciones GET, POST, PUT, DELETE sobre las etiquetas creadas por el administrador de empresa. Las acciones POST, PUT y DELETE están solo disponibles para los administradores de empresa.

List all labels

Listado de etiquetas

Ejemplo de llamada al servicio List all labels:

    # Llamada desde consola Linux
    curl --request GET "https://api.sabbatic.es/v2/labels?json=%7B%7D"
        -H "session_id:YOURSESSIONID"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/labels");
    var request = new RestRequest(Method.GET);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {};
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/labels?json=%7B%7D")
        .get()
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php

        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/labels');
        $request->setMethod(HTTP_METH_GET);

        $request->setQueryData(array(
            'json' => '%7B%7D'
        ));

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'session_id' => 'YOURSESSIONID'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

Ejemplos de JSON de respuesta:

    {
        "entities_list": [
            {
                "label_id": 222238,
                "name": "Efectivo",
                "category_id": 283997,
                "company": {
                    "company_id": 289363,
                    "name": "Empresa usuario nombre"
                },
                "closed": false,
                "permissions": {
                    "users": [
                            {
                                "user_id": 5932
                            }
                        ]
                }
            },
            {
                "label_id": 222239,
                "label_id_custom": "Etiqueta personalizada",
                "name": "Tarjeta",
                "category_id": 283997,
                "company": {
                    "company_id": 289363,
                    "name": "Empresa usuario nombre"
                },
                "closed": true
            },
            {
                "label_id": 314605,
                "name": "Intérpretes",
                "category_id": 283997,
                "company": {
                    "company_id": 289363,
                    "name": "Empresa usuario nombre"
                },
                "closed": true,
                "permissions": {
                    "users": [
                        {
                            "user_id": 4948
                        }
                    ],
                    "groups": [
                        {
                            "group_id": 391186,
                            "group_id_custom": "Ext0545"
                        }
                    ],
                    "companies": [
                        {
                            "company_id": 253698
                        }
                    ]
                }
            }
        ]
    }

HTTP Request

GET https://api.sabbatic.es/v2/labels?json={}

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
company_id int Identificador de empresa. Ej. 82828.
company_id_custom string Identificador personal de una empresa en el sistema propio del cliente. El par company_id, company_id_custom determina a una única empresa en Sabbatic.
user_id int Identificador numérico del usuario sobre el que se desea filtrar las etiquetas.
user_id_custom string Identificador personall de un usuario por empresa. El par company_id,user_id_custom determinan a un único usuario en Sabbatic.
username string E-mail del usuario. solo los administradores pueden ver gastos correspondientes a otros usuarios. Ej. youruser@email.xxx.
label_id array<int> Identificador de etiquetas. Permite múltiple. Ej. [ 28282, 15475 ]
label_id_custom array<string> Array de cadena de texto libre que designa la identificación de la etiqueta en la empresa del cliente. Si se utiliza este campo tambien debes de indicar company_id.
category_id int Identificadores de categorías que contienen dichas etiquetas. Permite múltiple. Ej. [ 100100,100101,100102,... ]
closed boolean Filtra las etiquetas ( true o false ) por aquellas que están cerradas o no, y por lo tanto son visibles o no por un usuario que no sea administrador.

Create a label

Envío de una nueva etiqueta a Sabbatic.

Ejemplo de llamada al servicio Create a label:

    # Llamada desde consola Linux
    curl --request POST "https://api.sabbatic.es/v2/labels"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22name%22:%22Comidas%22,%22category_id%22:314605,%22parent_labels%22:[%7B%22label_id%22:302194%7D],%22required_expense_type_id%22:[1,3]%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/labels");
    var request = new RestRequest(Method.POST);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        name = "Comidas",
        category_id = 1234
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22name%22:%22Comidas%22,%22category_id%22:314605,%22parent_labels%22:[%7B%22label_id%22:302194%7D],%22required_expense_type_id%22:[1,3]%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/labels")
        .post(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/labels');
        $request->setMethod(HTTP_METH_POST);

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'Content-Type' => 'application/x-www-form-urlencoded',
            'session_id' => 'YOURSESSIONID'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"category_id":"314605","name":"Comidas","parent_labels":[{"label_id":302194}],"required_expense_type_id":[1,3]}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

Ejemplo de JSON de respuesta:

{
    "label_id": 314605,
    "name": "Comidas",
    "category_id": 289632,
    "company": {
        "company_id": 289363,
        "name": "Empresa usuario nombre"
    },
    "closed": false,
    "permissions": {
                "groups": [
                    {
                        "group_id": 391186,
                        "group_id_custom": "Ext0545"
                    }
                ]
    },"parent_labels": [
        {
            "label_id": 302194,
            "label_id_custom": "Lbl056",
            "name": "Transporte"
        }
    ],
    "required_expense_type": [
        {
            "expense_type_id":1
        },
        {
            "expense_type_id":3
        }
    ]
}

HTTP Request

POST https://api.sabbatic.es/v2/labels

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de datos

*Obligatorios

Parámetro Tipo Descripción
name* string Asigna el titulo de la etiqueta que se va a crear.
category_id* int Asigna el identificador de la categoría de la que cuelga la etiqueta que se va a crear. Dicha categoría no debe estar cerrada.
closed boolean Asigna si la etiqueta se creará de inicio con el estado cerrado (true/false). Las etiquetas cerradas son visibles o no por un usuario que no sea administrador.
label_id_custom string Cadena de texto libre que designa la identificación de la etiqueta en la empresa del cliente, puede definirse en el momento de su creación o editando más tarde la etiqueta
permissions object<permission> Objeto que representa una estructura de permisos para usuarios
parent_labels array<label> Sabbatic permite especificar una jerarquía de anidación entre etiquetas, de tal modo que solo se despliegue o se haga visible una etiqueta cuando otra (denominada padre) haya sido seleccionada previamente. Esta anidación es visible en las plataformas móviles y en la API supone una capa extra de permisos sobre que etiquetas se pueden editar o asignar dentro de un gasto. Ej: Considerando la etiqueta {“id”:423652,“name”:“Viaje”}, las etiquetas {“id”:468532, “name”:“Barcelona”,“parent_labels”: [{“label_id”:423652}]}, {“id”:325112,“name”:“Madrid”,“parent_labels”:[{“label_id”:423652}] } permitiría mostrar únicamente estas 2 cuando la etiqueta padre haya sido seleccionada en un entorno móvil, o bien no permitir crear o editar un gasto en la API si no se cumple todos los requisitos de dependencia.
required_expense_type_id array<int> Este parámetro establece para que tipo/s de gasto/s aparece o es utilizable esta etiqueta en el entorno Sabbatic. Si no se especifica nada en este campo, dicha categoría es accesible para todos los tipos de gasto, pero si se establece uno o varios tipos de gasto obligatorios, entonces dichas etiquetas solo son accesibles para los tipos especificados. Ej: Si se establece "required_expense_type_id":[1,2,3] entonces dicha etiqueta solo esta disponible para Tickets, Facturas y Kilometrajes. Las id de los tipos de gasto son consultables en el servicio GET Expense Types.

Edit a label

Edición de una etiqueta en Sabbatic.

Ejemplo de llamada al servicio Edit a label:

    # Llamada desde consola Linux
    curl --request PUT "https://api.sabbatic.es/v2/label"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22label_id%22:[289203], %22name%22:%22Nuevo titulo%22,%22parent_labels%22:[%7B%22label_id%22:302194%7D],%22required_expense_type_id%22:[1]%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/label");
    var request = new RestRequest(Method.PUT);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        label_id = 1234,
        name = "Cenas"
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22label_id%22:[289203], %22name%22:%22Nuevo titulo%22,%22parent_labels%22:[%7B%22label_id%22:302194%7D],%22required_expense_type_id%22:[1]%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/label")
        .put(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/label');
        $request->setMethod(HTTP_METH_PUT);

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'Content-Type' => 'application/x-www-form-urlencoded',
            'session_id' => 'YOURSESSIONID'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"label_id":[289203], "name":"Nuevo titulo","parent_labels":[{"label_id":302194}],"required_expense_type_id":[2]}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "Entities id parameter not valid or some elements do not exist"
    }

HTTP Request

PUT https://api.sabbatic.es/v2/labels

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
label_id array<int> Identificadores de las etiquetas que se desea editar. Puede ser múltiple. Ej. [100101,100102,100103,...]
label_id_custom array<string> Array de cadena de texto libre que designa la identificación de la etiqueta en la empresa del cliente, se puede editar varias etiquetas de una sola llamada.
company_id int Identificador de empresa donde se está tratando de editar la etiqueta.
company_id_custom string Identificador propio y personalizable que identifica a una empresa en el sistema propio del cliente. El par "company_id","company_id_custom" determina a una única empresa en Sabbatic.

Parámetros de datos

Parámetro Tipo Descripción
new_label_id_custom string Parámetro para dar un nuevo nombre a una etiqueta personalizada y a la vez utilizar "label_id_custom" para seleccionar a cual de ella nos referimos.
name string Editará un nombre por el cual se conoce a la etiqueta.
closed boolean Editará si la etiqueta está cerrada (true/false). Las etiquetas que tengan "true" en este parámetro no serán visibles para los usuarios.
permissions object<permission> Objeto que representa una estructura de permisos para usuarios
parent_labels array<label> Sabbatic permite especificar una jerarquía de anidación entre etiquetas, de tal modo que solo se despliegue o se haga visible una etiqueta cuando otra (denominada padre) haya sido seleccionada previamente. Esta anidación es visible en las plataformas móviles y en la API supone una capa extra de permisos sobre que etiquetas se pueden editar o asignar dentro de un gasto. Ej: Considerando la etiqueta {“id”:423652,“name”:“Viaje”}, las etiquetas {“id”:468532, “name”:“Barcelona”,“parent_labels”: [{“label_id”:423652}]}, {“id”:325112,“name”:“Madrid”,“parent_labels”:[{“label_id”:423652}] } permitiría mostrar únicamente estas 2 cuando la etiqueta padre haya sido seleccionada en un entorno móvil, o bien no permitir crear o editar un gasto en la API si no se cumple todos los requisitos de dependencia.
required_expense_type_id array<int> Este parámetro establece para que tipo/s de gasto/s aparece o es utilizable esta etiqueta en el entorno Sabbatic. Si no se especifica nada en este campo, dicha categoría es accesible para todos los tipos de gasto, pero si se establece uno o varios tipos de gasto obligatorios, entonces dichas etiquetas solo son accesibles para los tipos especificados. Ej: Si se establece "required_expense_type_id":[1,2,3] entonces dicha etiqueta solo esta disponible para Tickets, Facturas y Kilometrajes. Las id de los tipos de gasto son consultables en el servicio GET Expense Types.

Delete a label

Eliminación de una etiqueta en Sabbatic.

Ejemplo de llamada al servicio Delete a label:

    curl --request DELETE "https://api.sabbatic.es/v2/labels"
    -H "session_id:YOURSESSIONID"
    --data "json=%7B%22label_id%22:[287345]%7D"
    # Llamada desde consola Linux
    curl --request DELETE "https://api.sabbatic.es/v2/labels"
    -H "session_id:YOURSESSIONID"
    --data "json=%7B%22label_id%22:[287345]%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/labels");
    var request = new RestRequest(Method.DELETE);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        label_id = new Int[]{
            1234
        }
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22label_id%22:[287345]%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/labels")
        .delete(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php

        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/labels');
        $request->setMethod(HTTP_METH_DELETE);

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'Content-Type' => 'application/x-www-form-urlencoded',
            'session_id' => 'YOURSESSIONID'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"label_id":[287345]}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "Entities id parameter not valid or some elements do not exist"
    }

HTTP Request

DELETE https://api.sabbatic.es/v2/labels

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
label_id array<int> Identificadores de las etiquetas que se desea eliminar. Ej. [ 100101,100102,100103,... ]
label_id_custom array<string> Array de string que designa la identificación de la etiqueta en la empresa del cliente, se puede eliminar varias etiquetas de una sola llamada.

Update labels

Update labels proporciona la posibilidad de sincronizar el listado de categorías/etiquetas de Sabbatic con el listado existente en los sistemas del cliente. Para ello, es necesario que la llamada incluya la totalidad de categorías/etiquetas activas en dicho momento, dejando a Sabbatic las operaciones de alta, baja y modificaciones necesarias para sincronizar el listado existente en Sabbatic.

Debido a la considerable carga que puede soportar dicho servicio, la respuesta del mismo se realizará en el momento de validar la petición, antes de que se ejecute la operación. Una vez validada dicha petición, Sabbatic procederá a la ejecución de los cambios y sólo en caso de que dicha ejecución sea errónea se notificará al usuario a través de un e-mail.

Este servicio permite únicamente una llamada simultánea.

Ejemplo de llamada al servicio "Labels update":

    # Llamada desde consola Linux
    curl --request POST "https://api.sabbatic.es/v2/labels_update"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22categories%22%3A%5B%7B%22category_id%22%3A236987%2C%22labels%22%3A%5B%7B%22name%22%3A%22Label1%22%2C%22label_id%22%3A356325%7D%2C%7B%22name%22%3A%22Label2%22%2C%22label_id%22%3A412323%7D%2C%7B%22name%22%3A%22Label3%22%2C%22label_id_custom%22%3A%22Lbl3%22%7D%5D%7D%2C%7B%22category_id_custom%22%3A%22CategoryCustom2%22%2C%22labels%22%3A%5B%7B%22name%22%3A%22TestCenter1%22%2C%22label_id_custom%22%3A%22TC1%22%7D%2C%7B%22name%22%3A%22TestCenter2%22%2C%22label_id_custom%22%3A%22TC2%22%2C%22parent_labels%22%3A%5B%7B%22label_id%22%3A356325%7D%5D%7D%5D%7D%5D%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/labels_update");
    var request = new RestRequest(Method.POST);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        categories = [
            {
                category_id = 1234,
                labels = [
                    {
                        name = "label1",
                        required = true
                    },
                    ...
                ]
            },
            ...
        ]
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22categories%22%3A%5B%7B%22category_id%22%3A236987%2C%22labels%22%3A%5B%7B%22name%22%3A%22Label1%22%2C%22label_id%22%3A356325%7D%2C%7B%22name%22%3A%22Label2%22%2C%22label_id%22%3A412323%7D%2C%7B%22name%22%3A%22Label3%22%2C%22label_id_custom%22%3A%22Lbl3%22%7D%5D%7D%2C%7B%22category_id_custom%22%3A%22CategoryCustom2%22%2C%22labels%22%3A%5B%7B%22name%22%3A%22TestCenter1%22%2C%22label_id_custom%22%3A%22TC1%22%7D%2C%7B%22name%22%3A%22TestCenter2%22%2C%22label_id_custom%22%3A%22TC2%22%2C%22parent_labels%22%3A%5B%7B%22label_id%22%3A356325%7D%5D%7D%5D%7D%5D%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/labels_update")
        .post(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/labels_update');
        $request->setMethod(HTTP_METH_POST);

        $request->setHeaders(array(
        'cache-control' => 'no-cache',
        'Content-Type' => 'application/x-www-form-urlencoded',
        'session_id' => 'YOURSESSIONID'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
        'json' => '{"categories":[{"category_id":236987,"labels":[{"name":"Label1","label_id":356325},{"name":"Label2","label_id":412323},{"name":"Label3","label_id_custom":"Lbl3"}]},{"category_id_custom":"CategoryCustom2","labels":[{"name":"TestCenter1","label_id_custom":"TC1"},{"name":"TestCenter2","label_id_custom":"TC2","parent_labels":[{"label_id":356325}]}]}]}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "The parameter 'company_id' is not valid or does not exists"
    }

Ejemplo de un json de mantenimiento de etiquetas:

    {
        "categories":[
            {
                "category_id":236987,
                "labels":[
                    {
                    "name":"Label1",
                    "label_id":356325
                    },
                    {
                    "name":"Label2",
                    "label_id":412323
                    },
                    {
                    "name":"Label3",
                    "label_id_custom":"Lbl3"
                    }
                ]
            },
            {
                "category_id_custom":"CategoryCustom2",
                "labels":[
                    {
                    "name":"TestCenter1",
                    "label_id_custom":"TC1"
                    },
                    {
                    "name":"TestCenter2",
                    "label_id_custom":"TC2",
                    "parent_labels":[
                        {
                        "label_id":356325
                        }
                    ]
                    }
                ]
            }
        ]
    }

HTTP Request

POST https://api.sabbatic.es/v2/labels_update

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de datos

Parámetro Tipo Descripción
categories array<category> Array de objetos category. Identifica la lista de categorías/etiquetas del integrador. Todas las etiquetas deben pertenecer a alguna categoría para poder estar integrados en Sabbatic.

Users

La entidad Users (Usuarios) es la entidad que utiliza Sabbatic para identificar las cuentas de los usuarios registrados en el sistema, estos usuarios pueden emplear la misma cuenta tanto para la web de Sabbatic como en su app móvil. Esta entidad permite las operaciones GET, POST, PUT, DELETE sobre las cuentas de usuarios creadas por el administrador de empresa. Las acciones POST, PUT y DELETE están solo disponibles para los administradores.

List all users

Listado de usuarios

Ejemplo de llamada al servicio List all users:

    # Llamada desde consola Linux
    curl --request GET "https://api.sabbatic.es/v2/users?json=%7B%7D"
        -H "session_id:YOURSESSIONID"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/users");
    var request = new RestRequest(Method.GET);
     request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {};
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/users?json=%7B%7D")
        .get()
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/users');
        $request->setMethod(HTTP_METH_GET);

        $request->setQueryData(array(
            'json' => '%7B%7D'
        ));

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'session_id' => 'YOURSESSIONID'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

Ejemplos de JSON de respuesta:

    {
        "entities_list": [
            {
                "user_id": 469,
                "username": "email1@sabbatic.es",
                "email": "email1@sabbatic.es",
                "company": {
                    "company_id": 289363,
                    "name": "Empresa usuario nombre"
                },
                "name": "Carlos",
                "surname": "García",
                "language": "es"
            },
            {
                "user_id": 594,
                "user_id_custom":"User_543",
                "username": "ivansanchez@gmail.com",
                "email": "ivansanchez@gmail.com",
                "company": {
                    "company_id": 289363,
                    "name": "Empresa usuario nombre"
                },
                "name": "Ivan",
                "surname": "Sanchez",
                "language": "es"
            },
            {
                "user_id": 742,
                "user_id_custom":"FerMartinez236",
                "username": "correocorporativo1@company.com",
                "email": "fernandomartinez@gmail.com",
                "company": {
                    "company_id": 289363,
                    "name": "Empresa usuario nombre"
                },
                "name": "Fernando",
                "surname": "Martinez",
                "language": "es"
            }
        ]
    }

HTTP Request

GET https://api.sabbatic.es/v2/users?json={}

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
user_id array<int> Identificador de usuario propio del sistema de Sabbatic. Ej. 594
username array<string> Nombre de la cuenta del usuario que utilizará para conectarse tanto en la app como a la web de Sabbatic o API.
user_id_custom array<string> Identificador personal de un usuario por empresa en el sistema propio del cliente. El par company_id,`user_id_custom determinan a un único usuario en Sabbatic.
company_id int Identificador de empresa a la que pertenece el usuario
email string Cuenta de correo electrónico donde se enviarán notificaciones e información adicional al usuario o donde recuperar su contraseña.
language string Prefijo que designa el idioma preferido del usuario, tanto en la app como en la web de Sabbatic. Ej.: es, en-gb.

Create a user

Creación de una nueva cuenta de usuario en Sabbatic.

Ejemplo de llamada al servicio "Create a user":

    curl --request POST "https://api.sabbatic.es/v2/users"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22email%22%3A%22email4%40sabbatic.es%22%2C%22name%22%3A%22Juan%22%2C%22surname%22%3A%22Perez%22%2C%22company_id%22%3A289363%7D"
    # Llamada desde consola Linux
    curl --request POST "https://api.sabbatic.es/v2/users"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22email%22%3A%22email4%40sabbatic.es%22%2C%22name%22%3A%22Juan%22%2C%22surname%22%3A%22Perez%22%2C%22company_id%22%3A289363%7D
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/users");
    var request = new RestRequest(Method.POST);
     request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        email = "user@email.com",
        name = "User",
        surname = "Test"
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22email%22%3A%22email4%40sabbatic.es%22%2C%22name%22%3A%22Juan%22%2C%22surname%22%3A%22Perez%22%2C%22company_id%22%3A289363%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/users")
        .post(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/users');
        $request->setMethod(HTTP_METH_POST);

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'Content-Type' => 'application/x-www-form-urlencoded',
            'session_id' => 'YOURSESSIONID'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"email":"email4@sabbatic.es","name":"Juan","surname":"Perez","company_id":289363}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

Ejemplo de JSON de respuesta:

    {
        "user_id": 4896,
        "username": "juanperez@gmail.com",
        "email": "juanperez@gmail.com",
        "company": {
            "company_id": 289363,
            "name": "Empresa usuario nombre"
        },
        "name": "Juan",
        "surname": "Perez"
    }

HTTP Request

POST https://api.sabbatic.es/v2/users

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de datos

* Obligatorios

Parámetro Tipo Descripción
email* string Correo electrónico asociado a la cuenta a crear, el username se generará a partir de este parámetro. Se utilizará para notificaciones al usuario.
company_id* int Identificador de la empresa asignada donde se creará el usuario.
user_id_custom string Identificador personal que identifica a un usuario en la empresa en el sistema del cliente. El par company_id, user_id_custom determinan a un único usuario en Sabbatic.
name* string Nombre del usuario.
surname* string Apellido/s del usuario.
language string Prefijo que designa el idioma preferido del usuario, tanto en la app como en la web de Sabbatic. Por defecto es español "es".

Edit a user

Edición de una cuenta de usuario en Sabbatic.

Ejemplo de llamada al servicio Edit a user:

    # Llamada desde consola Linux
    curl --request PUT "https://api.sabbatic.es/v2/users"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22user_id%22%3A869%2C%20%22surname%22%3A%22Martinez%22%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/users");
    var request = new RestRequest(Method.PUT);
     request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        user_id = 1234,
        name = "Testing"
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22user_id%22%3A869%2C%20%22surname%22%3A%22Martinez%22%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/users")
        .put(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/users');
        $request->setMethod(HTTP_METH_PUT);

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'Content-Type' => 'application/x-www-form-urlencoded',
            'session_id' => 'YOURSESSIONID'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"user_id":869, "surname":"Martinez"}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "Entities id parameter not valid or some elements do not exist"
    }

HTTP Request

PUT https://api.sabbatic.es/v2/users

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
user_id int Identificador del usuario que desea editar. Ej. 123
user_id_custom string Identificador personal que identifica a un usuario en la empresa en el sistema del cliente. El par company_id, user_id_custom determinan a un único usuario en Sabbatic.
email string Identificador de la cuenta.
company_id int Identificador de la empresa asignada donde se creará el usuario.
company_id_custom string Identificador personal que dentifica a una empresa en el sistema del cliente. El par company_id, company_id_custom determina a una única empresa en Sabbatic.

Parámetros de datos

Parámetro Tipo Descripción
new_email string Correo electrónico(username), se utilizará en el login tanto en la web, app móvil o API.
new_user_id_custom string Si se desea cambiar el user_id_custom del usuario, se debe utilizar este parámetro para diferenciarlo del que se ha utilizado para localizar e identificar el usuario.
new_company_id int Identificador de empresa donde se creará el grupo de usuarios.
new_company_id_custom string Identificador personal que identifica a una empresa en el sistema del cliente. El par company_id, company_id_custom determina a una única empresa en Sabbatic.
name string Nombre del usuario.
surname string Apellido/s del usuario.
language string Prefijo que designa el idioma preferido del usuario, tanto en la app como en la web de Sabbatic. Por defecto es español "es".
active boolean Estado del usuario que indica si está activo( true o false ).

Delete a user

Eliminación de una cuenta de usuario en Sabbatic.

Ejemplo de llamada al servicio Delete a user:

    # Llamada desde consola Linux
    curl --request DELETE "https://api.sabbatic.es/v2/users"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22user_id%22%3A869%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/users");
    var request = new RestRequest(Method.DELETE);
     request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        user_id = [
            1234,
            ...
        ]
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22user_id%22%3A869%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/users")
        .delete(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/users');
        $request->setMethod(HTTP_METH_DELETE);

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'Content-Type' => 'application/x-www-form-urlencoded',
            'session_id' => 'YOURSESSIONID'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"user_id":869}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "Entities id parameter not valid or some elements do not exist"
    }

HTTP Request

DELETE https://api.sabbatic.es/v2/users

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
user_id int Identificador de usuario que se desea eliminar. Ej. 594
username string Nombre de la cuenta del usuario que se desea eliminar. Ej. "user1@email1.com"
company_id int Identificador de la empresa del user_id_custom.
user_id_custom string Identificador personal que identifica a un usuario en la empresa. El par company_id,user_id_custom determinan a un único usuario en Sabbatic.

Update users

Update users proporciona la posibilidad de sincronizar el listado de usuarios de Sabbatic con el listado existente en los sistemas del cliente. Para ello, es necesario que la llamada incluya la totalidad de usuarios activos en dicho momento, dejando a Sabbatic las operaciones de alta, baja y modificaciones necesarias para sincronizar el listado existente. Debido a la considerable carga que puede soportar dicho servicio, la respuesta del mismo se realizará en el momento de validar la petición, antes de que se ejecute la operación. Una vez validada dicha petición, Sabbatic procederá a la ejecución de los cambios y sólo en caso de que dicha ejecución sea errónea se notificará al usuario a través de un e-mail.

Este servicio permite únicamente una llamada simultánea.

Ejemplo de llamada al servicio Users update:

    # Llamada desde consola Linux
    curl --request POST "https://api.sabbatic.es/v2/users_update"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22companies%22%3A%5B%7B%22company_id%22%3A%22163523%22%2C%22users%22%3A%5B%7B%22user_id_custom%22%3A%2271102%22%2C%22name%22%3A%22NameExample1%22%2C%22surname%22%3A%22SurnameExample1%22%2C%22email%22%3A%22example1%40gmail.es%22%7D%2C%7B%22user_id%22%3A%22AlphaNumeric2%22%2C%22name%22%3A%22NameExample2%22%2C%22surname%22%3A%22SurnameExample2%22%2C%22email%22%3A%22example2%40gmail.es%22%2C%22admin%22%3A1%7D%2C%7B%22user_id%22%3A%22AlphaNumeric3%22%2C%22name%22%3A%22NameExample3%22%2C%22surname%22%3A%22SurnameExample3%22%2C%22email%22%3A%22example3%40gmail.es%22%7D%5D%7D%5D%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/users_update");
    var request = new RestRequest(Method.POST);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        companies = [
            {
                company_id = 1234,
                users = [
                    {
                        user_id = 1234,
                        name = "Test3"
                    },
                    ...
                ]
            },
            ...
        ]
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22companies%22%3A%5B%7B%22company_id%22%3A%22163523%22%2C%22users%22%3A%5B%7B%22user_id_custom%22%3A%2271102%22%2C%22name%22%3A%22NameExample1%22%2C%22surname%22%3A%22SurnameExample1%22%2C%22email%22%3A%22example1%40gmail.es%22%7D%2C%7B%22user_id%22%3A%22AlphaNumeric2%22%2C%22name%22%3A%22NameExample2%22%2C%22surname%22%3A%22SurnameExample2%22%2C%22email%22%3A%22example2%40gmail.es%22%2C%22admin%22%3A1%7D%2C%7B%22user_id%22%3A%22AlphaNumeric3%22%2C%22name%22%3A%22NameExample3%22%2C%22surname%22%3A%22SurnameExample3%22%2C%22email%22%3A%22example3%40gmail.es%22%7D%5D%7D%5D%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/users_update")
        .post(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/users_update');
        $request->setMethod(HTTP_METH_POST);

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'Content-Type' => 'application/x-www-form-urlencoded',
            'session_id' => 'YOURSESSIONID'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
        'json' => '{"companies":[{"company_id":"163523","users":[{"user_id_custom":"71102","name":"NameExample1","surname":"SurnameExample1","email":"example1@gmail.es"},{"user_id":"AlphaNumeric2","name":"NameExample2","surname":"SurnameExample2","email":"example2@gmail.es","admin":1},{"user_id":"AlphaNumeric3","name":"NameExample3","surname":"SurnameExample3","email":"example3@gmail.es"}]}]}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "The parameter 'company_id' is not valid or does not exists"
    }

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "The parameter 'company_id' is not valid or does not exists"
    }

Ejemplo de un json de mantenimiento de usuarios:

    {
        "companies":[
            {
                "company_id":"163523",
                "users":[
                    {
                    "user_id_custom":"71102",
                    "name":"NameExample1",
                    "surname":"SurnameExample1",
                    "email":"example1@gmail.es"
                    },
                    {
                    "user_id":"AlphaNumeric2",
                    "name":"NameExample2",
                    "surname":"SurnameExample2",
                    "email":"example2@gmail.es",
                    "admin":1
                    },
                    {
                    "user_id":"AlphaNumeric3",
                    "name":"NameExample3",
                    "surname":"SurnameExample3",
                    "email":"example3@gmail.es"
                    }
                ]
            },
            {
                "company_id_custom":"MN-561",
                "users":[
                    {
                    "user_id_custom":"FWE-423",
                    "name":"NameExample4",
                    "surname":"SurnameExample4",
                    "email":"example4@gmail.es"
                    }
                ]
            }
        ]
    }

HTTP Request

POST https://api.sabbatic.es/v2/users_update

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de datos

Parámetro Tipo Descripción
companies array<company> Array de objetos company. Identifica la lista de empresas a las que el integrador tiene acceso. Si el integrador solo tiene una hay que incluirlo igualmente. Todos los usuarios deben pertenecer a alguna empresa para poder estar integrados en Sabbatic.

Groups

La entidad Groups (Grupos) es la entidad que utiliza Sabbatic para agrupar uno o varios usuarios en un mismo conjunto. De tal manera que se les puede asignar permisos sobre categorías o etiquetas de una manera más sencilla que tener que ir uno a uno. Estos usuarios pueden pertenecer a una o varias empresas segun la configuración del usuario integrador. Esta entidad permite las operaciones GET, POST, PUT, DELETE sobre los grupos de usuarios de una o varias empresas.

List all groups

Listado de grupos de usuarios

Ejemplo de llamada al servicio List all groups:

    # Llamada desde consola Linux
    curl --request GET "https://api.sabbatic.es/v2/groups?json=%7B%7D"
        -H "session_id:YOURSESSIONID"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/groups");
    var request = new RestRequest(Method.GET);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {};
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/groups?json=%7B%7D")
        .get()
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/groups');
        $request->setMethod(HTTP_METH_GET);

        $request->setQueryData(array(
            'json' => '%7B%7D'
        ));

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'session_id' => 'YOURSESSIONID'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

Ejemplos de JSON de respuesta:

    {
        "entities_list": [
        {
            "group_id": 389818,
            "name": "Contabilidad",
            "active": true,
            "company": {
                "company_id": 276636,
                "company_id_custom": "Id Central",
                "name": "Empresa central",
                "vat_id": "A36598523",
                "name": "Empresa Usuario Nombre",
                "postal_code": 28001,
                "city": "MADRID",
                "address": "Plaza Arroyo, Nº 31",
                "province": "MADRID",
                "country": "ESP"
            },
            "users": [
            {
                "user_id": 469,
                "username": "email1@sabbatic.es",
                "email": "email1@sabbatic.es",
                "company": {
                    "company_id": 289363,
                    "name": "Empresa usuario nombre"
                },
                "name": "Carlos",
                "surname": "García",
                "language": "es"
            },
            {
                "user_id": 594,
                "user_id_custom":"User_543",
                "username": "ivansanchez@gmail.com",
                "email": "ivansanchez@gmail.com",
                "company": {
                    "company_id": 289363,
                    "name": "Empresa usuario nombre"
                },
                "name": "Ivan",
                "surname": "Sanchez",
                "language": "es"
            }
            ]
        }
        ]
    }

HTTP Request

GET https://api.sabbatic.es/v2/groups?json={}

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
group_id array<int> Identificadores de los grupos de usuarios. Puede ser múltiple. Ej. [ 100101,100102,100103,... ]
group_id_custom array<string> Array de cadena de texto libre que designa el identificador personal de grupos de usuario en el sistema del cliente.
company_id int Identificador de empresa.
company_id_custom string Identificador personal que identifica a una empresa en el sistema del cliente. El par company_id, company_id_custom determina a una única empresa en Sabbatic.
name string El nombre por el cual se conoce al grupo de usuarios.
active boolean Filtro de grupos estado activo de grupos (true o false).

Create a group

Envío de un nuevo grupo de usuarios a Sabbatic.

Ejemplo de llamada al servicio Create a group:

    # Llamada desde consola Linux
    curl --request POST "https://api.sabbatic.es/v2/groups"
    -H "session_id:YOURSESSIONID"
    --data "json=%7B%22name%22%3A%22Marketing%22%2C%22group_id_custom%22%3A%22Markt022%22%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/groups");
    var request = new RestRequest(Method.POST);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        name = "Marketing"
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22name%22%3A%22Marketing%22%2C%22group_id_custom%22%3A%22Markt022%22%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/groups")
        .post(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php

    $request = new HttpRequest();
    $request->setUrl('https://api.sabbatic.es/v2/groups');
    $request->setMethod(HTTP_METH_POST);

    $request->setHeaders(array(
        'cache-control' => 'no-cache',
        'Content-Type' => 'application/x-www-form-urlencoded',
        'session_id' => 'YOURSESSIONID'
    ));

    $request->setContentType('application/x-www-form-urlencoded');
    $request->setPostFields(array(
        'json' => '{"name":"Marketing","group_id_custom":"Markt022"}'
    ));

    try {
        $response = $request->send();
        echo $response->getBody();
    } catch (HttpException $ex) {
        echo $ex;
    }
    ?>

Ejemplo de JSON de respuesta:

    {
        "group_id": 311402,
        "group_id_custom": "Markt022",
        "name": "Marketing",
        "active": true,
        "company": {
            "company_id": 289363,
            "name": "Empresa usuario nombre"
        }
    }

HTTP Request

POST https://api.sabbatic.es/v2/groups

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de datos

*Obligatorios

Parámetro Tipo Descripción
name* string El nombre por el cual se conoce al grupo de usuarios.
active array<string> Si el grupo de usuarios está activo o no ( true o false ). Los grupos de usuarios que tengan false en este parámetro no podrán ser utilizados ni serán visibles para los usuarios.
company_id int Identificador de empresa donde se creará el grupo de usuarios.
company_id_custom string Identificador personal que identifica a una empresa en el sistema del cliente. El par company_id, company_id_custom determina a una única empresa en Sabbatic.
group_id_custom array<string> Array de cadena de texto libre que designa la identificación personal de los grupos de usuario en el sistema del cliente.

Edit a group

Edición de un grupo de usuarios en Sabbatic.

Ejemplo de llamada al servicio Edit a group:

    # Llamada desde consola Linux
    curl --request PUT "https://api.sabbatic.es/v2/groups"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22group_id%22%3A%5B289203%5D%2C%20%22name%22%3A%22Nuevo%20titulo%22%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/groups");
    var request = new RestRequest(Method.PUT);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        group_id = 1234,
        name = "Marketing - Todos"
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22group_id%22%3A%5B289203%5D%2C%20%22name%22%3A%22Nuevo%20titulo%22%7D");
    Request request = new Request.Builder()
    .url("https://api.sabbatic.es/v2/groups")
    .put(body)
    .addHeader("session_id", "YOURSESSIONID")
    .addHeader("Content-Type", "application/x-www-form-urlencoded")
    .addHeader("cache-control", "no-cache")
    .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/groups');
        $request->setMethod(HTTP_METH_PUT);

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'Content-Type' => 'application/x-www-form-urlencoded',
            'session_id' => 'YOURSESSIONID'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"group_id":[289203], "name":"Nuevo titulo"}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "Entities id parameter not valid or some elements do not exist"
    }

HTTP Request

PUT https://api.sabbatic.es/v2/groups

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
group_id array<int> Identificadores de los grupos de usuarios que se desea editar. Puede ser múltiple. Ej. [100101,100102,100103,...]
group_id_custom array<string> Array de cadena de texto libre que designa la identificación de los grupos de usuario en el sistema del cliente, se puede editar varias grupos en una sola llamada.
company_id int Identificador de empresa donde se está tratando de editar el grupo de usuarios.
company_id_custom string Identificador personal que identifica a una empresa en el sistema del cliente. El par company_id, company_id_custom determina a una única empresa en Sabbatic.

Parámetros de datos

Parámetro Tipo Descripción
name string El nombre por el cual se conoce al grupo de usuarios.
active boolean Estado de el grupo de usuarios que indica si está activo( true o false ). Los grupos de usuarios que tengan false en este parámetro no podrán ser utilizados ni serán visibles para los usuarios.
users array<user> Array de objetos user que van a pertenecer al grupo.
group_manager_users array<user> Array de objetos user que van a ser supervisores del grupo.

Delete a group

Eliminación de un grupo de usuarios en Sabbatic.

Ejemplo de llamada al servicio Delete a group:

    # Llamada desde consola Linux
    curl --request DELETE "https://api.sabbatic.es/v2/groups"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22group_id%22%3A%5B284349%5D%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/groups");
    var request = new RestRequest(Method.DELETE);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        group_id = new Int[]{
            1234
        }
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22group_id%22%3A%5B284349%5D%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/groups")
        .delete(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
// Cliente HttpRequest, según la versión el código puede variar
<?php
    $request = new HttpRequest();
    $request->setUrl('https://api.sabbatic.es/v2/groups');
    $request->setMethod(HTTP_METH_DELETE);
    $request->setHeaders(array(
        'cache-control' => 'no-cache',
        'Content-Type' => 'application/x-www-form-urlencoded',
        'session_id' => 'YOURSESSIONID'
    ));

    $request->setContentType('application/x-www-form-urlencoded');
    $request->setPostFields(array(
        'json' => '{"group_id":[284349]}'
    ));

    try {
        $response = $request->send();
        echo $response->getBody();
    } catch (HttpException $ex) {
        echo $ex;
    }
?>

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "Entities id parameter not valid or some elements do not exist"
    }

HTTP Request

DELETE https://api.sabbatic.es/v2/groups

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
group_id array<int> Identificadores de los grupos de usuarios. Puede ser múltiple. Ej. [100101,100102,100103,...]
group_id_custom array<string> Array de cadena de texto libre que identifica los grupos de usuario en el sistema del cliente.
company_id int Identificador de empresa.
company_id_custom string Identificador personal que identifica a una empresa en el sistema del cliente. El par company_id, company_id_custom determina a una única empresa en Sabbatic.

Update groups

Update groups proporciona la posibilidad de sincronizar el listado de grupos de usuarios de Sabbatic con el listado existente en los sistemas del cliente. Para ello, es necesario que la llamada incluya la totalidad de grupos de usuarios activos en dicho momento, dejando a Sabbatic las operaciones de alta, baja y modificaciones necesarias para sincronizar el listado. Debido a la considerable carga que puede soportar dicho servicio, la respuesta del mismo se realizará en el momento de validar la petición, antes de que se ejecute la operación. Una vez validada dicha petición, Sabbatic procederá a la ejecución de los cambios y sólo en caso de que dicha ejecución sea errónea se notificará al usuario a través de un e-mail.

Este servicio permite únicamente una llamada simultánea.

Ejemplo de llamada al servicio Groups update:

    # Llamada desde consola Linux
    curl --request POST "https://api.sabbatic.es/v2/groups_update"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22groups%22%3A%5B%7B%22group_id%22%3A589637%2C%22name%22%3A%22SAT%20Service%22%2C%22company_id%22%3A269632%2C%22users%22%3A%5B%7B%22user_id%22%3A4257%7D%2C%7B%22user_id%22%3A2369%7D%5D%2C%22group_manager_users%22%3A%5B%7B%22user_id%22%3A4257%7D%2C%7B%22user_id%22%3A2369%7D%5D%2C%22autoconfirm_users%22%3A%5B%7B%22user_id%22%3A4257%7D%5D%7D%2C%7B%22group_id_custom%22%3A%22Company%20Custom%20ID%22%2C%22name%22%3A%22Development%22%2C%22users%22%3A%5B%7B%22user_id%22%3A4257%7D%5D%7D%5D%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/groups_update");
    var request = new RestRequest(Method.POST);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        groups = [
            {
                group_id = 1234,
                name = "Mark - All"
            },
            ...
        ]
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22groups%22%3A%5B%7B%22group_id%22%3A589637%2C%22name%22%3A%22SAT%20Service%22%2C%22company_id%22%3A269632%2C%22users%22%3A%5B%7B%22user_id%22%3A4257%7D%2C%7B%22user_id%22%3A2369%7D%5D%2C%22group_manager_users%22%3A%5B%7B%22user_id%22%3A4257%7D%2C%7B%22user_id%22%3A2369%7D%5D%2C%22autoconfirm_users%22%3A%5B%7B%22user_id%22%3A4257%7D%5D%7D%2C%7B%22group_id_custom%22%3A%22Company%20Custom%20ID%22%2C%22name%22%3A%22Development%22%2C%22users%22%3A%5B%7B%22user_id%22%3A4257%7D%5D%7D%5D%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/groups_update")
        .post(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/groups_update');
        $request->setMethod(HTTP_METH_POST);

        $request->setHeaders(array(
        'cache-control' => 'no-cache',
        'Content-Type' => 'application/x-www-form-urlencoded',
        'session_id' => 'YOURSESSIONID'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"groups":[{"group_id":589637,"name":"SAT Service","company_id":269632,"users":[{"user_id":4257},{"user_id":2369}],"group_manager_users":[{"user_id":4257},{"user_id":2369}],"autoconfirm_users":[{"user_id":4257}]},{"group_id_custom":"Company Custom ID","name":"Development","users":[{"user_id":4257}]}]}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "The parameter 'user_id' is not valid or does not exists"
    }

Ejemplo de un json de mantenimiento de usuarios:

    {
        "groups":[
            {
                "group_id":589637,
                "name":"SAT Service",
                "company_id":269632,
                "users":[
                    {
                    "user_id":4257
                    },
                    {
                    "user_id":2369
                    }
                ],
                "group_manager_users":[
                    {
                    "user_id":4257
                    },
                    {
                    "user_id":2369
                    }
                ],
                "autoconfirm_users":[
                    {
                    "user_id":4257
                    }
                ]
            },
            {
                "group_id_custom":"Company Custom ID",
                "name":"Development",
                "users":[
                    {
                    "user_id":4257
                    }
                ]
            }
        ]
    }

HTTP Request

POST https://api.sabbatic.es/v2/groups_update

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de datos

Parámetro Tipo Descripción
groups array<group> Array de objetos group. Identifica y determina la lista de grupos de usuarios del integrador. Los usuarios a asignar a cada grupo deben estar creados previamente en el sistema Sabbatic.

Companies

La entidad Companies (Empresas) es la entidad que utiliza Sabbatic para identificar las empresas a las que pertenecen los usuarios registrados. Un administrador puede tener acceso a una única empresa o a varias según su configuración. Sabbatic permite integrar varias empresas y gestionarlas desde una única cuenta de usuario que tenga privilegios de administrador. Si desea conocer más información sobre esta funcionalidad, por favor contacte con Sabbatic. Esta entidad permite las operaciones GET,POST,'PUT' Y 'DELETE'.

List all companies

Listado de empresas

Ejemplo de llamada al servicio List all companies:

    # Llamada desde consola Linux
    curl --request GET "https://api.sabbatic.es/v2/companies?json=%7B%7D"
        -H "session_id:YOURSESSIONID"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/companies");
    var request = new RestRequest(Method.GET);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {};
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/companies?json=%7B%7D")
        .get()
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php

        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/companies');
        $request->setMethod(HTTP_METH_GET);

        $request->setQueryData(array(
            'json' => '%7B%7D'
        ));

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'session_id' => 'YOURSESSIONID'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

Ejemplos de JSON de respuesta:

    {
        "entities_list": [
        {
            "company_id": 276636,
            "company_id_custom": "Id Central",
            "name": "Empresa central",
            "vat_id": "A36598523",
            "name": "Empresa Usuario Nombre",
            "postal_code": 28001,
            "city": "MADRID",
            "address": "Plaza Arroyo, Nº 31",
            "province": "MADRID",
            "country": "ESP",
            "type": "matriz"
        },
        {
            "company_id": 223569,
            "company_id_custom": "Id Filial",
            "name": "Empresa filial 1",
            "vat_id": "B23652369",
            "name": "Otro nombre de empresa usuario",
            "postal_code": 08007,
            "city": "BARCELONA",
            "address": "Gran Via, Nº 45",
            "province": "BARCELONA",
            "country": "ESP",
            "type": "filial",
            "parent": {
                "company_id": 276636,
                "company_id_custom": "Id Central",
                "name": "Empresa central",
                "vat_id": "A36598523",
                "name": "Empresa Usuario Nombre",
                "postal_code": 28001,
                "city": "MADRID",
                "address": "Plaza Arroyo, Nº 31",
                "province": "MADRID",
                "country": "ESP",
                "type": "matriz"
            }
        },
        {
            "company_id": 223569,
            "company_id_custom": "Id Integrada",
            "name": "Empresa integrada 1",
            "vat_id": "B123456",
            "name": "Otro nombre de empresa usuario",
            "postal_code": 08007,
            "city": "BARCELONA",
            "address": "Gran Via, Nº 45",
            "province": "BARCELONA",
            "country": "ESP",
            "type": "integrada",
            "integrator": {
                "company_id": 276636,
                "company_id_custom": "Id Central",
                "name": "Empresa central",
                "vat_id": "A36598523",
                "name": "Empresa Usuario Nombre",
                "postal_code": 28001,
                "city": "MADRID",
                "address": "Plaza Arroyo, Nº 31",
                "province": "MADRID",
                "country": "ESP",
                "type": "matriz"
            }
        }
        ]
    }

HTTP Request

GET https://api.sabbatic.es/v2/companies?json={}

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
company_id int Identificador de empresa opcional por la que se desea filtrar, si el parámetro no se proporciona se listará todas a las que tiene acceso el usuario.
company_id_custom string Identificador personal que identifica a una empresa en el sistema del cliente. El par company_id, company_id_custom determina a una única empresa en Sabbatic.

Create a company

Creación de una nueva empresa en Sabbatic. Esta acción solo puede realizarla un administrador de empresa de una empresa matrix o integradora. Dicha nueva empresa pasará a ser parte del grupo de empresas que administra el usuario como empresa filial o integrada, las cuales pueden crear sus propios usuarios, categorías y etiquetas como la empresa original. Las empresas integradoras, solo podrán crear empresas integradas. No podrán generar filiales. Un administrador de empresa de una de estas empresas filiales o integradas no puede a su vez crear más empresas.

Ejemplo de llamada al servicio Create a company:

    # Llamada desde consola Linux
    curl --request POST "https://api.sabbatic.es/v2/companies"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22vat_id%22%3A%22B223412312%22%2C%22name%22%3A%22Testing%20Company%22%2C%22company_id_custom%22%3A%22CustomID%22%2C%22address%22%3A%22CustomAddress%22%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/companies");
    var request = new RestRequest(Method.POST);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        vat_id = "B223412312",
        name = "TestComp"
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22vat_id%22%3A%22B223412312%22%2C%22name%22%3A%22Testing%20Company%22%2C%22company_id_custom%22%3A%22CustomID%22%2C%22address%22%3A%22CustomAddress%22%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/companies")
        .post(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/companies');
        $request->setMethod(HTTP_METH_POST);

        $request->setHeaders(array(
        'cache-control' => 'no-cache',
        'Content-Type' => 'application/x-www-form-urlencoded',
        'session_id' => 'YOURSESSIONID'
        ));

        $request->setContentType('application/x-www-form-urlencoded');
        $request->setPostFields(array(
            'json' => '{"vat_id":"B223412312","name":"Testing Company","company_id_custom":"CustomID","address":"CustomAddress"}'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

Ejemplo de JSON de respuesta:

    {
        "company_id": 489623,
        "company_id_custom": "CustomID",
        "vat_id": "B22341231",
        "name": "Testing Company",
        "address": "CustomAddress"
    }

HTTP Request

POST https://api.sabbatic.es/v2/companies

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de datos

*Obligatorios

Parámetro Tipo Descripción
vat_id* string Código o número de identificación fiscal de la empresa donde reside. En el caso de España se corresponde al NIF.
company_id_custom string Identificador propio y personalizable que identifica a una empresa en el sistema propio del cliente.
name* string Nombre o razón social de la empresa.
address string Dirección física de la empresa, calle, avenida, número o piso. Campo de texto libre.

Edit a company

Edición de una empresa en Sabbatic.

Ejemplo de llamada al servicio "Edit a company":

    # Llamada desde consola Linux
    curl --request PUT "https://api.sabbatic.es/v2/companies"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22company_id%22%3A289203%2C%22new_company_id_custom%22%3A%22NuevoIdCustom%22%2C%22name%22%3A%22Nuevo%20titulo%22%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/companies");
    var request = new RestRequest(Method.PUT);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {
        company_id = 1234,
        name = "TestComp - 2"
    };
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.create(mediaType, "json=%7B%22company_id%22%3A289203%2C%22new_company_id_custom%22%3A%22NuevoIdCustom%22%2C%22name%22%3A%22Nuevo%20titulo%22%7D");
    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/companies")
        .put(body)
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("Content-Type", "application/x-www-form-urlencoded")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php

    $request = new HttpRequest();
    $request->setUrl('https://api.sabbatic.es/v2/companies');
    $request->setMethod(HTTP_METH_PUT);

    $request->setHeaders(array(
        'cache-control' => 'no-cache',
        'Content-Type' => 'application/x-www-form-urlencoded',
        'session_id' => 'YOURSESSIONID'
    ));

    $request->setContentType('application/x-www-form-urlencoded');
    $request->setPostFields(array(
        'json' => '{"company_id":289203,"new_company_id_custom":"NuevoIdCustom","name":"Nuevo titulo"}'
    ));

    try {
        $response = $request->send();
        echo $response->getBody();
    } catch (HttpException $ex) {
        echo $ex;
    }
    ?>

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "Entities id parameter not valid or some elements do not exist"
    }

HTTP Request

PUT https://api.sabbatic.es/v2/companies

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
company_id int Identificador de empresa que se está tratando de editar.
company_id_custom string Identificador propio y personalizable que identifica a una empresa en el sistema propio del cliente. El par "company_id","company_id_custom" determina a una única empresa en Sabbatic.

Parámetros de datos

Parámetro Tipo Descripción
vat_id string Código que identifica fiscalmente a una empresa. En España es el parámetro correspondiente al NIF.
name string Editará el nombre por el cual se conoce a la empresa.
new_company_id_custom string Nuevo identificador propio de la empresa cliente que se trata de editar. El parámetro 'company_id_custom' puede utilizarse para seleccionar la empresa a editar y el parámetro 'new_company_id_custom' es el nuevo valor que se desea asignar.
address string Texto libre para la dirección física de la empresa, avenida, calle, paseo, etc... seguido del número o piso.

Expense Types

La entidad Expense Types (Tipos de Gasto) es la entidad que utiliza Sabbatic para englobar de una forma abstracta los diversos tipos de gasto que pueda tener una empresa. Este modelo flexible permite personalizar cada empresa para que muestre y gestiona únicamente los tipos de gasto que vaya a utilizar. Ejemplos de tipos de gasto son Tickets, Facturas, Kilometrajes, Dietas, Pernoctaciones, etc.. Esta entidad permite las operaciones GET, PUT sobre los tipos de gasto gestionados por el administrador de empresa. La acción PUT está solo disponible para los administradores.

List all expense types

Listado de tipos de gasto por empresas

Ejemplo de llamada al servicio List all expense types:

    # Llamada desde consola Linux
    curl --request GET "https://api.sabbatic.es/v2/expensetypes?json=%7B%7D"
        -H "session_id:YOURSESSIONID"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/expensetypes");
    var request = new RestRequest(Method.GET);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {};
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    Request request = new Request.Builder()
    .url("https://api.sabbatic.es/v2/expensetypes?json=%7B%7D")
    .get()
    .addHeader("session_id", "YOURSESSIONID")
    .addHeader("cache-control", "no-cache")
    .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/expensetypes');
        $request->setMethod(HTTP_METH_GET);

        $request->setQueryData(array(
            'json' => '%7B%7D'
        ));

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'session_id' => 'YOURSESSIONID'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

Ejemplos de JSON de respuesta:

    {
        "entities_list": [
            {
                "expense_type_id": 1,
                "name": "Ticket",
                "measure_unit": "Unidad",
                "image": true,
                "custom_amounts": true,
                "active": true
            },
            {
                "expense_type_id": 2,
                "name": "Factura",
                "measure_unit": "Unidad",
                "image": true,
                "custom_amounts": true,
                "active": false
            },
            {
                "expense_type_id": 3,
                "name": "Kilometraje",
                "measure_unit": "Km",
                "image": false,
                "custom_amounts": true,
                "active": true
            },
            {
                "expense_type_id": 4,
                "name": "Dieta",
                "measure_unit": "Dieta(s)",
                "image": true,
                "custom_amounts": true,
                "active": true
            },
            {
                "expense_type_id": 5,
                "name": "Pernoctación",
                "measure_unit": "Noche(s)",
                "image": true,
                "custom_amounts": true,
                "active": true
            }
        ]
    }

HTTP Request

GET https://api.sabbatic.es/v2/expensetypes?json={}

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
company_id int Identificador de empresa de la que deseamos listar sus tipos de gasto.

Edit an expense type

Edición de un tipo de gasto para un empresa en Sabbatic.

Ejemplo de llamada al servicio Edit an expense type:

    # Llamada desde consola Linux
    curl --request PUT "https://api.sabbatic.es/v2/expensetypes"
        -H "session_id:YOURSESSIONID"
        --data "json=%7B%22expense_type_id%22%3A5%2C%20%22active%22%3Afalse%7D"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/expensetypes");
    var request = new RestRequest(Method.PUT);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {};
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); RequestBody body = RequestBody.create(mediaType, "json=%7B%22expense_type_id%22%3A5%2C%20%22active%22%3Afalse%7D"); Request request = new Request.Builder() .url("https://api.sabbatic.es/v2/expensetypes") .put(body) .addHeader("session_id", "YOURSESSIONID") .addHeader("Content-Type", "application/x-www-form-urlencoded") .addHeader("cache-control", "no-cache") .build();

Response response = client.newCall(request).execute();

    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/expensetypes');
        $request->setMethod(HTTP_METH_PUT);

$request->setHeaders(array( 'cache-control' => 'no-cache', 'Content-Type' => 'application/x-www-form-urlencoded', 'session_id' => 'YOURSESSIONID' ));

$request->setContentType('application/x-www-form-urlencoded'); $request->setPostFields(array( 'json' => '{"expense_type_id":5, "active":false}' ));

try { $response = $request->send(); echo $response->getBody(); } catch (HttpException $ex) { echo $ex; } ?>

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": "Entities id parameter not valid or some elements do not exist"
    }

HTTP Request

PUT https://api.sabbatic.es/v2/expensetypes

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
expense_type_id* int Identificador de cada tipo de gasto en una empresa
company_id int Identificador de la empresa asignada donde se editará el tipo de gasto.
company_id_custom string Identificador personal de una empresa en el sistema del cliente. El par company_id, company_id_custom determina a una única empresa en Sabbatic.

Parámetros de datos

*Obligatorios

Parámetro Tipo Descripción
image boolean true o false para decidir si ese tipo de gasto debe llevar una imagen adjunta o no.
active boolean true o false para decidir si la categoría está actualmente activa y por tanto los usuarios pueden seguir introduciendo gastos de dicha categoría.

Countries

La entidad Countries (Paises) es la entidad que utiliza Sabbatic para identificar los paises y su relación con la divisa oficial de dicho país, el país-divisa por defecto para todos los gastos es España-Euro, pero si se desea especificar otro país y divisa habrá que referenciarlos con los identificadores que proporciona Sabbatic. El sistema asume que un país solo tiene una única divisa oficial. Esta entidad permite las operaciones GET para listar información de paises y sus divisas correspondientes.

List all countries

Listado de paises-divisas.

Ejemplo de llamada al servicio List all countries:

    # Llamada desde consola Linux
    curl --request GET "https://api.sabbatic.es/v2/countries?json=%7B%7D"
        -H "session_id:YOURSESSIONID"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/countries");
    var request = new RestRequest(Method.GET);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {};
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/countries?json=%7B%7D")
        .get()
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php

        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/countries');
        $request->setMethod(HTTP_METH_GET);

        $request->setQueryData(array(
            'json' => '%7B%7D'
        ));

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'session_id' => 'YOURSESSIONID'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

Ejemplos de JSON de respuesta:

    {
        "entities_list": [
            {
                "country_id": 1,
                "name": "Andorra",
                "acronym": "AND",
                "official_currency": {
                    "currency_id": 1,
                    "name": "Euro",
                    "acronym": "EUR"
                    }
            },
            {
                "country_id": 2,
                "name": "Emiratos Árabes Unidos",
                "acronym": "ARE",
                "official_currency": {
                    "currency_id": 2,
                    "name": "Dirham de los Emiratos Árabes Unidos",
                    "acronym": "AED"
                    }
            },
            {
                "country_id": 3,
                "name": "Afganistán",
                "acronym": "AFG",
                "official_currency": {
                    "currency_id": 3,
                    "name": "Afgani afgano",
                    "acronym": "AFN"
                    }
            },
            ......
            ......
            ......
        ]
    }

HTTP Request

GET https://api.sabbatic.es/v2/countries?json={}

El campo acronym utiliza el estandar ISO 3166;

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción

Currencies

La entidad Currencies (Divisas) es la entidad que utiliza Sabbatic para identificar las distintas divisas introducidas en el sistema asi como sus acronimos. El sistema asume que un país solo tiene una única divisa oficial, pero una divisa oficial puede existir en varios paises. Esta entidad permite las operaciones GET para listar información de divisas.

List all currencies

Listado de divisas

Ejemplo de llamada al servicio List all currencies:

    # Llamada desde consola Linux
    curl --request GET "https://api.sabbatic.es/v2/currencies?json=%7B%7D"
        -H "session_id:YOURSESSIONID"
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/currencies");
    var request = new RestRequest(Method.GET);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddHeader("session_id", "YOURSESSIONID");
    var json = new {};
    var jsonText = JsonConvert.SerializeObject( json, Formatting.None );
    request.AddParameter("json", jsonText);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient();

    Request request = new Request.Builder()
        .url("https://api.sabbatic.es/v2/currencies?json=%7B%7D")
        .get()
        .addHeader("session_id", "YOURSESSIONID")
        .addHeader("cache-control", "no-cache")
        .build();

    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        $request = new HttpRequest();
        $request->setUrl('https://api.sabbatic.es/v2/currencies');
        $request->setMethod(HTTP_METH_GET);

        $request->setQueryData(array(
            'json' => '%7B%7D'
        ));

        $request->setHeaders(array(
            'cache-control' => 'no-cache',
            'session_id' => 'YOURSESSIONID'
        ));

        try {
            $response = $request->send();
            echo $response->getBody();
        } catch (HttpException $ex) {
            echo $ex;
        }
    ?>

Ejemplos de JSON de respuesta:

    {
        "entities_list": [
            {
            "currency_id": 1,
            "name": "Euro",
            "acronym": "EUR"
            },
            {
                "currency_id": 2,
                "name": "Dirham de los Emiratos Árabes Unidos",
                "acronym": "AED"
            },
            {
                "currency_id": 3,
                "name": "Afgani afgano",
                "acronym": "AFN"
            },
            .....
            .....
            .....
        ]
    }

HTTP Request

GET https://api.sabbatic.es/v2/currencies?json={}

El campo acronym utiliza el estandar ISO 4217.

HEADER Parámetros

Parámetro Descripción
content-type application/x-www-form-urlencoded
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción

Attachment

La entidad Attachment (Adjunto) es la entidad que utiliza Sabbatic para representar un archivo adjuntado a un gasto. Esta entidad permite las operaciones GET, POST, PUT, DELETE sobre el adjunto de un gasto.

Get an attachment

Recuperación de un adjunto

Ejemplo de llamada al servicio get attachment:

    # Llamada desde consola Linux
    curl --location --request GET 'https://api.sabbatic.es/v2/attachment' \
    --header 'session_id: YOURSESSIONID' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "id": ATTACHMENTID
    }'
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/attachment");
    var request = new RestRequest(Method.GET);
    request.AddHeader("session_id", "YOURSESSIONID");
    request.AddHeader("Content-Type", "application/json");
    request.AddParameter("application/json", "{\n    \"id\": ATTACHMENTID\n}",  ParameterType.RequestBody);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient().newBuilder()
    .build();
    Request request = new Request.Builder()
    .url("https://api.sabbatic.es/v2/attachment")
    .method("GET", null)
    .addHeader("session_id", "YOURSESSIONID")
    .addHeader("Content-Type", "application/json")
    .build();
    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        require_once 'HTTP/Request2.php';
        $request = new HTTP_Request2();
        $request->setUrl('https://api.sabbatic.es/v2/attachment');
        $request->setMethod(HTTP_Request2::METHOD_GET);
        $request->setConfig(array(
        'follow_redirects' => TRUE
        ));
        $request->setHeader(array(
        'session_id' => 'YOURSESSIONID',
        'Content-Type' => 'application/json'
        ));
        $request->setBody('{\n    "id": ATTACHMENTID\n}');
        try {
        $response = $request->send();
        if ($response->getStatus() == 200) {
            echo $response->getBody();
        }
        else {
            echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
            $response->getReasonPhrase();
        }
        }
        catch(HTTP_Request2_Exception $e) {
        echo 'Error: ' . $e->getMessage();
        }
    ?>

Ejemplos de JSON de respuesta:

    {
        "id": 3027816,
        "type": {
            "id": 5,
            "name": "test"
        },
        "url": "https://app.sabbatic.es/es/system/files/attachments/{{entity_id}}/realPNG.png?token=fea84f3351e265de8582774c4c03924f00e2179fe4970af763377b4d293504c5"
    }

HTTP Request

GET https://api.sabbatic.es/v2/attachment

HEADER Parámetros

Parámetro Descripción
content-type application/json
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

*Obligatorios

Parámetro Tipo Descripción
id* int Identificador del adjunto del gasto

Create an attachment

Envío de un nuevo adjunto a un gasto de Sabbatic.

Ejemplo de llamada al servicio Create an attachment:

    # Llamada desde consola Linux
    curl --location --request POST 'https://api.sabbatic.es/v2/attachment' \
    --header 'session_id: YOURSESSIONID' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "file": {{attachment_file_base64_content}},
        "type_id": {{attachment_type_id}},
        "entity_id": {{entity_id}},
        "name": {{attachment_file_name}}
    }'
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/attachment");
    var request = new RestRequest(Method.POST);
    request.AddHeader("session_id", "YOURSESSIONID");
    request.AddHeader("Content-Type", "application/json");
    request.AddParameter("application/json", "{\n    \"file\": {{attachment_file_base64_content}},\n    \"type_id\": {{attachment_type_id}},\n    \"entity_id\": {{entity_id}},\n    \"name\": {{attachment_file_name}}\n}",  ParameterType.RequestBody);
    IRestResponse response = client.Execute(request);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient().newBuilder()
    .build();
    MediaType mediaType = MediaType.parse("application/json");
    RequestBody body = RequestBody.create(mediaType, "{\n    \"file\": {{attachment_file_base64_content}},\n    \"type_id\": {{attachment_type_id}},\n    \"entity_id\": {{entity_id}},\n    \"name\": {{attachment_file_name}}\n}");
    Request request = new Request.Builder()
    .url("https://api.sabbatic.es/v2/attachment")
    .method("POST", body)
    .addHeader("session_id", "YOURSESSIONID")
    .addHeader("Content-Type", "application/json")
    .build();
    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        require_once 'HTTP/Request2.php';
        $request = new HTTP_Request2();
        $request->setUrl('https://api.sabbatic.es/v2/attachment');
        $request->setMethod(HTTP_Request2::METHOD_POST);
        $request->setConfig(array(
            'follow_redirects' => TRUE
        ));
        $request->setHeader(array(
            'session_id' => 'YOURSESSIONID',
            'Content-Type' => 'application/json'
        ));
        $request->setBody('{\n    "file": {{attachment_file_base64_content}},\n    "type_id": {{attachment_type_id}},\n    "entity_id": {{entity_id}},\n    "name": {{attachment_file_name}}\n}');
        try {
        $response = $request->send();
        if ($response->getStatus() == 200) {
            echo $response->getBody();
        }
        else {
            echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
            $response->getReasonPhrase();
        }
        }
        catch(HTTP_Request2_Exception $e) {
        echo 'Error: ' . $e->getMessage();
        }
    ?>

Ejemplos de JSON de respuesta:

    {
        "id": 3027816,
        "type": {
            "id": 5,
            "name": "test"
        },
        "url": "https://app.sabbatic.es/es/system/files/attachments/{{entity_id}}/realPNG.png?token=fea84f3351e265de8582774c4c03924f00e2179fe4970af763377b4d293504c5"
    }

HTTP Request

POST https://api.sabbatic.es/v2/attachment

HEADER Parámetros

Parámetro Descripción
content-type application/json
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de datos

*Obligatorios

Parámetro Tipo Descripción
name* string El nombre que se quiere dar al adjunto. Nombre completo con extension.
type_id* int El id del tipo de adjunto. Tiene que existir previamente.
entity_id* int Identificador de gasto(Ticket,Factura,Kilometraje...).
file* string Archivo serializado en Base64.
description string Descripción del adjunto. Máximo 255 caracteres.

Edit an attachment

Edición de un adjunto de un gasto en Sabbatic. En un adjunto solo se pueden cambiar el tipo y la descripción.

Ejemplo de llamada al servicio Edit an attachment:

    # Llamada desde consola Linux
    curl --location --request PUT 'https://api.sabbatic.es/v2/attachment' \
    --header 'session_id: YOURSESSIONID' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "id": {{attachment_id}},
        "description": "Lorem Ipsum is simply dummy text of the printing and typesetting industry"
    }'
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/attachment");
    var request = new RestRequest(Method.PUT);
    request.AddHeader("session_id", "YOURSESSIONID");
    request.AddHeader("Content-Type", "application/json");
    request.AddParameter("application/json", "{\n    \"id\": {{attachment_id}},\n    \"description\": \"Lorem Ipsum is simply dummy text of the printing and typesetting industry\"\n}",  ParameterType.RequestBody);
    IRestResponse response = client.Execute(request);
    Console.WriteLine(response.Content);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient().newBuilder()
    .build();
    MediaType mediaType = MediaType.parse("application/json");
    RequestBody body = RequestBody.create(mediaType, "{\n    \"id\": {{attachment_id}},\n    \"description\": \"Lorem Ipsum is simply dummy text of the printing and typesetting industry\"\n}");
    Request request = new Request.Builder()
    .url("https://api.sabbatic.es/v2/attachment")
    .method("PUT", body)
    .addHeader("session_id", "YOURSESSIONID")
    .addHeader("Content-Type", "application/json")
    .build();
    Response response = client.newCall(request).execute();
    // Cliente HttpRequest, según la versión el código puede variar
    <?php
        require_once 'HTTP/Request2.php';
        $request = new HTTP_Request2();
        $request->setUrl('https://api.sabbatic.es/v2/attachment');
        $request->setMethod(HTTP_Request2::METHOD_PUT);
        $request->setConfig(array(
        'follow_redirects' => TRUE
        ));
        $request->setHeader(array(
        'session_id' => 'YOURSESSIONID',
        'Content-Type' => 'application/json'
        ));
        $request->setBody('{\n    "id": {{attachment_id}},\n    "description": "Lorem Ipsum is simply dummy text of the printing and typesetting industry"\n}');
        try {
        $response = $request->send();
        if ($response->getStatus() == 200) {
            echo $response->getBody();
        }
        else {
            echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
            $response->getReasonPhrase();
        }
        }
        catch(HTTP_Request2_Exception $e) {
        echo 'Error: ' . $e->getMessage();
        }
    ?>

Ejemplos de JSON de respuesta:

    {
        "id": 3027816,
        "type": {
            "id": 5,
            "name": "test"
        },
        "url": "https://app.sabbatic.es/es/system/files/attachments/{{entity_id}}/realPNG.png?token=fea84f3351e265de8582774c4c03924f00e2179fe4970af763377b4d293504c5"
    }

HTTP Request

PUT https://api.sabbatic.es/v2/attachment

HEADER Parámetros

Parámetro Descripción
content-type application/json
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

*Obligatorios

Parámetro Tipo Descripción
id* int Identificador del adjunto del gasto

Parámetros de datos

Parámetro Tipo Descripción
type_id int El id del tipo de adjunto. Tiene que existir previamente.
description string Descripción del adjunto. Máximo 255 caracteres.

Delete an attachment

Eliminación de un adjunto de un gasto en Sabbatic.

Ejemplo de llamada al servicio Delete an attachment:

    # Llamada desde consola Linux
    curl --location --request DELETE 'https://api.sabbatic.es/v2/attachment' \
    --header 'session_id: YOURSESSIONID' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "id": {{attachment_id}}
    }'
    // Cliente RestSharp, según la versión el código puede variar
    var client = new RestClient("https://api.sabbatic.es/v2/attachment");
    var request = new RestRequest(Method.DELETE);
    request.AddHeader("session_id", "YOURSESSIONID");
    request.AddHeader("Content-Type", "application/json");
    request.AddParameter("application/json", "{\n    \"id\": {{attachment_id}}\n}",  ParameterType.RequestBody);
    IRestResponse response = client.Execute(request);
    Console.WriteLine(response.Content);
    // Cliente OK Http, según la versión el código puede variar
    OkHttpClient client = new OkHttpClient().newBuilder()
    .build();
    MediaType mediaType = MediaType.parse("application/json");
    RequestBody body = RequestBody.create(mediaType, "{\n    \"id\": {{attachment_id}}\n}");
    Request request = new Request.Builder()
    .url("https://api.sabbatic.es/v2/attachment")
    .method("DELETE", body)
    .addHeader("session_id", "YOURSESSIONID")
    .addHeader("Content-Type", "application/json")
    .build();
    Response response = client.newCall(request).execute();
// Cliente HttpRequest, según la versión el código puede variar
<?php
    require_once 'HTTP/Request2.php';
    $request = new HTTP_Request2();
    $request->setUrl('https://api.sabbatic.es/v2/attachment');
    $request->setMethod(HTTP_Request2::METHOD_DELETE);
    $request->setConfig(array(
    'follow_redirects' => TRUE
    ));
    $request->setHeader(array(
    'session_id' => 'YOURSESSIONID',
    'Content-Type' => 'application/json'
    ));
    $request->setBody('{\n    "id": {{attachment_id}}\n}');
    try {
    $response = $request->send();
    if ($response->getStatus() == 200) {
        echo $response->getBody();
    }
    else {
        echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
        $response->getReasonPhrase();
    }
    }
    catch(HTTP_Request2_Exception $e) {
    echo 'Error: ' . $e->getMessage();
    }
?>

La respuesta devolverá el código de respuesta de la operación de éxito o fracaso:

    {
        "code": "200",
        "reason": "OK"
    }
    {
        "code": "400",
        "message": "Bad Request",
        "description": ""
    }

HTTP Request

DELETE https://api.sabbatic.es/v2/attachment

HEADER Parámetros

Parámetro Descripción
content-type application/json
session_id Identificador de sistema devuelto por el servicio de Autenticación.

Parámetros de filtrado

Parámetro Tipo Descripción
id* int Identificador del adjunto del gasto

Objects

Objetos JSON que se utilizan en las llamadas de API.

Todas las claves de los objetos no son obligatorias.

user

Ejempo del objeto user:

    {
        "user_id":1234,
        "user_id_custom":"u-1234",
        "name": "Soy",
        "surname": "Anonimo 1",
        "email": "soy@anonimo.com",
        "admin": false
    }
Parámetro Tipo Descripción
user_id int Identificador numérico (entero) que identifica a un usuario en el entorno Sabbatic, ej: 2368
user_id_custom string Identificador (string alfanumérico) que identifica a un usuario en el entorno del equipo cliente, el integrador puede utilizar sus propias claves para identificar a una usuario en Sabbatic, ej: "188" o "BAR-188"
name string Nombre del usuario.
surname string Apellido del usuario.
email string Correo electrónico del usuario utilizado para enviar alertas o avisos a dicho usuario. No tiene porque coincidir con el username propio que permite hacer log in en la web de Sabbatic, pero es coincidente en muchos casos.
admin boolean Booleano true o false que indica y determina si ese usuario es administrador.

group

Ejempo del objeto group:

    {
        "group_id":1234,
        "group_id_custom":"g-1234",
        "name": "Grupo 1",
        "company_id": 1234,
        "company_id_custom": "c-1234",
        "users": [
            {
                "user_id":1234,
                "user_id_custom":"u-1234",
                "name": "Soy",
                "surname": "Anonimo 1",
                "email": "soy@anonimo.com",
                "admin": false
            }
        ],
        "group_manager_users": [
            {
                "user_id":1234,
                "user_id_custom":"u-1234",
                "name": "Soy",
                "surname": "Anonimo 1",
                "email": "soy@anonimo.com",
                "admin": false
            }
        ],
        "autoconfirm_users": [
            {
                "user_id":1234,
                "user_id_custom":"u-1234",
                "name": "Soy",
                "surname": "Anonimo 1",
                "email": "soy@anonimo.com",
                "admin": false
            }
        ]
    }
Parámetro Tipo Descripción
group_id int Identificador de un grupo de usuarios en el entorno Sabbatic, ej: 589637.
group_id_custom string Identificador de un grupo de usuarios en el entorno del cliente, el integrador puede utilizar sus propias claves para identificar a un grupo de usuarios en Sabbatic, ej: "234523" o "ND232-T"
name string Nombre del grupo.
company_id int Identifica de empresa en el entorno Sabbatic, ej: 589637. Los grupos pueden estar asignados a empresas integradas o a la propia empresa matriz del integrador, si no se especifica este parámetro o su asociado custom, el grupo se asignará a la empresa matriz del integrador.
company_id_custom string Identificador personal de una empresa en el sistem del cliente. El integrador puede utilizar sus propias claves para identificar a una empresa en Sabbatic, ej: "234523" o "ND232-T". Los grupos pueden estar asignados a empresas integradas o a la propia empreza matriz del integrador, si no se especifica este parámetro o su asociado no custom, el grupo se asignará a la empresa matriz del integrador.
users array<user> Array de objetos user que pertenecen al grupo donde están englobados.
group_manager_users array<user> Array de objetos user de supervisores del grupo donde están englobados. En esta lista no se pueden incluir user que no esten en users.
autoconfirm_users array<user> Array de objetos user de supervisores del grupo que además pueden auto-aprobar sus gastos. En esta lista no se pueden incluir user que no esten en users y group_manager_users. Si no se incluye este campo los supervisores del grupo tendran la auto-aprobación: true por defecto.

company

Ejempo del objeto company:

    {
        "company_id":1234,
        "company_id_custom":"c-1234",
        "users": [
            {
                "user_id":1234,
                "user_id_custom":"u-1234",
                "name": "Soy",
                "surname": "Anonimo 1",
                "email": "soy@anonimo.com",
                "admin": false
            }
        ]
    }
Parámetro Tipo Descripción
company_id int Identificador numérico (entero) que identifica a una empresa en el entorno Sabbatic, ej: 342234
company_id_custom string Identificador (string alfanumérico) que identifica a una empresa en el entorno del equipo cliente, el integrador puede utilizar sus propias claves para identificar a una empresa en Sabbatic, ej: "234523" o "ND232-T"
users array<user> Array de objetos user que pertenecen a la empresa del objeto donde esta englobado.

category

Ejempo del objeto category:

    {
        "category_id":236987,
        "labels":[
            {
            "name":"Label1",
            "label_id":356325
            },
            {
            "name":"Label2",
            "label_id":412323
            },
            {
            "name":"Label3",
            "label_id_custom":"Lbl3"
            }
        ]
    }
Parámetro Tipo Descripción
category_id int Identificador numérico (entero) que identifica a una categoría en el entorno Sabbatic, ej: 266987.
category_id_custom string Identificador personal que identifica a una categoría en el entorno del cliente, el integrador puede utilizar sus propias claves para identificar a una categoría previamente creada en Sabbatic, ej: "653236" o "Marketing-23"
permissions array<updates_permission> Array de objectos updates_permission que son los permisos de la etiqueta.
labels array<label> Array de objetos label que pertenecen a la categoría del objeto donde esta englobado. Todas las etiquetas deben pertenecer a una categoría.

label

Ejempo del objeto label:

    {
        "label_id":412323,
        "name":"Label3",
        "label_id_custom":"Lbl3"
    }
Parámetro Tipo Descripción
label_id int Identificador numérico (entero) que identifica a una etiqueta en el entorno Sabbatic, ej: 355254.
label_id_custom string Identificador personal que identifica a una etiqueta en el entorno del equipo cliente, el intfgrador puede utilizar sus propias claves para identificar a una etiqueta en Sabbatic, ej: "423562" o "Proyecto-33"
name string Nombre de la etiqueta.
permissions array<updates_permission> Array de objectos updates_permission que son los permisos de la etiqueta.
parent_labels array<label> Array de objetos label que determina la anidación o dependencia de unas etiquetas sobre otras. Por ejemplo si una etiqueta no puede ser asignada a un gasto si no se incluye previamente también su etiqueta "padre".

permission

Ejempo del objeto permission:

    {
        "users": [
            12345
        ],
        "companies": [
            12345
        ],
        "groups": [
            12345
        ]
    }

Todas las claves son opcionales:

Clave Tipo Descripción
users array<int> Un array de int con los ids.
companies array<int> Un array de int con los ids.
groups array<int> Un array de int con los ids.

updates_permission

Ejempo del objeto updates_permission:

    {
        "users": [
            {
                "user_id": 12345
            },
            {
                "company_id_custom": "MIUSUARIO"
            }
        ],
        "companies": [
            {
                "company_id": 12345
            },
            {
                "company_id_custom": "MIEMPRESA"
            }
        ],
        "groups": [
            {
                "group_id": 12345
            },
            {
                "group_id_custom": "MIGRUPO"
            }
        ]
    }

Todas las claves son opcionales:

Clave Tipo Descripción
users array<user_permission> Un array con objectos user_permission.
companies array<company_permission> Un array con objectos company_permission.
groups array<group_permission> Un array con objetos group_permission.

user_permission

Ejemplo del objecto user_permission:

    {
        "user_id": 12345,
        "user_id_custom": "MIUSUARIO"
    }

Es un objecto JSON con la siguiente estructura.

Todas las claves son opcionales:

Clave Tipo Descripción
user_id int Identificador de un usuario en Sabbatic.
user_id_custom string Identificador personal del usuario en la empresa en Sabbatic.

company_permission

Ejemplo del objecto company_permission:

    {
        "company_id": 12345,
        "company_id_custom": "MIEMPRESA"
    }

Es un objecto JSON con la siguiente estructura.

Todas las claves son opcionales:

Clave Tipo Descripción
company_id int Identificador de una empresa en Sabbatic.
company_id_custom string Identificador personal de la empresa en Sabbatic.

group_permission

Ejemplo del objecto group_permission:

    {
        "group_id": 12345,
        "group_id_custom": "MIGRUPO"
    }

Es un objecto JSON con la siguiente estructura.

Todas las claves son opcionales:

Clave Tipo Descripción
group_id int Identificador de un grupo en Sabbatic.
group_id_custom string Identificador personal de un grupo en la empresa en Sabbatic.

Errors

Los códigos de error más habituales en Sabbatic:

Código Mensaje Descripción
400 Bad Request Tu petición no es válida, reformula la petición al servidor para obtner una respuesta válida.
401 Unauthorized Tu session_id en Sabbatic no es válida, por favor vuelve a hacer login en Sabbatic.
403 Forbidden No tienes acceso a este servicio.
404 Not Found El servicio solicitado no existe.
405 Method Not Allowed El servicio solicitado no está activo.
406 Not Acceptable La petición realizada no es un JSON.
410 Gone El servicio ha sido eliminado de los servidores de Sabbatic.
429 Too Many Requests Se han realizado demasiadas peticiones a los servicios en un periodo muy corto de tiempo.
500 Internal Server Error Ha habido algún problema en los servidores de Sabbatic. Por favor, inténtelo más tarde.
503 Service Unavailable El servicio no está disponible por razones de mantenimiento. Por favor, inténtelo más tarde.