API

API

Utilizamos una API RESTful que le permite acceder a los datos de su empresa en Rindegastos como usuarios, gastos, informes de gastos y más. La API de Rindegastos utiliza un Token de autenticación que brinda permisos de lectura y escritura sobre los datos de la empresa a la que se le ha asignado el Token.
Para comenzar lo primero que debes hacer es solicitar y activar el Token de acceso de tu empresa. Para esto puedes ir a la sección Autenticación. Una vez que tengas asignado el Token de tu empresa la forma más simple de acceder a la API es usar uno de nuestros SDKs. En caso contrario deberás desarrollar las llamadas siguiendo la estructura presente en esta documentación.
La API de Rindegastos sólo está disponible para las cuentas de tipo Empresa. Las cuentas para uso personal gratuitas no pueden hacer uso de la API de Rindegastos.


General

Autenticación

El Token de acceso para la API de Rindegastos es único por empresa. De esta manera si tienes más de una empresa en Rindegastos, deberás usar un Token de acceso distinto para cada una de ellas.

Obtener token de acceso

Para activar el acceso de a la API en tu empresa y obtener el token de acceso y autentificación deberás ir a la sección Admin dentro de tu cuenta y posteriormente a la opción "Integración". Dentro de "Integración" verás la opción para solicitar el Token de Acceso. Una vez solicitado automáticamente se le asignará un nuevo Token de Acceso a tu empresa y se mostrará en pantalla.
Si todo salió bien el Token de Acceso asignado a tu empresa debería ser similar a lo siguiente:
Una vez que tengas el Token de Acceso podrás realizar llamadas a usando la API de Rindegastos. Para esto puedes desarrollar las llamadas siguiendo las directrices dentro de esta documentación.


General

Solicitudes

Estructura

Teniendo el Token de Acceso de tu empresa para poder realizar una solicitud con la API debes estructurar la llamada de la consulta siguiendo las siguientes instrucciones:
Parámetro Descripción
Method GET o POST dependiendo del método que se usará (ver descripción del método).
Authorization En el header de la llamada debe ir Authorization: Bearer <token>
URL https://api.rindegastos.com/v1/<metodo> (no se permiten conexiones sin https)
Parámetros Si el método es GET los parámetros deben ir en la URL. Si el método es POST los parámetros deben ir en el payload dentro del header en formato JSON.
Response La información devuelta por la API de Rindegastos siempre será en el formato JSON.
Ejemplo
A continuación se muestra un ejemplo usando el método getExpenses de la API de Rindegastos. Este método permite consultar los gastos de la empresa.
https://api.rindegastos.com/v1/getExpenses?Currency=CLP
METHOD GET
Authorization: Bearer <token>
El resultado ejemplo para esta llamada se muestra a continuación:
{
  "Records": {
    "TotalRecords": 2,
    "Expenses": 2,
    "Page": 1,
    "Pages": 1
  },
  "Expenses": [
    {
      "Id": 2,
      "Status": 0,
      "Supplier": "Upa!",
      "IssueDate": "2017-06-12",
      "Net": 7000,
      "Tax": 0,
      "TaxName": "",
      "OtherTaxes": 0,
      "Retention": 0,
      "Total": 7000,
      "Currency": "CLP",
      "Reimbursable": false,
      "Category": "Alimentación",
      "CategoryCode": "",
      "CategoryGroup": "",
      "CategoryGroupCode": "",
      "ReportId": 1,
      "ExpensePolicyId": 2,
      "UserId": 2,
      "ExtraFields": [],
      "Files": []
    },
    {
      "Id": 1,
      "Status": 0,
      "Supplier": "Copec",
      "IssueDate": "2017-06-07",
      "Net": 5500,
      "Tax": 0,
      "TaxName": "",
      "OtherTaxes": 0,
      "Retention": 0,
      "Total": 5500,
      "Currency": "CLP",
      "Reimbursable": false,
      "Category": "Combustible",
      "CategoryCode": "",
      "CategoryGroup": "",
      "CategoryGroupCode": "",
      "ReportId": 1,
      "ExpensePolicyId": 2,
      "UserId": 2,
      "ExtraFields": [],
      "Files": []
    }
  ]
}


Objetos

Objeto Gasto

Puedes hacer uso de la API para solicitar la información de uno o más gastos de tu empresa. Por ahora sólo se permite leer información, no crear gastos o actualizar la información de los gastos creados.

Método: getExpenses

Método para obtener una lista de gastos de la empresa según parámetros definidos.
Parámetro Descripción
Método GET
URL https://api.rindegastos.com/v1/getExpenses<params>
Params Parámetros que pueden ser agregados a la solicitud para discriminar qué gastos se desea obtener. Los parámetros posibles son:
  Since date Fecha desde cuando contar los gastos en formato YYYY-MM-DD.
  Until date Fecha hasta cuando contar los gastos en formato YYYY-MM-DD.
  Currency string(3) Código ISO de la moneda que se desea filtrar. Por ejemplo USD para dólar americano. Este parámetro trabaja sobre la moneda final del gasto, no la moneda original.
  Status int 1: Aprobado; 2: Rechazado; 0: En proceso.
  Category string(150) Nombre de la categoría de gastos que se desea.
  ReportId int Id único del informe de gastos
  ExpensePolicyId int Id único de la política de gastos
  IntegrationStatus integer Buscar gastos por estado de integración: 1 = Integrados o 0 = No integrados. Si se envía blanco no se agrega al filtro de busqueda.
  IntegrationCode String(255) Buscar gastos integrados, filtrando por el código de comprobante asociado al gasto.
  IntegrationDate Date Buscar gastos integrados, filtrando por fecha de integración en formato YYYY-MM-DD.
  UserId int Id único del usuario en Rindegastos
  OrderBy int 1: fecha del gasto; 2: fecha creación del gasto. Por defecto el orden es por fecha del gasto.
  Order string ASC o DESC (default)
  ResultsPerPage int Número de resultados por solicitud (máximo 100).
  Page int Página de resultados. Por defecto = 1
A continuación se muestra un ejemplo usando el método getExpenses de la API de Rindegastos. Este método permite consultar los gastos de la empresa.
https://api.rindegastos.com/v1/getExpenses?Currency=GBP&ResultsPerPage=2
METHOD GET
Authorization: Bearer <token>
                


El resultado ejemplo para esta llamada se muestra a continuación:

Método: getExpense

Método para obtener un gasto con toda su información.

Parámetro Descripción
Método GET
URL https://api.rindegastos.com/v1/getExpense?Id=<id>
Params Parámetros que pueden ser agregados a la solicitud para discriminar qué gastos se desea obtener. Los parametros posibles son:
  Id int Id único del gasto que se desea obtener.

A continuación se muestra un ejemplo usando el método getExpense de la API de Rindegastos. Este método permite consultar un gasto específico de la empresa.

{
  "Id": 7,
  "Status": 1,
  "Supplier": "Great Customer",
  "IssueDate": "2017-06-27",
  "OriginalAmount": 23.99,
  "OriginalCurrency": "GBP",
  "ExchangeRate": 0,
  "Net": 19.99,
  "Tax": 4,
  "TaxName": "VAT",
  "OtherTaxes": 0,
  "RetentionName": "",
  "Retention": 0,
  "Total": 23.99,
  "Currency": "GBP",
  "Reimbursable": false,
  "Category": "Electricity",
  "CategoryCode": "701-201",
  "CategoryGroup": "Utilities",
  "CategoryGroupCode": "U012",
  "Note": 0,
  "IntegrationDate": "",
  "IntegrationExternalCode": "",
  "ExtraFields": [
    {
      "Name": "Expense Type",
      "Value": "Invoice",
      "Code": "02"
    },
    {
      "Name": "VAT ID",
      "Value": "99999999",
      "Code": ""
    }
  ],
  "Files": [
    {
      "FileName": "invoice.png",
      "Extension": "png",
      "Original": "https:\/\/ppstatic.s3.amazonaws.com\/expenses\/uploads\/original\/2-1-5952e07e4c44a-1498603646-192.png",
      "Large": "https:\/\/ppstatic.s3.amazonaws.com\/expenses\/uploads\/large\/2-1-5952e07e4c44a-1498603646-192.png",
      "Medium": "https:\/\/ppstatic.s3.amazonaws.com\/expenses\/uploads\/medium\/2-1-5952e07e4c44a-1498603646-192.png",
      "Small": "https:\/\/ppstatic.s3.amazonaws.com\/expenses\/uploads\/small\/2-1-5952e07e4c44a-1498603646-192.png"
    }
  ],
  "NbrFiles": 1,
  "ReportId": 1,
  "ExpensePolicyId": 6,
  "UserId": 2
}
                

