Payout Perú

📘

Versión quedará deprecada a contar del 01 de marzo de 2026. Se recomienda utilizar la API V2

API Payouts - Perú

Esta documentación para desarrolladores proporciona toda la información necesaria para integrar el servicio de Payouts en Perú.

Tabla de Contenidos

  1. Requisitos
  2. Diagrama de integración
  3. Autenticación
  4. Endpoints API Payouts
  5. Manejo de errores
  6. Webhooks
  7. Sandbox Payouts
  8. Ejemplos de llamados

1. Requisitos

  • Una clave API o Token de Floid habilitada con el servicio de payouts. Para activar esto debes contactarte con el equipo comercial de Floid.
  • Entorno de Desarrollo: Configura tu entorno de desarrollo con las bibliotecas necesarias para realizar solicitudes HTTPs.
  • Saldo disponible en tu cuenta para realizar las dispersiones

👍

Recuerda que siempre vas a necesitar el token de Floid para consumir los servicios de Floid.

2. Diagrama de integración

❗️

Si el saldo de tu cuenta no es suficiente para cubrir las dispersiones, la solicitud no se realizará hasta que exista un monto suficiente.

3. Autenticación

La autenticación se realiza mediante un token de API. Este token debe ser incluido en los encabezados de todas las solicitudes.

Encabezados de Autenticación

Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json

4. Endpoints de la API

Host Producción: https://api.floid.app

Crear un Payout

URL: {{HOST}}/pe/payout/create

Postman Collection 🟠

Método: POST

Descripción: Crea un nuevo payout o dispersión para uno o más beneficiarios en Perú.

Body de la Solicitud:

{
    "currency": 1,
    "amount": 3,
    "beneficiary_account": "00200000123456789012",
    "callbackurl": "https//..." // Opcional
}

Parámetros:

ParámetroDescripciónTipoRequeridoLongitud
currencyCódigo de moneda (1 Soles, 2 Dólares americanos)Short4.0
amountImporte de la transferencia en la moneda indicada. Se validará que no sea cero. Se permiten hasta dos decimales.Double18.2
beneficiary_accountCódigo de cuenta interbancario (CCI) del beneficiario finalString20
callbackurlURL del servicio donde se recibirán las notificacionesStringNo-

La API de payout es una orquestación de servicios que se conecta como interoperador antes nuestros partners. En ese sentido, la respuesta de nuestra api para pagos exitosos se basa en dos casos:

  1. Respuesta a cuentas beneficiarias al Banco De Crédito del Perú
  2. Respuesta a cuentas beneficiarias diferentes al Banco De Crédito del Perú

Respuesta Exitosa a cuentas Banco De Crédito del Perú

{
    "code": 200,
    "msg": "OK",
    "caseid": "ea92asda28-9768-4aec-b3e2-05169a92f5ea",
    "date": "2025-10-12 10:12:18",
    "status": "SUCCESSFUL",
    "data": {
        "BeneficiaryBank": "Banco De Crédito Del Perú",
        "Amount": 21,
        "BeneficiaryAccount": "1231321321321321",
        "DebtorAccount": "3452343243242423",
        "TransferId": "FLOID-9be89asdjw2c"
    },
    "consumerId": "-"
}

Respuesta Exitosa a cuentas NO Banco De Crédito del Perú

{
    "code": 200,
    "msg": "OK",
    "caseid": "c0202468-05d7-4891-9ea4-27b7123jh5d34",
    "date": "2025-10-06 09:08:03",
    "status": "SUCCESSFUL",
    "data": {
        "BeneficiaryDocument": "12313213",
        "BeneficiaryName": "ANDRES ACOSTA POBLETE",
        "BeneficiaryAddress": "",
        "BeneficiaryPhone": 0,
        "BeneficiaryMobile": 0,
        "BeneficiaryBank": "BBVA Continental",
        "Amount": "2",
        "TransferId": "209809808979790372432
        "BankTransferId": 1111111,
        "ResponseDescription": "Response"
    },
    "consumerId": "-"
}

Estados Posibles:

StatusDescripción
PENDINGLa transferencia está siendo procesada
SUCCESSFULLa transferencia se completó exitosamente
ERRORHubo un error en la transferencia

