Split (repartir entre receptores)
El Split reparte un pago entre varios receptores según reglas por banco de origen. Se arma en tres pasos: registras al partner, creas el acuerdo de recepción (split-receiving) y luego recibes el pago normalmente (Botón o Solicitud).
1. Registra el partner (receptor)
curl -X POST https://sim-productos.abiertolab.com/api/v1/ext/partner \
-H "Authorization: Bearer <token>" -H "Content-Type: application/json" \
-d '{
"name": "Partner 1",
"identification": "J-12345678-9",
"contact_email": "partner@ejemplo.com",
"contact_phone": "+58-412-0000000",
"bank_code": "0105",
"payment_phone_or_cnta": "01050000000000000000",
"user_type": "comercial"
}'
2. Crea el acuerdo de recepción (split-receiving)
curl -X POST https://sim-productos.abiertolab.com/api/v1/ext/split-receiving-agreements \
-H "Authorization: Bearer <token>" -H "Content-Type: application/json" \
-d '{
"title": "Partner 1 (recepción)",
"description": "Recibir de marketplace X",
"default_bank_account_id": "uuid_sofitasa_001",
"rules": [
{ "origin_bank_code": "0105", "destination_bank_account_id": "uuid_mercantil_007" },
{ "origin_bank_code": "0108", "destination_bank_account_id": "uuid_provincial_001" }
]
}'
rules— por cada banco de origen, a qué cuenta destino se reparte.
3. Recibe el pago normalmente
Crea la sesión (Botón o Solicitud) con tu agreement_id habitual. El reparto se aplica en la acreditación (leg 2): el dinero se distribuye a los receptores configurados. → Botón web · Transacción a dos tiempos.
Un solo webhook_url, varias llamadas
Configuras un único webhook_url por sesión — el mismo campo que usas en cualquier pago, con o sin split. La diferencia en split es que ese mismo endpoint recibe varias llamadas para una sola sesión, no una:
- Una por receptor, cuando se le acredita su parte:
payment_session.accreditation_to_recipient_completed(marcado "en desarrollo" en el contrato). - Una de cierre, cuando termina el reparto completo:
payment_session.accredited— la misma que en un pago sin split, aquí con el resumen de lo acreditado a todos los receptores.
No hay una URL por receptor ni un webhook_url distinto por partner: todo llega a tu único endpoint, y distingues cada llamada por su event y por el id del receptor dentro del payload.
Un receptor (rcv_…) es un destino de fondos: la cuenta bancaria a la que se acredita su parte (default_bank_account_id en el acuerdo de recepción — ver paso 2). No tiene webhook propio: las notificaciones del split siempre llegan a tu webhook_url, nunca al receptor.
Probar en el simulador
Fuerza ambos tiempos y observa el webhook de acreditación:
curl -X POST https://sim-productos.abiertolab.com/control/sessions/<id>/outcome \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" -d '{"leg":1,"outcome":"paid"}'
curl -X POST https://sim-productos.abiertolab.com/control/sessions/<id>/outcome \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" -d '{"leg":2,"outcome":"accredited"}'
# -> webhook payment_session.accredited (con el resumen de lo acreditado a todos los receptores)
Hoy el simulador emite la llamada de cierre (accredited); la llamada por receptor (accreditation_to_recipient_completed) es parte del contrato pero aún no la reproduce. En producción, prepárate para recibir ambas.
El flujo completo (partner → split-receiving → botón → paid + accredited) está verificado contra el simulador (simulador/test/func/guides.func.test.ts).