Método: setExpenseIntegration

Método para marcar como integrado o no integrado un gasto específico.
Parámetro Descripción
Método PUT
URL https://api.rindegastos.com/v1/setExpenseIntegration
Post Params Parámetros que pueden ser agregados a la solicitud para discriminar qué gastos se marcarán como integrados o no integrados.
  Id int Id único del gasto que se desea marcar como integrado o no integrado.
  IntegrationStatus int Estado Integrado = 1 o bien No Integrado = 0.
  IntegrationCode string(255) Permite comunicar un código de comprobante contable para enlazar información de la integración con los gastos existentes en Rindegastos.
  IntegrationDate DateTime Fecha/hora de integración YYYY-MM-DD H:i:s, por defecto si el valor del atributo IntegrationStatus es igual a cero, este valor será vacio.

A continuación se muestra un ejemplo usando el método setExpenseIntegration de la API de Rindegastos. Este método permite marcar o desmarcar el estado Integrado un gasto específico de la empresa.

curl 'http://localhost:9004/v1/setExpenseIntegration' -X PUT
-d '{"Id":1,"IntegrationStatus":1,"IntegrationCode":"0303456","IntegrationDate":"2017-08-01 12:00:00"}'
-H 'authorization: Bearer <token> ' -H 'Content-Type: application/json'
 
{
    "Id": 1,
    "Supplier": "Wallmart",
    "OriginalAmount": 100000,
    "OriginalCurrency": "CLP",
    "IntegrationStatus": 1,
    "IntegrationCode": "0303456",
    "IntegrationDate": "2017-08-01 12:00:00"
}
                
 


Objetos

Objeto Informe de Gastos

Puedes hacer uso de la API para solicitar la información de uno o más informes de gastos de tu empresa. Por ahora sólo se permite leer información, no crear informes o actualizar la información de los informes creados.

Método: getExpenseReports

Método para obtener una lista de informes de la empresa según parámetros definidos.
Parámetro Descripción
Método GET
URL https://api.rindegastos.com/v1/getExpenseReports<params>
Params Parámetros que pueden ser agregados a la solicitud para discriminar qué informes se desea obtener. Los parametros posibles son:    
  Since date Fecha desde cuándo contar los informes de gastos en formato YYYY-MM-DD.
  Until date Fecha hasta cuándo contar los informes de gastos en formato YYYY-MM-DD.
  TypeDateFilter integer Indica en base a cuál fecha vamos a filtrar usando Since y Until donde: 1 = CloseDate (por defecto) y 2 = SendDate.
  Currency string(3) Código ISO de la moneda que se desea filtrar. Por ejemplo USD para dólar americano.
  Status integer Estado en que se encuentran los informes en donde: 0 = Abierto o En proceso; 1 = Cerrado. Si se deja en blanco se toman informes en ambos estados.
  ExpensePolicyId integer Identificador interno de Rindegastos de la política bajo la cual se ha creado el informe de gastos.
  IntegrationStatus integer Buscar informes por estado de integración: 1 = Integrados o 0 = No integrados. Si se envía blanco no se agrega al filtro de busqueda.
  IntegrationCode String(255) Buscar informes integrados, filtrando por el código de respuesta asignado posterior al proceso de integración.
  IntegrationDate Date Buscar informes integrados, filtrando por fecha de integración en formato YYYY-MM-DD.
  UserId integer Identificador interno de Rindegastos del usuario que envió el informe de gastos.
  OrderBy integer Permite indicar bajo cual parametro vamos a ordenar la lista de informes obtenida donde: 1 = CloseDate, 2 = SendDate, 3 = Id. Por defecto se ordena en base a la fecha de envío (SendDate).
  Order string "ASC" o "DESC" (default).
  ResultsPerPage integer Número de Resultados por página.
  Page integer Página de resultados. Por defecto = 1
A continuación se muestra un ejemplo usando el método getExpenseReports de la API de Rindegastos. Este método permite consultar los informes de gastos de la empresa.
https://api.rindegastos.com/v1/getExpenseReports?Currency=GBP&ResultsPerPage=2
METHOD GET
Authorization: Bearer <token>

El resultado ejemplo para esta llamada se muestra a continuación:
{
  "Records": {
    "TotalRecords": 1,
    "Reports": 1,
    "Page": 1,
    "Pages": 1
  },
  "ExpenseReports": [
    {
      "Id": 1,
      "Title": "New Expense Report",
      "ReportNumber": "1",
      "SendDate": "2017-06-27",
      "CloseDate": "2017-06-29",
      "EmployeeId": 2,
      "EmployeeName": "John Lemon",
      "EmployeeIdentification": "",
      "ApproverId": 4,
      "ApproverName": "Apple MacCartney",
      "PolicyId": 6,
      "PolicyName": "East Devon",
      "Status": 1,
      "CustomStatus": "",
      "FundId": 0,
      "FundName": "",
      "ReportTotal": 36.99,
      "ReportTotalApproved": 36.99,
      "Currency": "GBP",
      "Note": "Check",
      "Integrated": "",
      "IntegrationDate": "",
      "IntegrationExternalCode": "",
      "IntegrationInternalCode": "",
      "NbrExpenses": 3,
      "NbrApprovedExpenses": 3,
      "NbrRejectedExpenses": 0,
      "ExtraFields": [
        {
          "Name": "Costing Code",
          "Value": "London",
          "Code": "0101"
        },
        {
          "Name": "Due Date",
          "Value": "2017-06-20",
          "Code": ""
        }
      ],
      "Files": [
        
      ]
    }
  ]
}

Método: getExpenseReport

Método para obtener un informe de gastos con toda su información.
Parámetro Descripción    
Parámetro Descripción    
URL https://api.rindegastos.com/v1/getExpense?Id=<id>    
Params Para usar este servicio se debe definir el Id del informe de gastos y enviarlo como parámetro.    
  Id int Id único del informe de gastos que se desea obtener.

A continuación se muestra un ejemplo usando el método getExpenseReport de la API de Rindegastos. Este método permite consultar un informe de gastos específico de la empresa.

https://api.rindegastos.com/v1/getExpense?Id=1
METHOD GET
Authorization: Bearer <token>

 

El resultado ejemplo para esta llamada se muestra a continuación:
{
  "Id": 1,
  "Title": "New Expense Report",
  "ReportNumber": "1",
  "SendDate": "2017-06-27",
  "CloseDate": "2017-06-29",
  "EmployeeId": 2,
  "EmployeeName": "John Lemon",
  "EmployeeIdentification": "",
  "ApproverId": 4,
  "ApproverName": "Apple MacCartney",
  "PolicyId": 6,
  "PolicyName": "East Devon",
  "Status": 1,
  "CustomStatus": "",
  "FundId": 0,
  "FundName": "",
  "ReportTotal": 36.99,
  "ReportTotalApproved": 36.99,
  "Currency": "GBP",
  "Note": "Check",
  "IntegrationDate": "",
  "IntegrationExternalCode": "",
  "NbrExpenses": 3,
  "NbrApprovedExpenses": 3,
  "NbrRejectedExpenses": 0,
  "ExtraFields": [
    {
      "Name": "Costing Code",
      "Value": "London",
      "Code": "0101"
    },
    {
      "Name": "Due Date",
      "Value": "2017-06-20",
      "Code": ""
    }
  ],
  "Files": [
    
  ]
}

 

Método: setExpenseReportIntegration