Consultar el Estado de un Payout

URL: {{HOST}}/pe/payout/status

Postman Collection 🟠

Método: POST

Descripción: Obtiene el estado de un payout previamente creado.

Body:

{
    "payout_caseid": "39fbf970-0eda-4a09-aee7-29cb8d41fbd9"
}

Parámetros:

ParámetroDescripciónTipoRequerido
payout_caseidIdentificador único del payoutString

Respuesta Exitosa:

{
    "code": 200,
    "msg": "OK",
    "caseid": "39fbf970-0eda-4a09-aee7-29cb8d41fbd9",
    "date": "2024-08-02 12:03:25",
    "status": "SUCCESSFUL",
    "data": {
        "BeneficiaryDocument": "111111111",
        "BeneficiaryName": "MARIA ALBERTINA TAMOS LLACSAHUANGA",
        "BeneficiaryAddress": "",
        "BeneficiaryPhone": 0,
        "BeneficiaryMobile": 0,
        "BeneficiaryBank": "Banco De Crédito Del Perú",
        "Amount": "1",
        "TransferId": "2024080211031600588191101930",
        "BankTransferId": 262301,
        "ResponseDescription": "Contabilización exitosa. Mod: 21 Trn: 2035 Rel: 6."
    }
}

Bancos Disponibles en Perú

  • BCP (Banco de Crédito del Perú)
  • Falabella
  • BANBIF
  • BBVA
  • SCOTIABANK
  • PICHINCHA
  • INTERBANK
  • RIPLEY
  • Banco de la Nación
  • Mi Banco
  • Caja Arequipa
  • Caja Cuzco
  • Caja Huancayo
  • Caja Piura
  • Caja Sullana
  • Caja Trujillo

5. Manejo de Errores

Estructura de Respuesta de Error

{
    "code": 400,
    "error_type": "string",
    "error_code": "string",
    "error_message": "string",
    "display_message": "string",
    "caseid": "string"
}
ParámetroDescripciónTipo
codeCódigo HTTP del error.Int
error_typeCódigo específico del error definido por Floid.String
error_codeCódigo específico del error definido por Floid. Se puede usar programáticamente.String
error_messageMensaje que entrega detalles sobre el error. Puede cambiar con el tiempo por lo que no debe ser usado programáticamente.String
display_messageMensaje con detalles del error que puede ser mostrado al usuario en tu front-end . Puede cambiar con el tiempo por lo que no debe ser usado programáticamente.String
caseidIdentificador único para cada request que se realiza a la API de Floid. Se generará al inicio de la consulta y será parte del response.String

Ejemplos

{
  "code": 400,
  "error_type": "PAYOUTS",
  "error_code": "INVALID_PAYOUT_TOKEN",
  "error_message": "Payouts token is not valid.",
  "display_message": "El token de payouts no es válido",
  "caseid":"' . $caseid . '"
}
{
  "code": 400,
  "error_type": "TRANSFER",
  "error_code":  "TRANSFER_ERROR",
  "error_message": "' . $error_message . '",
  "display_message": "' . $display_message . '",
  "caseid":"' . $caseid . '"
}
{
  "code": 400,
  "error_type": "INVALID_CCI",
  "error_code": "INVALID_CCI",
  "error_message": "El CCI ingresado no es válido",
  "display_message": "El CCI ingresado no es válido",
  "caseid":"' . $caseid . '"
}
{
  "code": 400,
  "error_type": "TRANSFER",
  "error_code": "TRANSFER_ERROR",
  "error_message": "There was an error making the transfer. (Tipo de Cuenta a Acreditar Inv\u00e1lido)",
  "display_message": "Ha habido un error realizando la transferencia. (Tipo de Cuenta a Acreditar Inv\u00e1lido)",
  "caseid": "673be354ae265369b630f030"
}
{
  "code": 400,
  "error_type": "API_ERROR",
  "error_code": "INVALID_REQUEST",
  "error_message": "The request is not valid. Check the body and headers and try again.",
  "display_message": "La request no es válida. Revisa el body y headers e intenta nuevamente. ' . $message . '",
  "caseid":"' . $caseid . '"
}
{
  "code": 400,
  "error_type": "API_ERROR",
  "error_code": "INVALID_REQUEST_AMOUNT",
  "error_message": "The amount to be transferred must be different from 0.00.",
  "display_message": "Monto a transferir debe ser distinto a 0.00",
  "caseid":"' . $caseid . '"
}
{
  "code": 400,
  "error_type": "SERVICE_ERROR",
  "error_code": "SERVICE_UNAVAILABLE",
  "error_message": "The service is unavailable",
  "display_message": "The service is unavailable.",
  "caseid": "xxxx - xxx - xxxx"
}
{
  "code": 400,
  "error_type": "AUTH_ERROR",
  "error_code": "METHOD_NOT_AUTH",
  "error_message": "This method is not authorized",
  "display_message": "El metodo no está autorizado",
  "caseid": "xxxx - xxx - xxxx"
}
{
  "code": 429,
  "error_type": "TOO_MANY_REQUESTS",
  "error_code": "TOO_MANY_REQUESTS",
  "error_message": "Too many Requests.",
  "display_message": "Ha superado el limite de requests.",
  "caseid": "xxxx - xxx - xxxx"
}
{
  "code": 481,
  "error_type": "ERROR_GENERAL",
  "error_code": "DATA_FAILED",
  "error_message": "Error al intentar obtener los resultados. Por favor reintentar.",
  "display_message": "Error al intentar obtener los resultados. Por favor reintentar.",
  "caseid": "xxxx - xxx - xxxx"
}

