El objetivo es que el empleado tenga un porcentaje de su salario disponible, no el 100% del mismo.
En este orden de ideas, para que una compañía que contrató la plataforma de Payflow pueda prestar correctamente el servicio de salario bajo demanda a sus empleados, es necesario que: 1.Mantenga actualizada de manera diaria la información básica necesaria a nivel empleados: altas, bajas y modificaciones 2.Consuma la información de pagos (también de manera diaria) para que la compañía pueda reportarla en su sistema de nómina y realizar los pagos.
/employees y /payments:/employees permite Crear/Editar/Desactivar empleados en el Panel de control/payments permite recoger las transacciones de los empleados al software de nómina1. Flujo de sincronización de empleados (POST /employees).Este endpoint de nuestra API funciona como un método POST + PUT a pesar de que solo hagas POST: 1.Crea empleados 2.Actualiza empleados (datos y estado)
2. Flujo de sincronización de pagos (GET /payments).Este endpoint de nuestra API disponibiliza las transacciones hechas en Payflow por los empleados de tu empresa.
Para que un colaborador pueda usar la plataforma de Payflow, tiene que ser en primer lugar dado de alta: es decir, debe de ser creado como un potencial usuario por su empresa en su panel de control de Payflow.
El objetivo de este flujo es garantizar que solo los empleados correctos puedan usar Payflow y que sus datos estén actualizados.
Es importante recordar que Payflow es una plataforma provista por el empleador y el colaborador no puede modificar ningún dato allí. En caso de querer cambiar algo tiene que ir a su empleador y que este haga la modificación en el HR software, luego esta integración sincronizará los cambios en Payflow. Esto evita fraudes y garantiza la correcta prestación del servicio.
| Nombre del campo en la API Payflow | Familia del campo | Descripción | Tipo de campo/limitaciones | Mandatorio? |
|---|---|---|---|---|
| payrollId | Datos identificativos | ID del empleado en tu software de nómina | String (máx. 100 caracteres) | NO |
| personalId | Datos identificativos | Número de documento de identificación válido | String (máx. 100 caracteres) | SI |
| documentType | Datos identificativos | Tipo de documento de identificación | String (máx. 100 caracteres) | SI |
| firstName | Datos identificativos | Nombre completo del empleado | String (máx. 100 caracteres) | SI |
| lastName | Datos identificativos | Apellidos completos del empleado | String (máx. 100 caracteres) | SI |
| Datos de contacto | Dirección de email válida del empleado | String (no puede ser genérico, debe ser único) Emails inválidos serán anulados | SI [requerido si no hay número de teléfono] | |
| phone | Datos de contacto | Número de teléfono válido del empleado | String (no puede ser genérico, debe ser único) Números de teléfono inválidos serán anulados - Se puede enviar sin el indicativo de país | SI [requerido si no hay email] |
| address | Datos de contacto | Dirección del empleado | String (máx. 100 caracteres) | SI |
| bankAccountNumber | Datos de salario y bancarios | Número de cuenta bancaria del empleado. | String (máx. 100 caracteres) | SI |
| bankAccountType | Datos de salario y bancarios | Tipo de cuenta bancaria del empleado. | String (máx. 100 caracteres) Valores posibles: savings (ahorros), checking (corriente) | SI |
| bankEntity | Datos de salario y bancarios | Nombre del banco | String (máx. 100 caracteres) ver entidades bancarias soportadas abajo | SI |
| netSalary | Datos de salario y bancarios | Salario neto del empleado (después de impuestos) | Number (Debe ser entero positivo) Si se proporciona grossSalary, no envíes netSalary | SI [requerido si no hay grossSalary] |
| grossSalary | Datos de salario y bancarios | Salario del empleado antes de impuestos | Number (Debe ser entero positivo) Si se proporciona netSalary, no envíes grossSalary | SI [requerido si no hay netSalary] |
| startDate | Datos de contrato | Fecha de inicio de contrato del empleado | String Debe ir en formato YYYY-MM-DD | NO |
| contractEnd | Datos de contrato | Fecha de fin de contrato en formato | String Debe ir en formato YYYY-MM-DD | NO |
| status | Datos de contrato | Estado del empleado. | String Valores posibles: active, inactive, on_leave | SI |
| subsidiary | Datos de contrato | RUC de filial a la que pertenece | String | SI |
| availableAmount | Datos de salario y bancarios | Monto disponible para retiro | Number (Debe ser entero positivo) | NO [Es para uso en proyectos Payflow especiales, se recomienda usar grossSalary o netSalary] |
bankEntity)bankEntity, en la fila de la derecha están las variaciones aceptadas en caso de no enviarla como en la fila izquierda.| Entidad Bancaria Normalizada | Variaciones Aceptadas |
|---|---|
| CENTRAL DE RESERVA DEL PERU | - |
| CREDITO DEL PERU | - |
| INTERNACIONAL DEL PERU (INTERBANK) | INTERBANK |
| CITIBANK DEL PERU | - |
| SCOTIABANK PERU | - |
| BBVA PERU | BBVA |
| PICHINCHA | - |
| LA NACION | - |
| COMERCIO | - |
| FINANCIERO DEL PERU | - |
| INTERAMERICANO DE FINANZAS | - |
| CREDISCOTIA FINANCIERA | - |
| MIBANCO, LA MICRO EMPRESA | - |
| GNB PERU | - |
| FALABELLA | - |
| RIPLEY | - |
| SANTANDER PERU | - |
| CAJA METROPOLITANA DE LIMA | - |
status)status:active → Puede usar Payflow, es un empleado activo en la empresainactive → No puede usar Payflow, ya no trabaja en la empresaon_leave → No puede usar Payflow temporalmente, baja temporal definida por las reglas de negociostatus = "on_leave" y así cumplir con los estándares de integración estándar contra la API de Payflow son:Estándar operativo: Envía las actualizaciones de todos los empleados de forma masiva usando el método POST (en batches de máximo 500 idealmente) y el endpoint /employees.Nuestra API es capaz de tomar una petición por segundo desde una misma IP, no más que esto porque nuestro firewall te puede bloquear. Frecuencia sugerida: 1 - 2 veces al día (si tienes >1000 empleados) o cada 4 - 8 horas (si tienes <1000 empleados). Esto es totalmente parametrizable.
Evita errores comunes: Envía todos los datos obligatorios. No uses salario = 0 para inactivar, usar siempre el campo status.No dejes de enviar empleados para inactivar, usar siempre el campo status.Envía nombres y apellidos completos
Tips técnicos: Maneja errores 503 con retries y backoff. Asegura que tu sistema aguante el volumen: CPU, memoria, timeouts. Documenta las reglas clave para tu equipo: salarios y estados.
0. Cumplir con los prerrequisitos: Acceso al Panel de control de Payflow - el equipo te dará el acceso. La URL base y los endpoints: Ambiente de pruebas: URL base: https://api-public.payflow-dev.net endpoint a usar: https://api-public.payflow-dev.net/employees Producción: URL base: https://api-public.payflow.es endpoint a usar: https://api-public.payflow.es/employees La API key. Esta la puedes generar en el panel de control siguiendo estos pasos: 1.Entra al apartado "integraciones" —> "integraciones" 2.Selecciona API Payflow 3.Dale al botón "Generar API Key" 4.Guarda en un lugar seguro la API Key para poder usarla en la integración Puedes volver acá para generar una nueva cuando quieras En postman se vería así:
1. Extraer los datos necesarios de los empleados del HR software.
2. Ajustar estos datos en el formato JSON aceptado por la API de Payflow (máximo batches de 500 empleados por envío). Ejemplo del JSON a enviar (batch de 5 empleados) [ { "firstName": "Test User", "lastName": "Prueba Uno", "payrollId": "PRUEBAPAYROLLID10000", "personalId": "02859099", "documentType": "DNI", "email": "test_user_peru1989@payflow.com", "phone": "997920008", "bankAccountNumber": "19439033816000", "bankEntity": "CREDITO DEL PERU", "bankAccountType": "savings", "address": "Edificio Lievano, Calle 11", "grossSalary": 2000, "startDate": "2022-01-01", "contractEnd": "2050-01-01", "subsidiary": "20610044612", "status": "active" }, { "firstName": "Prueba", "lastName": "Prueba Dos", "payrollId": "PRUEBAPAYROLLID10001", "personalId": "70326000", "documentType": "DNI", "email": "test_user_peru4252@payflow.com", "phone": "963889000", "bankAccountNumber": "204230294838", "bankEntity": "INTERBANK", "bankAccountType": "savings", "address": "Edificio Lievano, Calle 11", "grossSalary": 1300, "startDate": "2018-01-01", "contractEnd": "2050-01-01", "subsidiary": "20610044612", "status": "active" }, { "firstName": "Test User", "lastName": "Prueba Tres", "payrollId": "PRUEBAPAYROLLID10002", "personalId": "72183989", "documentType": "DNI", "email": "test_user_peru19630@payflow.com", "phone": "963889001", "bankAccountNumber": "22969294810", "bankEntity": "BBVA", "bankAccountType": "savings", "address": "Edificio Lievano, Calle 11", "grossSalary": 5500, "startDate": "2000-01-01", "contractEnd": "2050-01-01", "subsidiary": "20610044612", "status": "active" }, { "firstName": "Test User", "lastName": "Prueba Cuatro", "payrollId": "PRUEBAPAYROLLID10003", "personalId": "75995676", "documentType": "DNI", "email": "test_user_peru19550@payflow.com", "phone": "963139001", "bankAccountNumber": "29983849909", "bankEntity": "CREDITO DEL PERU", "bankAccountType": "savings", "address": "Edificio Lievano, Calle 11", "grossSalary": 1500, "startDate": "1999-01-01", "contractEnd": "2050-01-01", "subsidiary": "20610044612", "status": "active" }, { "firstName": "Test User", "lastName": "Prueba Cinco", "payrollId": "PRUEBAPAYROLLID10004", "personalId": "001461111", "documentType": "C_EXTRANJERIA", "email": "test_user_peru3119@payflow.com", "phone": "963139002", "bankAccountNumber": "27469294838", "bankEntity": "SCOTIABANK PERU", "bankAccountType": "savings", "address": "Edificio Lievano, Calle 11", "grossSalary": 1000, "startDate": "2022-01-02", "contractEnd": "2050-01-01", "subsidiary": "20610044612", "status": "active" } ]En postman se vería así
3. Utilizar el método POST apuntando al endpoint /employeesde la API de Payflow con estos batches de máximo 500 empleados.
Para la preparación de la nómina de los colaboradores, es necesario que los pagos realizados en la plataforma de Payflow sean registrados en el software de nómina correctamente para su deducción de la nómina del periodo.
El objetivo de este flujo es garantizar que las transacciones realizadas en Payflow sean descontadas de la nómina de los empleados.
Hay que tener en cuenta que aunque la nómina se pague a final de mes o de la quincena, puede suceder que se paguen liquidaciones/finiquitos durante los períodos a colaboradores que se retiran. En estos casos se necesitará considerar y descontar las transacciones hechas en la plataforma de Payflow.
| Nombre del campo en la API Payflow | Descripción |
|---|---|
| id | ID único de cada transacción |
| user | Número de documento de identificación del empleado que hizo la transacción |
| userPayrollId | ID del empleado en tu software de nómina |
| amount | Monto solicitado por el empleado |
| fee | Costo de transacción (siempre es 0) |
| status | Estado de la transacción |
| paid | Boolean que confirma si fue pagado o no |
| requestedAt | Fecha y hora de la solicitud por parte del empleado |
| paidAt | Fecha y hora de la recepción de la transacción |
| message | N/A |
| informedToIntegration | Boolean que confirma si la transacción fue informada al software de nómina o no |
status)La API solo te mostrará los estados processedyprocessingpero te dejamos el detalle para que conozcas los demás
| estado | definición | es estado final? |
|---|---|---|
| pending | Pendiente: El pago ha sido solicitado por el colaborador pero aún no ha sido enviado al banco para ejecución. | NO |
| processing | En proceso: El pago ha sido enviado al banco, aún no ha sido confirmado. | NO |
| processed | Procesado: El banco ha confirmado que la transacción se ha procesado correctamente. | SI |
| canceled | Cancelado: La transacción ha sido cancelada y no se pagó. | SI |
| delayed | Demorado: La transacción ha sido enviada al banco pero se encuentra demorada. | NO |
| error | El banco ha informado que hay un error en esta transacción y no se puede procesar, la transacción no se pagó. | SI |
La API te mostrará todas las transacciones, con status=processedoprocessinguna a una, que se han hecho en tu empresa al menos que uses parámetros en los headers para filtrarlas.
paid Booleano para mostrar solo las transacciones que se han/o no se han pagado paid = true- te trae las transacciones pagadas hasta el momentopaid = false- te trae las transacciones no pagadas hasta el momentoEn postman se vería así:
convoluted Booleano que muestra la suma de las transacciones junto con el transaction id para cada empleado de la empresa. convoluted = true- te trae la suma de transacciones con sus id's por empleadoconvoluted = false- te trae las transacciones una a unaEn postman se vería así: Y el JSON de la respuesta de la API Payflow se vería así: { "data": [ { "ids": [ "luqmR001", "aaa4Fc2e28" ], "user": "001461111", "userPayrollId": "abc39485", "amount": 130, "fee": 0, "informedToIntegration": false, "paid": true, "firstTransactionRequestedAt": "2025-01-24T00:00:00.000Z", "lastTransactionRequestedAt": "2025-01-28T14:28:29.000Z", "TransactionPaidAt": "2025-01-24T00:00:00.000Z", "lastTransactionPaidAt": "2025-01-28T14:28:29.000Z" }, { "ids": [ "aaa4Fc2e23", "aaa4Fc2e29" ], "user": "75995676", "userPayrollId": "abc39489", "amount": 250, "fee": 0, "informedToIntegration": false, "paid": true, "firstTransactionRequestedAt": "2025-01-24T00:00:00.000Z", "lastTransactionRequestedAt": "2025-02-03T13:41:55.000Z", "TransactionPaidAt": "2025-01-24T00:00:00.000Z", "lastTransactionPaidAt": "2025-02-03T13:41:55.000Z" } ] }
start Fecha desde la cual comienza la búsqueda en formato AAAA-MM-DDSi la combinas con endpuedes obtener las transacciones entre días específicos.En postman se vería así:
end Fecha hasta la cual finaliza la búsqueda en formato AAAA-MM-DDSi la combinas con startpuedes obtener las transacciones entre días específicos.En postman se vería así:
cycle Fecha del ciclo de pago formato YYYY-MMEn postman se vería así:
/payments/acknowledgeinformedToIntegration de false (valor por defecto) a true.informedToIntegration=true) de las que aún no (informedToIntegration=false)Estándar operativo: Realiza las consultas de las transacciones de los empleados usando el método GET y el endpoint /paymentsUtiliza el idde cada transacción para identificarla en tu sistema para que no se dupliquen transacciones.Todos los pagos En ProcesoyProcesadosdeben ser recogidos e incorporados como novedad en la nómina; ya que los pagosEn Procesoya están en manos del banco receptor y pasarán a serprocesadosen el corto plazo.Si decides implementar el acknowledge payments, debes usar el método PUT y el endpoint /payments/acknowledgeFrecuencia sugerida: 1 - 2 veces al día (si tienes >1000 empleados) o cada 4 - 8 horas (si tienes <1000 empleados). Esto es totalmente parametrizable.
Evita errores comunes: Antes de construir este flujo, asegúrate de que existe un concepto en la nómina de tu empresa a donde deban llegar las transacciones de Payflow para ser descontadas.
Tips técnicos: Asegura que tu sistema aguante el volumen: CPU, memoria, timeouts.
0. Cumplir con los prerrequisitos: Concepto de nómina creado en el HR Software para hacer los descuentos de transacciones Payflow, usualmente lo llaman "Anticipo Payflow" Acceso al Panel de control de Payflow - el equipo te dará el acceso. La URL base y los endpoints: Ambiente de pruebas: URL base: https://api-public.payflow-dev.net endpoint a usar: https://api-public.payflow-dev.net/payments Producción: URL base: https://api-public.payflow.es endpoint a usar: https://api-public.payflow.es/payments La API key es la misma que generaste para el flujo de empleados Definir si usarás algún parámetro para filtrar las transacciones desde la API de Payflow
1. Utilizar el método GET para extraer los datos de las transacciones desde Payflow. Ejemplo del JSON que se obtiene del endpoint { "data": [ { "id": "aaa4Fc2e271", "user": "1022142724", "userPayrollId": "37112", "amount": 100, "fee": 0, "status": "processed", "paid": true, "requestedAt": "2025-11-07T17:03:00.000Z", "paidAt": "2025-11-07T17:03:00.000Z", "message": null, "informedToIntegration": false }, { "id": "Xcdmr6ooo9", "user": "1022142724", "userPayrollId": "37112", "amount": 500, "fee": 0, "status": "processed", "paid": true, "requestedAt": "2025-11-21T09:17:00.000Z", "paidAt": "2025-11-21T09:17:00.000Z", "message": null, "informedToIntegration": false } ] }En postman se vería así
2. Tomar los datos necesarios de la respuesta de la API de Payflow para incorporarlos al HR Software en el concepto de nómina destinado para las transacciones Payflow. Los datos necesarios van a variar dependiendo del HR Software y sus requerimientos para crear una novedad de nómina, pero usualmente se toman por lo menos: idpara identificar la transacción y evitar duplicadosusery/ouserPayrollIdpara identificar al empleado al que se le hará el descuentoamountpara poner en el concepto el monto a descontar
3. (Opcional pero recomendado) Utilizar el método PUT apuntando al endpoint /payments/acknowledgede la API de Payflow para marcar las transacciones informadas al HR Software.Este endpoint permite cambiar el valor de la variable informedToIntegrationdefalse(valor por defecto) atrue.Ambiente de pruebas: URL base: https://api-public.payflow-dev.net endpoint a usar: https://api-public.payflow-dev.net/payments/acknowledge Producción: URL base: https://api-public.payflow.es endpoint a usar: https://api-public.payflow.es/payments/acknowledge Ejemplo del JSON que se debe enviar en el body del request { "paymentsToMarkAsInformed": [ "aaa4Fc2e1", "aaa4Fc2e2", "aaa4Fc2e3" ] }Ejemplo del JSON que se obtiene del endpoint { "paymentsMarked": [ "aaa4Fc2e1", "aaa4Fc2e2", "aaa4Fc2e3" ] }Una vez marcadas todas las transacciones informadas, en el siguiente consumo del endpoint /paymentsverás la variableinformedToIntegration=trueen las transacciones que enviaste en este paso.
Acá te acompañaremos en cada paso y estaremos dispuestos a agendar sesiones de trabajo contigo y tu equipo para resolver cualquier duda! Los pasos para implementar esta integración son:
Ver cantidad total de empleados tanto en el HR Software como en el panel de control de Payflow (la manera más fácil es descargarlos en excel desde "ver empleados" en el panel de control de Payflow y hacer estos chequeos en excel). Ver esa cantidad separada por sociedades en caso de que trabajemos con más de 1 entidad legal, ver que estas coinciden. Ordenar la columna 'Salario neto' de Menor a Mayor. Revisar tanto los salarios más bajos, como los altos, para corroborar que la info se envió correctamente y no hay datos raros como 0s, negativos, números extremadamente altos, etc. Revisar 5 personas en particular y de manera aleatoria para controlar que la información es correcta: Nombre, salario, datos bancarios completos, estado y número identificatorio fiscal de la entidad legal a la que están vinculados.
Siempre es una buena práctica generar algún tipo de monitoreo de lo que está sucediendo en la integración.
URL API desarrollo: https://api-public.payflow-dev.net/
Dashboard desarrollo: https://dashboard.payflow-dev.net/auth/login
URL API Producción: https://api-public.payflow.es/
Dashboard Producción: https://admin.payflow.es/auth/login