Método para marcar como integrado o no integrado una rendición de gastos específica.
Parámetro Descripción
Método PUT
URL https://api.rindegastos.com/v1/setExpenseReportIntegration
Post Params Parámetros que pueden ser agregados a la solicitud para discriminar qué reportes se marcarán como integrados o no integrados.
  Id int Id único del reporte que se desea marcar como integrado o no integrado.
  IntegrationStatus int Estado Integrado = 1 o bien No Integrado = 0.
  IntegrationCode string(255) Permite comunicar un código de comprobante contable para enlazar información de la integración con la rendición en Rindegastos.
  IntegrationDate DateTime  
A continuación se muestra un ejemplo usando el método setExpenseReportIntegration de la API de Rindegastos. Este método permite marcar o desmarcar el estado Integrado un gasto específico de la empresa.
curl 'https://api.rindegastos.com/v1/setExpenseReportIntegration' -X PUT
-d '{"Id":1,"IntegrationStatus":1,"IntegrationCode":"0303456","IntegrationDate":"2017-08-01 12:00:00"}'
-H 'authorization: Bearer <token> ' -H 'Content-Type: application/json'

 

{
    "Id": 1,
    "Title": "dsfsdfsd",
    "ReportNumber": "1",
    "IntegrationStatus": 1,
    "IntegrationCode": "0303456",
    "IntegrationDate": "2017-08-01 12:00:00"
}


Método: setExpenseReportCustomStatus

Método para actualizar el estado personalizado de una rendición de gastos específica.
Parámetro Descripción
Método PUT
URL https://api.rindegastos.com/v1/setExpenseReportCustomStatus
Post Params Parámetros que pueden ser agregados a la solicitud.
  Id int Id único del reporte al cual queremos asignar un estado personalizado.
  IdAdmin int Id único del usuario con rol gestión bajo el cual vamos a asignar un estado personalizado. (debe tener definido permiso para gestionar). (Obligatorio)
  CustomStatus string(20) Es el texto del estado personalizado que deseamos asignar a la rendición específica.
  CustomMessage string(255) Es un texto descriptivo de la acción que estamos realizando. Este texto acompañara a la acción de cambio de estado en el timeline de mensajes & eventos de la rendición.
A continuación se muestra un ejemplo usando el método setExpenseReportCustomStatus de la API de Rindegastos.
curl 'https://api.rindegastos.com/v1/setExpenseReportCustomStatus' -X POST
-d '{"Id":4,"IdAdmin":5,"CustomStatus":"Waiting for payment","CustomMessage":"Payment By George Clinton"}'
-H 'authorization: Bearer <token> ' -H 'Content-Type: application/json'

{
    "Id": 1,
    "Title": "dsfsdfsd",
    "ReportNumber": "1",
    "CustomStatus": "Waiting for payment"
}

 

Importante: El método setExpenseReportCustomStatus no permite crear estados personalizados en políticas de gasto, solo asigna un estado a una rendición; es recomendable crear el o los estados personalizados en la políticas correspondientes antes de utilizar este método.


Objetos

Objeto Fondos

Puedes hacer uso de la API para solicitar la información de uno o más fondos de tu empresa. Por ahora sólo se permite leer información, no crear fondos o actualizar la información de los fondos existentes.

Método: getFunds

Método para obtener una lista de fondos de la empresa según parámetros definidos. No incluye la lista de movimientos de cada fondo.

Parámetro Descripción
Método GET
URL https://api.rindegastos.com/v1/getFunds<params>
Params Parámetros que pueden ser agregados a la solicitud para discriminar qué informes se desea obtener. Los parámetros posibles son:
  Status integer 1 = Abiertos; 2 = Cerrados; 3 = Bloqueados; en blanco muestra todos los fondos.
  OrderBy integer Permite indicar bajo cual parámetro vamos a ordenar la lista de informes obtenida, donde: 1 = fecha de creación, 2 = Título del fondo y por defecto si se envía en blanco fecha de creación
  Order integer ASC o DESC (default).
  ResultsPerPage integer Número de Resultados por página.
  Page integer Página de resultados. Por defecto = 1
  From date Filtrar fondos creados desde esta fecha. Formato YYYY-MM-DD.
  To date Filtrar fondos creados hasta esta fecha. Formato YYYY-MM-DD.

A continuación se muestra un ejemplo usando el método getFunds de la API de Rindegastos. Este método permite consultar los fondos de la empresa.

https://api.rindegastos.com/v1/getFunds?ResultsPerPage=2
METHOD GET
Authorization: Bearer <token>

El resultado ejemplo para esta llamada se muestra a continuación:

{
  "Records": {
    "TotalRecords": 2,
    "Funds": 2,
    "Page": 1,
    "Pages": 1
  },
  "Funds": [
    {
      "Id": 2,
      "Title": "Manager ",
      "Code": "ST856",
      "Currency": "USD",
      "IdAssignTo": 3,
      "IdCreator": 2,
      "Deposits": 15200.00,
      "Withdrawals": 0.00,
      "Balance": 15200.00,
      "Status": 1,
      "CreatedAt": 2020-07-23 22:36:44,
      "ExpirationDate": "",
      "FlexibleFund": "1",
      "ManualDeposit": false,
      "AutomaticBlock": false
    },
    {
      "Id": 1,
      "Title": "Sales Executive",
      "Code": "PM025",
      "Currency": "USD",
      "IdAssignTo": 4,
      "IdCreator": 2,
      "Deposits": 85622.00,
      "Withdrawals": 0.00,
      "Balance": 85622.00,
      "Status": 1,
      "CreatedAt": 2020-07-10 13:47:47,
      "ExpirationDate": "",
      "FlexibleFund": "1",
      "ManualDeposit": false,
      "AutomaticBlock": false
    }
  ]
}
 

Método: getFund

Método para obtener un fondo con toda su información. Incluye la lista de movimientos del fondo solicitado.

Parámetro Descripción
Método GET
URL https://api.rindegastos.com/v1/getFund?Id=<id>
Params Para usar este servicio solo podemos comunicar un parámetro el cual corresponde al Id del fondo.
Id int Id único del fondo que se desea obtener.

A continuación se muestra un ejemplo usando el método getFund de la API de Rindegastos. Este método permite consultar un fondo específico de la empresa.

https://api.rindegastos.com/v1/getFund?Id=3
METHOD GET
Authorization: Bearer <token>

El resultado ejemplo para esta llamada se muestra a continuación:

{
  "Id": 3,
  "Title": "Fund Executive ",
  "Code": "852KJ",
  "Currency": "GBP",
  "IdAssignTo": 4,
  "IdCreator": 4,
  "Deposits": 860.00,
  "Charges": 30.00,
  "Balance": 830.00,
  "Status": 1,
  "CreatedAt": 2020-07-10 13:34:19,
  "ExpirationDate": "",
  "FlexibleFund": "1",
  "ManualDeposit": false,
  "AutomaticBlock": false,
  "Transactions": [
    {
      "TransactionType": 1,
      "TransactionTypeName": "Deposit",
      "TransactionAmount": 860.00,
      "TransactionDate": "2017-06-30"
    },
    {
      "TransactionType": 2,
      "TransactionTypeName": "Withdrawal",
      "TransactionAmount": 30.00,
      "TransactionDate": "2017-06-30"
    }
  ]
}

Método: createFund

Método para crear un fondo con toda su información.

