Payin Perú
La API de Payinde Floid Perú permite recibir pagos cuenta a cuenta utilizando distintos medios de pago locales, a través de unpayment_url embebible.
Con esta versión es posible:
- Realizar pagos por transferencia bancaria
- Realizar pagos vía Yape
- Realizar pagos vía Pago de Servicios (CIP)
- Mostrar todos los métodos en un solo widget
El response es siempre unificado.

1️⃣ Crear Pago (Create Payin)
Endpoint
POST {{HOST}}/pe/payments/create
Autenticación
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
Request
{
"amount": 1000,
"currency": "PEN",
"type": "all",
"default": "yape",
"webhook_url": "https://webhook.site/..."
}
2️⃣ Nuevo campo type
typeSe incorpora el campo opcional:
| Parámetro | Descripción del Campo | Ejemplo | Validación | Tipo |
|---|---|---|---|---|
| amount | Monto de la transacción o cantidad | 300 | Debe ser un número no negativo | float |
| currency | Moneda. Posibles valores:PENUSD | PEN | string | |
| type | Método de pago (bank_transfer, yape, services) | all | string | |
| default | Método de pago por defecto | yape | string |
Valores permitidos
- "bank_transfer"
- "yape"
- "services"
- "all"
- (próximamente) "qr_payment"
En caso de que type=all el cliente puede incluir el parámetro default indicando el servicio que se despliegue por defecto, por ejemplo si default es yape, entonces el widget se mostrará todos los medios de pago pero por defecto el yape.
3️⃣ Comportamiento del Widget
🔹 Sin type (compatibilidad backward)
type (compatibilidad backward)- Se asume modo
all - El widget muestra:
- Bank Transfer
- Yape
- Pago de Servicios (CIP)
- Método inicial por defecto:
bank_transfer
🔹 type = "all"
Permite mostrar todos los métodos y definir cuál se muestra primero.
{
"amount": 1000,
"currency": "PEN",
"type": "all",
"default": "yape",
"webhook_url": "https://webhook.site/..."
}
Con el siguiente response
{
"code": 200,
"payment_token": "fca6b40e-8a25-47f7-a085-868da5fcee1d",
"payment_url": "https://payments.floid.app/?id=fca6b40e-8a25-47f7-a085-868da5fcee1d"
}
Si default no se envía → inicia en bank_transfer.
🔹 type = "bank_transfer"
{
"amount": 1000,
"currency": "PEN",
"type": "bank_transfer",
"webhook_url": "https://webhook.site/..."
}

🔹 type = "yape"
{
"amount": 1000,
"currency": "PEN",
"type": "yape",
"phone": "5121312321",
"name": "Andrés Poblete",
"webhook_url": "https://webhook.site/..."
}
El backend genera un document_id que se embebe en el deeplink de Yape
como:
consumerCode=<document_id>el cual permite realizar el pago desde la app de yape
El usuario al ingresar al link, será redirigido a la app de yape mostrando el recibo pendiente asociado a Floid Pago. Una vez realizado el pago el widget mostrará que el pago ha sido realizado exitosamente
🔹 type = "services" (CIP)
Pago de servicios via banco BCP
{
"amount": 1000,
"currency": "PEN",
"type": "services",
"webhook_url": "https://webhook.site/..."
}
El widget mostrará instrucciones y el código CIP.
4️⃣ Response Unificado
{
"code": 200,
"payment_token": "c0d5a05c-19ed-4282-9ed7-9ee722d3b3d0",
"payment_url": "https://payments.floid.app/?id=c0d5a05c-19ed-4282-9ed7-9ee722d3b3d0"
}
Dentro del request es posible enviar campos opcionales:
Opcionales: Listados de campos opcionales al request para adecuaciones custom.
| Parámetro | Descripción del Campo | Ejemplo | Validación | Tipo |
|---|---|---|---|---|
| consumer_id | DNI/ID del usuario. Si se indica, no se permitirá cambiar en el widget y por lo tanto el pago deberá ser realizado por una cuenta bancaria asociada a este DNI/ID. | 12345678 | 7 u 8 dígitos | string |
| consumer_id_type | Tipo de documento del usuario. Posibles valores:dnice (Carné de Extranjería)pas (Pasaporte) | dni | ||
| store_credentials | Variable para permitir el guardado o no de la credenciales. | false | boolean | |
| token_password | String devuelto si se inició un pago con store_credentials: true. | def50200c5cfd43dg4... | string | |
| sandbox | Para crea un pago en ambiente de prueba | false | boolean | |
| redirect_url | URL a la que se redirigirá al cliente cuando el proceso haya finalizado. | https://redirect.floid.ai | URL válida | string |
| webhook_url | URLa la que se enviará el resultado de la operación. | https://webhook.floid.ai | URL válida | |
| expiration_date | Hora y fecha de expiración del flujo. En caso de no incluirse, el tiempo de expiración por defecto es de 30 minutos desde su creación. El formato debe serYYYY-MM-DD hh:mm:ss | 2030-01-01 10:00:30 | fecha | string |
| custom | Información que se devuelve al webhook al finalizar la operación | string | ||
| bank | Define el banco a utilizar para realizar la transferencia. Posibles valores:banco_bcp_personas transferencia_bancaria_personas | string | ||
| recipient | Datos del destinatario (ver tabla datos recipient) | object |
5️⃣ Estados del Pago
- PENDING
- SUCCESS
- SUCCESS_OVERPAID (solo aplica a bank_transfer)
- SUCCESS_UNDERPAID (solo aplica a bank_transfer)
- EXPIRED
- CANCELED
6️⃣ Webhooks
Cuando el estado cambia, Floid enviará un JWT al webhook_url
configurado con:
- payment_token
- status
- transfer_data
- amount
- step
- payment_id
- custom (si aplica)
7️⃣ Sandbox
{
"amount": 1000,
"currency": "PEN",
"sandbox": 1,
"webhook_url": "https://webhook.site/..."
}
Updated about 11 hours ago
