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

Se incorpora el campo opcional:



ParámetroDescripción del CampoEjemploValidaciónTipo
amountMonto de la transacción o cantidad300Debe ser un número no negativofloat
currencyMoneda. Posibles valores:
PEN
USD
PENstring
typeMétodo de pago (bank_transfer, yape, services)allstring
defaultMétodo de pago por defectoyapestring

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)

  • 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ámetroDescripción del CampoEjemploValidaciónTipo
consumer_idDNI/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.123456787 u 8 dígitosstring
consumer_id_typeTipo de documento del usuario. Posibles valores:
dni
ce (Carné de Extranjería)
pas (Pasaporte)
dni
store_credentialsVariable para permitir el guardado o no de la credenciales.falseboolean
token_passwordString devuelto si se inició un pago con store_credentials: true.def50200c5cfd43dg4...string
sandboxPara crea un pago en ambiente de pruebafalseboolean
redirect_urlURL a la que se redirigirá al cliente cuando el proceso haya finalizado.https://redirect.floid.aiURL válidastring
webhook_urlURLa la que se enviará el resultado de la operación.https://webhook.floid.aiURL válida
expiration_dateHora 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 ser
YYYY-MM-DD hh:mm:ss
2030-01-01 10:00:30fechastring
customInformación que se devuelve al webhook al finalizar la operaciónstring
bankDefine el banco a utilizar para realizar la transferencia. Posibles valores:
banco_bcp_personas transferencia_bancaria_personas
string
recipientDatos 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/..."
}