Parámetro Descripción
Método POST
URL https://api.rindegastos.com/v1/createFund
Post Params Parametros a comunicar para crear un fondo.
  IdEmployee int Id único del empleado al cual asignaremos el fondo. (Obligatorio)
  IdAdmin int Id único del usuario con rol administrador bajo el cual crearemos el Fondo (debe tener definido permiso para administrar fondos). (Obligatorio)
  FundName String(200) Nombre del fondo. (Obligatorio)
  FundCurrency String(3) Código estándar (ISO 4217) de la moneda asociada al fondo. (Obligatorio)
  FundCode String(50) Código del fondo.
  FundAmount float Monto del fondo con dos posiciones decimales (separadas con punto). (Obligatorio)
  FundComment String(255) Comentario u observación del fondo.
  FundFlexibility boolean El usuario podrá enviar informes aunque se sobrepase el saldo disponible.
  FundAutoDeposit boolean Al cerrar un informe de gastos asociado a este fondo abonar automáticamente el monto aprobado para volver al saldo disponible inicial.
  FundAutoBlock boolean Bloquear este fondo luego de que el rendidor envíe un informe de gastos.
  FundExpiration boolean Definir una fecha en la que fondo debe ser comprobado y alertar al rendidor y al creador del fondo.
  FundExpirationDate Date YYYY-MM-DD Fecha en la que fondo debe ser comprobado (solo si FundExpiration es TRUE)

A continuación se muestra un ejemplo usando el método getFund de la API de Rindegastos. Este método permite consultar un fondo específico de la empresa.

curl 'https://api.rindegastos.com/v1/createFund' -X POST
-d '{"IdEmployee":4,"IdAdmin":5,"FundName":"Fund Executive","FundCurrency":"GBP","FundCode":"852KJ","FundAmount":860.00,"FundComment":"Comment...","FundFlexibility":true,"FundAutoDeposit":true,"FundAutoBlock":true,"FundExpiration":true,"FundExpirationDate":"2017-01-01"}'
-H 'authorization: Bearer <token> ' -H 'Content-Type: application/json'

El resultado ejemplo para esta llamada se muestra a continuación:

{
  "Id": 3,
  "Title": "Fund Executive ",
  "Code": "852KJ",
  "Currency": "GBP",
  "IdAssignTo": 4,
  "IdCreator": 5,
  "Deposits": 860.00,
  "Charges": 0.00,
  "Balance": 860.00,
  "Status": 1,
  "CreatedAt": 2016-07-10 13:34:19,
  "ExpirationDate": "2017-01-01",
  "FlexibleFund": true,
  "ManualDeposit": true,
  "AutomaticBlock": true,
  "Transactions": [
    {
      "TransactionType": 1,
      "TransactionTypeName": "Deposit",
      "TransactionAmount": 860.00,
      "TransactionDate": "2017-06-30"
    }
   
  ]
}
 

Método: updateFund

Método para actualizar un fondo. No se podrá cambiar el propietario, el creador, la moneda ni el monto disponible del fondo.

Parámetro Descripción
Método PUT
URL https://api.rindegastos.com/v1/updateFund
Post Params Parametros a comunicar para actualizar un fondo.
  Id int Id único del fondo que deseamos actualizar. (Obligatorio)
  IdAdmin int Id único del usuario con rol administrador bajo el cual actualizaremos el Fondo (debe tener definido permiso para administrar fondos). (Obligatorio)
  FundName String(200) Nombre del fondo. (Obligatorio)
  FundCode String(50) Código del fondo.
  FundComment String(255) Comentario u observación del fondo.
  FundFlexibility boolean El usuario podrá enviar informes aunque se sobrepase el saldo disponible
  FundAutoDeposit boolean Al cerrar un informe de gastos asociado a este fondo abonar automáticamente el monto aprobado para volver al saldo disponible inicial.
  FundAutoBlock boolean Bloquear este fondo luego de que el rendidor envíe un informe de gastos.
  FundExpiration boolean Definir una fecha en la que fondo debe ser comprobado y alertar al rendidor y al creador del fondo.
  FundExpirationDate Date YYYY-MM-DD Fecha en la que fondo debe ser rendido (solo si FundExpiration es TRUE)

A continuación se muestra un ejemplo usando el método updateFund de la API de Rindegastos. Este método permite actualizar un fondo específico de la empresa.

curl 'https://api.rindegastos.com/v1/updateFund' -X PUT
-d '{"Id":3,"IdAdmin":5,"FundName":"Fund Executive Update","FundCode":"852KJ","FundComment":"Comment...","FundFlexibility":true,"FundAutoDeposit":true,"FundAutoBlock":true,"FundExpiration":true,"FundExpirationDate":"2017-01-01"}'
-H 'authorization: Bearer <token> ' -H 'Content-Type: application/json'

 El resultado ejemplo para esta llamada se muestra a continuación:

{
  "Id": 3,
  "Title": "Fund Executive Update",
  "Code": "852KJ",
  "Currency": "GBP",
  "IdAssignTo": 4,
  "IdCreator": 5,
  "Deposits": 860.00,
  "Charges": 0.00,
  "Balance": 860.00,
  "Status": 1,
  "CreatedAt": 2016-07-10 13:34:19,
  "ExpirationDate": "2017-01-01",
  "FlexibleFund": true,
  "ManualDeposit": true,
  "AutomaticBlock": true,
  "Transactions": [
    {
      "TransactionType": 1,
      "TransactionTypeName": "Deposit",
      "TransactionAmount": 860.00,
      "TransactionDate": "2017-06-30"
    }
   
  ]
}
 

Método: depositMoneyToFund

Método para realizar abonos a un fondo específico.

Parámetro Descripción    
Método POST    
URL https://api.rindegastos.com/v1/depositMoneyToFund    
Post Params Parametros a comunicar para actualizar un fondo.    
  Id int Id único del fondo al cual deseamos realizar un abono. (Obligatorio)
  IdAdmin int Id único del usuario con rol administrador bajo el cual realizaremos el abono (debe tener definido permiso para administrar fondos). (Obligatorio)
  DepositAmount float Monto del abono a realizar, permite valores con dos posiciones decimales (con punto separador).

A continuación se muestra un ejemplo usando el método depositMoneyToFund de la API de Rindegastos.

curl 'https://api.rindegastos.com/v1/depositMoneyToFund' -X POST
-d '{"Id":3,"IdAdmin":6,"DepositAmount":100.00}'
-H 'authorization: Bearer <token> ' -H 'Content-Type: application/json'

El resultado ejemplo para esta llamada se muestra a continuación:

{
  "Id": 3,
  "Title": "Fund Executive Update",
  "Code": "852KJ",
  "Currency": "GBP",
  "IdAssignTo": 4,
  "IdCreator": 5,
  "Deposits": 960.00,
  "Charges": 0.00,
  "Balance": 960.00,
  "Status": 1,
  "CreatedAt": 2016-08-10 13:34:19,
  "ExpirationDate": "2017-01-01",
  "FlexibleFund": true,
  "ManualDeposit": true,
  "AutomaticBlock": true,
  "Transactions": [
    {
      "TransactionType": 1,
      "TransactionTypeName": "Deposit",
      "TransactionAmount": 860.00,
      "TransactionDate": "2017-06-30"
    },
   {
      "TransactionType": 1,
      "TransactionTypeName": "Deposit",
      "TransactionAmount": 100.00,
      "TransactionDate": "2017-06-30"
    }
  ]
}
 

Método: withdrawMoneyFromFund

Método para realizar cargos a un fondo específico.

Parámetro Descripción  
Método POST  
URL https://api.rindegastos.com/v1/withdrawMoneyFromFund  
Post Params Parametros a comunicar para actualizar un fondo.  
  Id Id único del fondo al cual deseamos realizar un cargo. (Obligatorio)
  IdAdmin Id único del usuario con rol administrador bajo el cual realizaremos el cargo (debe tener definido permiso para administrar fondos). (Obligatorio)
  WithdrawAmount Monto del cargo a realizar, permite valores con dos posiciones decimales (con punto separador).

A continuación se muestra un ejemplo usando el método withdrawMoneyFromFund de la API de Rindegastos.

curl 'https://api.rindegastos.com/v1/withdrawMoneyFromFund' -X POST
-d '{"Id":3,"IdAdmin":6,"WithdrawAmount":100.00}'
-H 'authorization: Bearer <token> ' -H 'Content-Type: application/json'

El resultado ejemplo para esta llamada se muestra a continuación:

{
  "Id": 3,
  "Title": "Fund Executive Update",
  "Code": "852KJ",
  "Currency": "GBP",
  "IdAssignTo": 4,
  "IdCreator": 5,
  "Deposits": 860.00,
  "Charges": 100.00,
  "Balance": 760.00,
  "Status": 1,
  "CreatedAt": 2017-09-10 13:34:19,
  "ExpirationDate": "2017-01-01",
  "FlexibleFund": true,
  "ManualDeposit": true,
  "AutomaticBlock": true,
  "Transactions": [
    {
      "TransactionType": 1,
      "TransactionTypeName": "Deposit",
      "TransactionAmount": 860.00,
      "TransactionDate": "2017-06-30"
    },
   {
      "TransactionType": 2,
      "TransactionTypeName": "Withdrawal",
      "TransactionAmount": 100.00,
      "TransactionDate": "2017-06-30"
    }
  ]
}
 

Método: setFundStatus

Método para cambiar el estado a un fondo.

Parámetro Descripción
Método PUT
URL https://api.rindegastos.com/v1/setFundStatus
Post Params Parámetros a comunicar para actualizar un fondo.
  Id int Id único del fondo al cual deseamos realizar un cargo. (Obligatorio)
  IdAdmin int Id único del usuario con rol administrador bajo el cual realizaremos el cargo (debe tener definido permiso para administrar fondos). (Obligatorio)
  FundStatus int Estado bajo el cual queremos dejar el fondo. Los valores para los estados disponibles son:

1 (Abierto): Al estar el fondo en estado, permite al rendidor enviar informes de gastos asociados al fondo especificado.
2 (Cerrado):Cerrar y dar por terminado el ciclo de vida del fondo especificado.
3 (Bloqueado):Al estar el fondo en estado, No permite al rendidor enviar informes de gastos asociados al fondo especificado.

A continuación se muestra un ejemplo usando el método setFundStatus de la API de Rindegastos.

curl 'https://api.rindegastos.com/v1/setFundStatus' -X PUT
-d '{"Id":3,"IdAdmin":6,"FundStatus":2}'
-H 'authorization: Bearer <token> ' -H 'Content-Type: application/json'
 El resultado ejemplo para esta llamada se muestra a continuación:
{
  "Id": 3,
  "Title": "Fund Executive Update",
  "Code": "852KJ",
  "Currency": "GBP",
  "IdAssignTo": 4,
  "IdCreator": 5,
  "Deposits": 860.00,
  "Charges": 100.00,
  "Balance": 760.00,
  "Status": 2,
  "CreatedAt": 2016-09-12 13:34:19,
  "ExpirationDate": "2017-01-01",
  "FlexibleFund": true,
  "ManualDeposit": true,
  "AutomaticBlock": true,
  "Transactions": [
    {
      "TransactionType": 1,
      "TransactionTypeName": "Deposit",
      "TransactionAmount": 860.00,
      "TransactionDate": "2017-06-30"
    },
   {
      "TransactionType": 2,
      "TransactionTypeName": "Withdrawal",
      "TransactionAmount": 100.00,
      "TransactionDate": "2017-06-30"
    }
  ]
}
 
 
 

 



Objetos

Objeto Políticas de Gastos

Puedes hacer uso de la API para solicitar la información de una o más Políticas de Gastos de tu empresa. Por ahora sólo se permite leer información, no crear Políticas de Gastos o actualizar la información de los Políticas de Gastos existentes.

Método: getExpensePolicies

Método para obtener una lista de Políticas de Gastos de la empresa según parámetros definidos.

Parámetro Descripción
Método GET
URL https://api.rindegastos.com/v1/getExpensePolicies<params>
Params Parámetros que pueden ser agregados a la solicitud para discriminar qué informes se desea obtener. Los parámetros posibles son:
  Status integer 1 = Activa; 0 = Inactiva; si se envía en blanco muestra politicas en ambos estados.
  OrderBy integer Permite indicar bajo cual parametro vamos a ordenar la lista de informes obtenida, donde: 1 = fecha de creación, 2 = Título de la Política de Gastos y por defecto si se envía en blanco fecha de creación
  Order integer ASC o DESC (default).
  ResultsPerPage integer Número de Resultados por página.
  Page integer Página de resultados. Por defecto = 1

A continuación se muestra un ejemplo usando el método getExpensePolicies de la API de Rindegastos. Este método permite consultar las Políticas de Gastos activas de la empresa.

https://api.rindegastos.com/v1/getExpensePolicies?Status=1&ResultsPerPage=2
METHOD GET
Authorization: Bearer <token>
                
 El resultado ejemplo para esta llamada se muestra a continuación:
{
  "Records": {
    "TotalRecords": 3,
    "Policies": 2,
    "Page": 1,
    "Pages": 2
  },
  "Policies": [
    {
      "Id": 7,
      "Name": "New Scotland",
      "Code": "",
      "Description": "",
      "IsActive": true,
      "Currency": "GBP",
      "TotalEmployees": 3,
      "TotalApprovers": 2
    },
    {
      "Id": 6,
      "Name": "East Devon",
      "Code": "852",
      "Description": "",
      "IsActive": true,
      "Currency": "GBP",
      "TotalEmployees": 4,
      "TotalApprovers": 2
    }
  ]
}

 

Método: getExpensePolicy

Método para obtener una política de gastos específica con toda su información.

Parámetro Descripción
Método GET
URL https://api.rindegastos.com/v1/getExpensePolicy?Id=<id>
Params Para usar este servicio solo podemos comunicar un parámetro el cual corresponde al Id de la Política de Gastos.
Id int Id único de la Política de Gastos que se desea obtener.

A contiuación se muestra un ejemplo usando el método getExpensePolicy de la API de Rindegastos. Este método permite consultar una política de gastos específica de la empresa.

https://api.rindegastos.com/v1/getExpensePolicy?Id=2
METHOD GET
Authorization: Bearer <token>
                
 El resultado ejemplo para esta llamada se muestra a continuación:
{
  "Id": 2,
  "Name": "Headquarters",
  "Code": "0102HQ",
  "Description": "My new Policy",
  "IsActive": true,
  "Currency": "GBP",
  "TotalEmployees": 4,
  "TotalApprovers": 2
}
 

Método: getExpensePolicyExpenseReportFields

Método para obtener una lista con los campos extra para informes.

Parámetro Descripción    
Método GET    
URL https://api.rindegastos.com/v1/getExpensePolicyExpenseReportFields?IdPolicy=<id>    
Params Para usar este servicio solo podemos comunicar un parámetro el cual corresponde al Id de la política.    
  IdPolicy int Id único de la política que desea consultar.
  OrderBy int 1: nombre (defecto) o 2: fecha creación
  Order string ASC o DESC (default)

A continuación se muestra un ejemplo usando el método getExpensePolicyExpenseReportFields de la API de Rindegastos. Este método permite consultar los campos extra a nivel de informe de una política específica de la empresa.

https://api.rindegastos.com/v1/getExpensePolicyExpenseReportFields?IdPolicy=2
METHOD GET
Authorization: Bearer <token>

 El resultado ejemplo para esta llamada se muestra a continuación:

{
  "IdPolicy": 2,
  "PolicyName": "Headquarters",
  "NbrFields": 2,
  "ExpenseExtraFields": [
    {
      "Name": "Due Date",
      "Type": "date",
      "DefaultValue": "",
      "DefaultCode": "",
      "Options": [
        
      ]
    },
    {
      "Name": "Costing Code",
      "Type": "list",
      "DefaultValue": "London",
      "DefaultCode": "0101",
      "Options": [
        {
          "Value": "London",
          "Code": "0101"
        },
        {
          "Value": "North Wales",
          "Code": "0202"
        }
      ]
    }
  ]
}
 

Método: getExpensePolicyExpenseFields

Método para obtener una lista con los campos extra para gastos.

Parámetro Descripción    
Método GET    
URL https://api.rindegastos.com/v1/getExpensePolicyExpenseFields?IdPolicy=<id>    
Params Para usar este servicio solo podemos comunicar un parámetro el cual corresponde al Id de la política.    
  IdPolicy int Id único de la política que desea consultar.
  OrderBy int 1: nombre (defecto) o 2: fecha creación
  Order string ASC o DESC (default)