Códigos de Error

Errores de Servicio

Parámetro CodeMSJDescription
400INVALID_PAYOUT_TOKENEl token de payouts no es válido
400TRANSFER_ERRORNo se pudo realizar la transferencia.
400INVALID_CCIEl CCI ingresado no es válido
400INVALID_REQUESTLa request no es válida. Revisa el body y headers e intenta nuevamente.
400INVALID_REQUEST_AMOUNTMonto a transferir debe ser distinto a 0.00.

Errores Generales

Parámetro CodeMSJDescription
400INVALID_REQUESTLa solicitud contiene parámetros inválidos o faltantes.
400INVALID_CREDENTIALSCredenciales de la cuenta inválidas.
400METHOD_NOT_AUTHEl token de API es inválido o ha expirado para consumir el servicio.
400NOT_FOUNDEl recurso solicitado no fue encontrado.
400SERVICE_UNAVAILABLEEl servicio de la API de Floid no está disponible en el momento de la consulta.
400INVALID_PAYOUT_TOKENEl token de payouts no es válido
429TOO_MANY_REQUESTSHa superado el límite de requests por segundo.
481DATA_FAILEDError al intentar obtener la respuesta a la consulta.
500INTERNAL_ERROROcurrió un error interno en el servidor.

6. Webhooks

Para recibir notificaciones en tiempo real sobre cambios en los estados de los payouts, agrega el parámetro callbackurl al body de tu solicitud.

Ejemplo con Webhook:

{
    "currency": 1,
    "amount": 3,
    "beneficiary_account": "00200000123456789012",
    "callbackurl": "https://tu-webhook.com/endpoint"
}

Verificación de Webhooks:

Para verificar la autenticidad de los webhooks, puedes configurar una secret key. Contacta con nuestro equipo técnico para configurar esto.

7. Sandbox Payouts

Para pruebas, utiliza los siguientes datos de prueba:

  • CCIS de prueba:
    00310001700199141199: success cuentas no bcp
    00200000123456789012: success cuentas bcp
    22222222222222222222: moneda inválida
    33333333333333333333: cuenta bloqueada
    44444444444444444444: máx de operaciones diarias
    55555555555555555555: sin fondos
  • Monto de prueba: Cualquier valor entre 1 y 1000
  • Currency: 1 (Soles)

8. Ejemplos de llamados

Crear Payout

curl -X POST "https://api.floid.app/pe/payout/create" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "currency": 1,
    "amount": 100.50,
    "beneficiary_account": "00200000123456789012",
    "callbackurl": "https://tu-webhook.com/endpoint"
  }'

Consultar Estado

curl -X POST "https://api.floid.app/pe/payout/status" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "payout_caseid": "39fbf970-0eda-4a09-aee7-29cb8d41fbd9"
  }'