A contiuación se muestra un ejemplo usando el método getExpensePolicyExpenseFields de la API de Rindegastos. Este método permite consultar los campos extra a nivel de gastos de una política específica de la empresa.

https://api.rindegastos.com/v1/getExpensePolicyExpenseFields?IdPolicy=2
METHOD GET
Authorization: Bearer <token>
 
El resultado ejemplo para esta llamada se muestra a continuación:
 
{
  "IdPolicy": 2,
  "PolicyName": "Headquarters",
  "NbrFields": 3,
  "ExpenseExtraFields": [
    {
      "Name": "VAT ID",
      "Type": "text",
      "DefaultValue": "",
      "DefaultCode": "",
      "Options": [
        
      ]
    },
    {
      "Name": "Tipo de Documento",
      "Type": "list",
      "DefaultValue": "",
      "DefaultCode": "",
      "Options": [
        {
          "Value": "BOLETA",
          "Code": "dsa"
        },
        {
          "Value": "Factura Electr\u00f3nica",
          "Code": "DSA"
        },
        {
          "Value": "Factura Exenta Electronica",
          "Code": "SDD"
        },
        {
          "Value": "N.Cr\u00e9d.Electr\u00f3nica",
          "Code": "SA"
        }
      ]
    },
    {
      "Name": "Expense Type",
      "Type": "list",
      "DefaultValue": "Invoice",
      "DefaultCode": "02",
      "Options": [
        {
          "Value": "Invoice",
          "Code": "02"
        },
        {
          "Value": "Ticket",
          "Code": "01"
        }
      ]
    }
  ]
}
 

Método: getExpensePolicyCategories

Método para obtener una lista con todas las categorías de una política específica.

Parámetro Descripción    
Método GET    
URL https://api.rindegastos.com/v1/getExpensePolicyCategories?IdPolicy=<id>    
Params Para usar este servicio solo podemos comunicar un parámetro el cual corresponde al Id de la política.    
  IdPolicy int Id único de la política que desea consultar.
  OrderBy int 1: nombre (defecto) o 2: fecha creación
  Order string ASC o DESC (default)

A contiuación se muestra un ejemplo usando el método getExpensePolicyCategories de la API de Rindegastos. Este método permite consultar las categorías actualmente activas de una política específica de la empresa.

{
  "IdPolicy": 2,
  "PolicyName": "Headquarters",
  "NbrCategories": 7,
  "Categories": [
    {
      "Name": "Water",
      "GroupName": "Utilities",
      "GroupCode": "U012",
      "AccountCode": "701-202",
      "Instructions": ""
    },
    {
      "Name": "Uber",
      "GroupName": "Travels",
      "GroupCode": "T01",
      "AccountCode": "101-105",
      "Instructions": "Only for Uber"
    },
    {
      "Name": "Taxi",
      "GroupName": "Travels",
      "GroupCode": "T01",
      "AccountCode": "101-102",
      "Instructions": "Only for taxi"
    },
    {
      "Name": "Phones",
      "GroupName": "Utilities",
      "GroupCode": "U012",
      "AccountCode": "802-201",
      "Instructions": ""
    },
    {
      "Name": "Internet",
      "GroupName": "Utilities",
      "GroupCode": "U012",
      "AccountCode": "902-302",
      "Instructions": ""
    },
    {
      "Name": "Food",
      "GroupName": "Travels",
      "GroupCode": "T01",
      "AccountCode": "101-101",
      "Instructions": ""
    },
    {
      "Name": "Electricity",
      "GroupName": "Utilities",
      "GroupCode": "U012",
      "AccountCode": "701-201",
      "Instructions": ""
    }
  ]
}
 

Método: getExpensePolicyWorkflow

Método para obtener una lista con todos los aprobadores del flujo de aprobación para una política específica.

Parámetro Descripción    
Método GET    
URL https://api.rindegastos.com/v1/getExpensePolicyWorkflow?IdPolicy=<id>    
Params Para usar este servicio solo podemos comunicar un parámetro el cual corresponde al Id de la política.    
  IdPolicy int Id único de la política que desea consultar.

A contiuación se muestra un ejemplo usando el método getExpensePolicyWorkflow de la API de Rindegastos. Este método permite consultar el flujo de aprobación de una política específica de la empresa.

https://api.rindegastos.com/v1/getExpensePolicyWorkflow?IdPolicy=2
METHOD GET
Authorization: Bearer <token>
 
El resultado ejemplo para esta llamada se muestra a continuación:
 
{
  "IdPolicy": 2,
  "PolicyName": "Headquarters",
  "RevisionLevels": 2,
  "Approvers": [
    {
      "Level": 1,
      "ApproverId": "2",
      "ApproverName": "John Lemon",
      "ApproverEmail": "John@myAbbey.net",
      "AmmountRestriction": false,
      "RestrictionReportAmount": 0,
      "RestrictionExtraApproverId": "",
      "RestrictionExtraApproverEmail": ""
    },
    {
      "Level": 2,
      "ApproverId": "4",
      "ApproverName": "Apple MacCartney",
      "ApproverEmail": "apple@myabbey.net",
      "AmmountRestriction": false,
      "RestrictionReportAmount": 0,
      "RestrictionExtraApproverId": "",
      "RestrictionExtraApproverEmail": ""
    }
  ]
}
 

Método: getExpensePolicyTaxes

Método para obtener una lista con todos los impuestos configurados en la política de gastos.

Parámetro Descripción    
Método GET    
URL https://api.rindegastos.com/v1/getExpensePolicyTaxes?IdPolicy=<id>    
Params Para usar este servicio se debe enviar el Id de la política de gastos.    
  IdPolicy int Id único de la política que desea consultar.

A contiuación se muestra un ejemplo usando el método getExpensePolicyTaxes de la API de Rindegastos.

https://api.rindegastos.com/v1/getExpensePolicyTaxes?IdPolicy=2
METHOD GET
Authorization: Bearer <token>
 
El resultado ejemplo para esta llamada se muestra a continuación:
 
{
  "IdPolicy": 2,
  "PolicyName": "Headquarters",
  "NbrTaxes": 2,
  "Taxes": [
    {
      "Type": 1,
      "Name": "Exempt",
      "Value": 0
    },
    {
      "Type": 1,
      "Name": "VAT",
      "Value": 20
    }
  ]
}
 

 



Objetos

Objeto Usuario

Puedes hacer uso de la API para solicitar la información de uno o más usuarios de tu empresa. Por ahora sólo se permite leer información, no crear usuarios o actualizar la información de los usuarios existentes.

Método: getUsers

Método para obtener una lista de usuarios de la empresa según parámetros definidos.
Parámetro Descripción
Método GET
URL https://api.rindegastos.com/v1/getUsers<params>
Params Parámetros que pueden ser agregados a la solicitud para discriminar qué informes se desea obtener. Los parametros posibles son:
  OrderBy integer Permite indicar bajo cual parametro vamos a ordenar la lista de informes obtenida, donde: 1 = fecha de creación, 2 = Apellido. Por defecto si se envía en blanco se utilizará fecha de creación
  Order integer ASC o DESC (default).
  ResultsPerPage integer Número de Resultados por página.
  Page integer Página de resultados. Por defecto = 1

A continuación se muestra un ejemplo usando el método getUsers de la API de Rindegastos. Este método permite consultar los usuarios de la empresa.

{
  "Records": {
    "TotalRecords": 4,
    "Users": 4,
    "Page": 1,
    "Pages": 1
  },
  "Users": [
    {
      "Id": 3,
      "FirstName": "Mango",
      "LastName": "Starr",
      "Identification": "",
      "CostingCode": "",
      "EmployeeNumber": "",
      "Department": "",
      "Position": "",
      "CreatedAt": "2017-06-28 00:16:03",
      "LastLogin": "",
      "Role": [
        {
          "Admin": false,
          "Management": false
        }
      ]
    },
    {
      "Id": 5,
      "FirstName": "George",
      "LastName": "Pearrison",
      "Identification": "",
      "CostingCode": "",
      "EmployeeNumber": "",
      "Department": "",
      "Position": "",
      "CreatedAt": "2017-06-28 00:16:03",
      "LastLogin": "",
      "Role": [
        {
          "Admin": false,
          "Management": false
        }
      ]
    },
    {
      "Id": 4,
      "FirstName": "Apple",
      "LastName": "MacCartney",
      "Identification": "",
      "CostingCode": "",
      "EmployeeNumber": "",
      "Department": "",
      "Position": "",
      "CreatedAt": "2017-06-28 00:16:03",
      "LastLogin": "2017-06-29 20:32:31",
      "Role": [
        {
          "Admin": true,
          "Management": true
        }
      ]
    },
    {
      "Id": 2,
      "FirstName": "John",
      "LastName": "Lemon",
      "Identification": "",
      "CostingCode": "",
      "EmployeeNumber": "",
      "Department": "Gerencia General",
      "Position": "Presidente",
      "CreatedAt": "2017-06-28 00:16:03",
      "LastLogin": "2017-06-29 20:30:21",
      "Role": [
        {
          "Admin": true,
          "Management": true
        }
      ]
    }
  ]
}
 

Método: getUser

Método para obtener un usuario con toda su información.

Parámetro Descripción
Método GET
URL https://api.rindegastos.com/v1/getUser
Params Para usar este servicio solo podemos comunicar un parámetro el cual corresponde al Id del usuario o en su defecto si no conocemos el Id podemos pasar la dirección de correo electrónico del usuario que queremos recuperar.
  Id int

Id único del usuario que se desea obtener. (Ejhttps://api.rindegastos.com/v1/getUser?Id=<id>)

  Email string(150) Correo electrónico único correspondiente al usuario que se desea obtener. Id único del usuario que se desea obtener. (Ej.:https://api.rindegastos.com/v1/getUser?Email=<name@company.com>)

A continuación se muestra un ejemplo usando el método getUser de la API de Rindegastos. Este método permite consultar un usuario específico de la empresa. 

https://api.rindegastos.com/v1/getUser?Id=2
METHOD GET
Authorization: Bearer <token>

El resultado ejemplo para esta llamada se muestra a continuación:

{
  "Id": 2,
  "FirstName": "John",
  "LastName": "Lemon",
  "Identification": "",
  "CostingCode": "",
  "EmployeeNumber": "",
  "Department": "Gerencia General",
  "Position": "Presidente",
  "CreatedAt": "2017-06-28 00:16:03",
  "LastLogin": "2017-06-29 20:30:21",
  "Role": [
    {
      "Admin": true,
      "Management": true
    }
  ]
}
 


Ejemplos

Integración estándar

Introducción

El presente documento busca orientar a los desarrolladores que requieran consumir la API de Rindegastos con la finalidad de obtener información de rendiciones de gastos y llevarla a su sistema contable. Este es un ejemplo estándar de cómo se puede abordar el problema de integración de datos y puede modificarse según las necesidades de cada cliente.
Para llevar a cabo la tarea anterior es recomendable que el desarrollador a cargo de consumir los servicios proporcionados por la API tenga al menos manejo de los siguientes puntos:
  • Manejo de algún lenguaje de programación.
  • Experiencia en el consumo de servicios de tipo Rest.
  • Manejo de estructuras JSON.

Conceptos Básicos de la API

Si estás leyendo esto es porque probablemente es la primera vez que utilizaras la API de Rindegastos, por lo tanto lo primero que vamos a repasar de manera breve son algunos conceptos básicos de la API Rindegastos.
Los conceptos básicos que debemos manejar en relación al consumo de la API son:
Autenticación: lo primero que debes considerar antes de consumir nuestra API es que para poder usarla se debe pedir a Rindegastos un TOKEN de acceso. Es importante recalcar que sin este TOKEN no podrás hacer absolutamente nada. El token se puede conseguir fácilmente desde la vista de administración en la cuenta de la empresa. Más información aquí.
Solicitudes: una vez que tengas el TOKEN ya estás listo para consumir nuestra API. Existen variadas plataformas para probar el consumo sin necesidad de pasar directamente a programar (si gustas puedes hacer llamadas usando programas como SOAP UI o Insomnia entre otros) para que te familiarices con la estructura de datos básicos para cada llamada. Más información aquí.
Definiciones: existen algunas definiciones que debemos considerar ya que nuestra API se compone de distintos objetos (Gasto, Informe de Gasto, Fondo, Usuario y Política de Gasto) dentro de los cuales tenemos distintos métodos que nos permitirán llegar a los datos específicos para cada objeto, Por ejemplo si necesitamos ir a buscar la lista de Usuarios registrados de la empresa, usaremos el método getUsers del objeto Usuario.

Integración Estándar en 3 pasos

Tal como indicamos al principio de este documento nuestro objetivo es explicar de manera breve cómo y cuáles métodos consumir dentro de la API de Rindegastos para obtener información de rendiciones de gastos y llevar esta información a otro sistema.

Sin más preámbulo, a continuación se enumeran los pasos a seguir, método a método, para cumplir con el flujo de obtención de datos y el respectivo feedback a Rindegastos.

1. Obtención de informes de gastos cerrados y no integrados

Lo primero que haremos será ir a buscar todos los informes de gastos que han sido rendidos, revisados y cerrados (es decir que ya cumplieron con el flujo de aprobación completo) y que no han sido integrados previamente.

Para la tarea anterior utilizaremos el método getExpenseReports del objeto Informe de Gastos. El resultado del consumo de este método será una estructura de datos JSON que incluye un máximo de 100 registros por página, esto significa que si tienes 1000 informes cerrados sin integrar tendrás que llamar al método 10 veces paginando correctamente.

La llamada a este método y a cualquier otro debe incluir en la cabecera el parámetro authorization con el TOKEN asignado a la empresa y los siguientes parámetros de filtro:

  • Status = 1 (que significa buscar los reportes cerrados)
  • IntegrationStatus = 0 (que significa buscar los informes no integrados).

Por otra parte el método HTTP que utilizaremos para consumir será GET.

Un ejemplo de consumo de este servicio usando CURL sería el siguiente:

curl 'https://api.rindegastos.com/v1/getExpenseReports?Status=1&IntegrationStatus=0' -X GET 
-H 'authorization: Bearer {token} ' -H 'Content-Type: application/json'
Lo anterior retornará una estructura de datos JSON con la siguiente información:
{
  "Records": {
    "TotalRecords": 1,
    "Reports": 1,
    "Page": 1,
    "Pages": 1
  },
  "ExpenseReports": [
    {
      "Id": 1,
      "Title": "New Expense Report",
      "ReportNumber": "1",
      "SendDate": "2017-06-27",
      "CloseDate": "2017-06-29",
      "EmployeeId": 2,
      "EmployeeName": "John Lemon",
      "EmployeeIdentification": "",
      "ApproverId": 4,
      "ApproverName": "Apple MacCartney",
      "PolicyId": 6,
      "PolicyName": "East Devon",
      "Status": 1,
      "CustomStatus": "",
      "FundId": 0,
      "FundName": "",
      "ReportTotal": 36.99,
      "ReportTotalApproved": 36.99,
      "Currency": "GBP",
      "Note": "Check",
      "Integrated": "",
      "IntegrationDate": "",
      "IntegrationExternalCode": "",
      "IntegrationInternalCode": "",
      "NbrExpenses": 3,
      "NbrApprovedExpenses": 3,
      "NbrRejectedExpenses": 0,
      "ExtraFields": [
        {
          "Name": "Costing Code",
          "Value": "London",
          "Code": "0101"
        },
        {
          "Name": "Due Date",
          "Value": "2017-06-20",
          "Code": ""
        }
      ],
      "Files": [
        
      ]
    }
  ]
}
 Una vez que tengamos el resultado de la llamada, podemos tomar el resultado y llevarlo a un arreglo en el lenguaje de programación que estemos utilizando. Por ejemplo si estuviésemos usando PHP podríamos usar json_decode para posteriormente hacer un bucle sobre el atributo ExpenseReports para recorrer todos los informes de gastos encontrados.

 

2. Obtención de los gastos aprobados dentro de cada informe

Ahora que ya tenemos los informes de gastos que no han sido integrados gracias a la llamada getExpenseReports anteriormente detallada, lo que necesitamos hacer es ir a buscar los gastos que están aprobados dentro de cada uno de estos informes de gastos.

Para esto recorrer uno a uno los informes de gastos y para cada uno ejecutar la llamada a un segundo método de la API llamado getExpenses. Este método nos permitirá buscar la lista de gastos incluidos en un informe de gastos específico usando como parámetro de búsqueda el atributo Id, donde Id vendría siendo el identificador del informe de gastos.

Supongamos que este es nuestro código fuente, donde en la variable $json tenemos el resultado de la llamada expuesta en el paso 1:

<?php
//Variable con JSON decodificado
$data = json_decode($json);

//Bucle donde recorremos todas las cabeceras de rendición de gastos
foreach($data->ExpenseReports as $report){

	//Id de cada reporte
        $id_reporte = $report->Id;

        //Llamada a método getExpenses
                         
}

En la llamada al método getExpenses se utiliza la misma metodología de llamada utilizada en la llamada al método getExpenseReports sólo que en esta ocasión nuestro parámetro principal de filtro será ReportId donde pasaremos el valor de Id de cada informe de gastos.

Si tuviésemos que ejecutar dicha llamada usado CURL, sería de la siguiente forma:

curl 'https://api.rindegastos.com/v1/getExpenses?ReportId=1&Status=1' -X GET 
-H 'authorization: Bearer (PONER AQUÍ EL TOKEN DE TU EMPRESA)' -H 'Content-Type: application/json'

Nota: ReportId corresponde al Id del informe de gastos y Status corresponde a al valor de estado del gasto (1 = aprobado o 2 = rechazado)

El resultado en formato JSON sería como el siguiente ejemplo:

{
    "Records": {
        "TotalRecords": 1,
        "Expenses": 1,
        "Page": 1,
        "Pages": 1
    },
    "Expenses": [
        {
            "Id": 839910,
            "Status": 1,
            "Supplier": "PRUEBA ",
            "IssueDate": "2017-08-25",
            "OriginalAmount": 10000,
            "OriginalCurrency": "CLP",
            "ExchangeRate": 0,
            "Net": 8403,
            "Tax": 1597,
            "TaxName": "IVA",
            "OtherTaxes": 0,
            "RetentionName": "",
            "Retention": 0,
            "Total": 10000,
            "Currency": "CLP",
            "Reimbursable": false,
            "Category": "ALIMENTACION",
            "CategoryCode": "610903",
            "CategoryGroup": "",
            "CategoryGroupCode": "",
            "Note": 0,
            "IntegrationDate": "",
            "IntegrationExternalCode": "",
            "ExtraFields": [
                {
                    "Name": "OT",
                    "Value": "",
                    "Code": ""
                },
                {
                    "Name": "Tipo de Documento",
                    "Value": "DOCUMENTO FUERA DE PLAZO",
                    "Code": "87|EL|IVA_NR"
                },
                {
                    "Name": "N° Documento",
                    "Value": "5555",
                    "Code": ""
                },
                {
                    "Name": "Rut",
                    "Value": "77607420-9",
                    "Code": ""
                },
                {
                    "Name": "Sucursal",
                    "Value": "S60 - CASA MATRIZ",
                    "Code": "S60"
                },
                {
                    "Name": "Area",
                    "Value": "A63 - GAF  Y ADMIN",
                    "Code": "A63"
                },
                {
                    "Name": "Centro de Costo",
                    "Value": "C0506001 - STGO SOL NEG TRAD",
                    "Code": "C0506001"
                }
            ],
            "Files": [
                {
                    "FileName": "DATOS BANCARIOS.JPG",
                    "Extension": "jpg",
                    "Original": "https://ppstatic.s3.amazonaws.com/expenses/uploads/original/1-384-59d2906e02993-1506971758-538.jpg",
                    "Large": "https://ppstatic.s3.amazonaws.com/expenses/uploads/large/1-384-59d2906e02993-1506971758-538.jpg",
                    "Medium": "https://ppstatic.s3.amazonaws.com/expenses/uploads/medium/1-384-59d2906e02993-1506971758-538.jpg",
                    "Small": "https://ppstatic.s3.amazonaws.com/expenses/uploads/small/1-384-59d2906e02993-1506971758-538.jpg"
                }
            ],
            "NbrFiles": 1,
            "ReportId": 129906,
            "ExpensePolicyId": 10212,
            "UserId": 5474
        }
    ]
}

A partir del resultado anterior, la operación a seguir para leer el contenido del JSON es similar a la de cuando recorrimos los informes de gastos. Ejemplo:

<?php
//Variable con JSON decodificado
$dataGasto = json_decode($json);

//Bucle donde recorremos todas las cabeceras de rendición de gastos
foreach($dataGasto>Expenses as $expense){

        //datos del gasto
        $id = $expense>Id;
        $proveedor = $expense->Supplier;
        $total = $expense->Total;
        $cuenta_gasto = $expense->CategoryCode;

        //SUB PASO 1 validar /insertar datos
            
        //SUB PASO 2 Registrar resultado integración gasto            
}
 En el código de ejemplo anterior hemos puestos dos subpasos que ya tienen relación con lo que deseas hacer con los datos obtenidos. Por ejemplo en el SUB PASO 1 puedes guardar la información de gastos obtenida en el libro diario de tu empresa, y si el resultado de la inserción es correcta puedes marcar en Rindegastos el gasto específico como Integrado. Esto se realiza usando el método setExpenseIntegration que permite marcar el gasto como integrado y asignar un número de comprobante a este mismo. De esta manera un gasto queda integrado en ambos sistemas.

3. Finalizar la tarea de comunicación de rendiciones.

Para finalizar la tarea de comunicación de rendiciones, se deben marcar como integrados los informes de gastos procesados en Rindegastos. Para esta tarea es necesario llamar a un último método llamado setExpenseReportIntegration. De esta forma al marcar como integrado un informe de gastos, la próxima vez que llamemos al método getExpenseReports filtrando solo por los informes no integrados (IntegrationStatus = 0), no tendremos información duplicada.

Resumen de lo visto

En resumen, la metodología recomendada a seguir, quedaría de la siguiente forma:

<?php

//>PASO 1 leer la lista de reportes no integrados usando método getExpenseReports

//>Variable con JSON decodificado
$data = json_decode($jsonReportes);

//>Bucle donde recorremos todas las cabeceras de rendición de gastos
foreach($data->ExpenseReports as $report){

           //>Id de cada reporte
           $id_reporte = $report->Id;

           //>OBTENER LOS GASTOS DE UNA RENDICION USANDO EL ID DEL REPORTE $id_reporte
           $dataGasto = json_decode($jsonGastos);

           //>Bucle donde recorremos todas las cabeceras de rendición de gastos
           foreach($dataGasto>Expenses as $expense){

                      //datos del gasto
                      $id = $expense>Id;
                      $proveedor = $expense->Supplier;
                      $total = $expense->Total;
                      $cuenta_gasto = $expense->CategoryCode;
                      [...]
                      //SUB PASO 1 validar /insertar datos
            
                      //SUB PASO 2 Registrar resultado integración gasto   setExpenseIntegration (opcional)         
           }
       
//>SI LA INFORMACIÓN DE LOS GASTOS FUE INSERTADA CON ÉXITO EN EL SUB PASO 1, SE RECOMIENDA APLICAR UN SUB PASO 3
//>DONDE SE MARQUE EN RINDEGASTOS LA RENDICIÓN COMO INTEGRADA  setExpenseReportIntegration  (obligatorio para esta forma de integración)

}


Ayuda

Contacto

Esperamos que este breve tutorial te ayude a comenzar una integración de Rindegastos con tu sistema. Sabemos que dudas siempre habrá y por ello estamos aquí para ayudarte. Tan solo contáctate con nosotros aquí  y te podremos ayudar.