Split de Cobro

En algunos modelos de negocio, el dinero de cada pago recibido se tiene que dividir entre dos o más participantes.

En esta guía te mostramos cómo automatizar esa división entre Cuentas PAGOS360 con nuestra API. Usamos como ejemplo el modelo de marketplace, donde el dinero de cada venta se divide entre el vendedor y la plataforma.

¿Qué es un marketplace?

Un marketplace es una plataforma de ventas online donde distintos comerciantes ofrecen sus productos a los consumidores. Funciona como un mercado online que conecta vendedores con compradores.

Conceptos iniciales

Antes del paso a paso técnico, repasemos cómo se divide un pago recibido.

Hay diferentes estrategias para dividir un pago:

  • Un importe, dos pagos. El total se reparte en dos cobros independientes. Cada participante crea su propia Solicitud de Pago por su parte, y el comprador paga cada una por separado. No es una función de PAGOS360: son dos Solicitudes de Pago comunes, cada una creada con la API Key de su cuenta. El comprador paga dos veces, y vos tenés que resolver el caso en que pague solo una.

  • Un importe, un pago, una transferencia. El comprador paga una sola vez el total en una cuenta, y después una parte de ese dinero se transfiere a otra cuenta. Esta es la estrategia que implementa el Split de Cobro.

El Split de Cobro es una función que genera automáticamente una Transferencia Programada de una Cuenta PAGOS360 a otra en el momento en que se paga una Solicitud de Pago.

En esta guía vamos a usar estos nombres:

Rol

Qué hace

Cuenta origen

Crea la Solicitud de Pago con su API Key, recibe el pago completo y transfiere una parte.

Cuenta destino

Recibe la Transferencia Programada. Tiene que estar habilitada para recibir splits (ver el paso 1).

Tené en cuenta que:

  • Las Transferencias Programadas funcionan solo entre Cuentas PAGOS360 conectadas.

  • El split se define al crear la Solicitud de Pago. El importe que se transfiere es un monto fijo (no un porcentaje).

  • La suma de lo que se transfiere no puede superar un porcentaje máximo del importe de la solicitud, que define PAGOS360 (ver el paso 2).

Diagrama del flujo

En el ejemplo del marketplace, la venta se cobra en la cuenta del vendedor (cuenta origen) y la comisión de la plataforma se transfiere a la cuenta del marketplace (cuenta destino).

sequenceDiagram autonumber actor C as Comprador participant M as Backend del marketplace participant P as API PAGOS360 participant V as Cuenta del vendedor (origen) participant K as Cuenta del marketplace (destino) C->>M: Confirma la compra M->>P: POST /payment-request con transfer_to<br/>y header X-Connect-Account P-->>M: 201 Created (checkout_url) M-->>C: Redirige al checkout_url C->>P: Paga el total en el Checkout P->>V: Acredita el pago completo P-->>M: Webhook payment_request.paid (solicitud original) P->>P: Genera la Transferencia Programada P->>K: Crea una Solicitud de Pago pagada por el importe del split P-->>K: Webhook payment_request.paid (solicitud generada por el split)
Tip

El modelo también funciona al revés (la plataforma cobra y le transfiere una parte al vendedor), siempre que la cuenta que recibe la transferencia sea la habilitada como destino. Como el importe transferido tiene un tope porcentual, el esquema del ejemplo (transferir la comisión) es el que mejor se adapta.

1. Conectar las cuentas

Para conectar las cuentas, contactá a tu ejecutivo de cuenta o a Soporte. La conexión la configura el equipo de PAGOS360 a pedido: hoy no se puede hacer desde la API.

Cuando PAGOS360 habilita una cuenta como destino de Split de Cobro:

  1. Se genera un Marketplace Secret para esa cuenta.

  2. Se habilita el canal Transferencia Programada en su cuadro tarifario.

Para crear solicitudes con split, la cuenta origen necesita dos datos de la cuenta destino:

Dato

Descripción

ID de cuenta

Identificador de la Cuenta PAGOS360 destino (por ejemplo 1A2B3C4D).

Marketplace Secret

Clave secreta de la cuenta destino. Autoriza a enviarle Transferencias Programadas.

Importante

Guardá el Marketplace Secret en tu backend, igual que tu API Key, y mantenelo fuera del navegador y de las apps móviles. Funciona como una credencial: quien lo tiene puede crear solicitudes que le transfieren dinero a la cuenta destino.

La cuenta destino tiene que estar activa. Si no está habilitada, no tiene Marketplace Secret o el secret no coincide, la API rechaza la solicitud (ver Errores frecuentes, más abajo).

2. Crear una Solicitud de Pago con split

El split se crea junto con la Solicitud de Pago, con un POST a /payment-request desde el backend de la cuenta origen. Además de los atributos habituales (Crear solicitud de pago), tenés que enviar:

  • El atributo transfer_to dentro de payment_request, con una lista de transferencias.

  • Un header X-Connect-Account por cada cuenta destino, para autorizar la transferencia.

El atributo transfer_to

transfer_to es un array de objetos. Cada objeto es una Transferencia Programada:

Atributo

Tipo

Obligatorio

Descripción

account_id

string

Sí

ID de la Cuenta PAGOS360 destino. No puede ser la misma cuenta que crea la solicitud.

amount

float

Sí

Importe fijo a transferir, con punto como separador decimal. Tiene que ser mayor a 0.

description

string

Sí

Concepto de la transferencia (entre 1 y 255 caracteres). La cuenta destino lo ve en la descripción de la solicitud que recibe.

external_reference

string

No

Referencia para la cuenta destino (entre 1 y 255 caracteres). Si no la enviás, se usa el external_reference de la solicitud original.

refundable

boolean

No

Indica si la transferencia se revierte cuando se devuelve o se revierte el pago original (ver el paso 3). Si no lo enviás, vale false.

Tope del split: la suma de los amount de transfer_to no puede superar un porcentaje de first_total. Ese porcentaje lo define PAGOS360 (el valor por defecto es 50%). El tope se calcula siempre sobre first_total, aunque la solicitud tenga segundo vencimiento.

El header X-Connect-Account

Por cada cuenta destino, enviá un header con este formato:

X-Connect-Account: <ID de cuenta destino>-<Marketplace Secret>
  • Podés enviar hasta 5 cuentas destino con los headers X-Connect-Account, X-Connect-Account-1, X-Connect-Account-2, X-Connect-Account-3 y X-Connect-Account-4.

  • Cada account_id de transfer_to tiene que tener su header, y cada header tiene que corresponder a un account_id de transfer_to.

  • Usá un valor distinto en cada header.

Ejemplo con curl

En este ejemplo, el vendedor cobra una venta de $10.000 y le transfiere $1.000 de comisión al marketplace:

curl -X POST 'https://api.sandbox.pagos360.com/payment-request' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer <API Key>' \ -H 'X-Connect-Account: 1A2B3C4D-<Marketplace Secret>' \ --data-raw '{ "payment_request": { "payer_name": "Cliente de Prueba", "description": "Pedido PEDIDO-0001", "first_total": 10000.00, "first_due_date": "31-12-2026", "external_reference": "PEDIDO-0001", "transfer_to": [ { "account_id": "1A2B3C4D", "amount": 1000.00, "description": "Comision marketplace pedido PEDIDO-0001", "external_reference": "COMISION-PEDIDO-0001", "refundable": true } ] } }'

En este ejemplo, <API Key> es la API Key de la cuenta origen (la del vendedor), y 1A2B3C4D y <Marketplace Secret> son los datos de la cuenta destino (la del marketplace).

Respuesta

Si la solicitud se crea correctamente, la API responde 201 Created. La respuesta incluye transfer_to tal como lo enviaste (respuesta recortada):

{ "id": 135, "type": "payment_request", "state": "pending", "external_reference": "PEDIDO-0001", "payer_name": "Cliente de Prueba", "description": "Pedido PEDIDO-0001", "first_due_date": "2026-12-31T00:00:00-03:00", "first_total": 10000, "checkout_url": "https://checkout.sandbox.pagos360.com/payment-request/9455caf6-0000-0000-0000-000000000000", "transfer_to": [ { "account_id": "1A2B3C4D", "amount": 1000, "external_reference": "COMISION-PEDIDO-0001", "description": "Comision marketplace pedido PEDIDO-0001", "refundable": true } ] }

A partir de acá, el cobro sigue el flujo habitual: llevás al comprador al checkout_url (ver la guía de Botón de Pago Dinámico).

3. Qué pasa cuando se paga

Cuando se acredita el pago de la Solicitud de Pago, PAGOS360 procesa el split de forma asincrónica (en segundo plano). Por cada elemento de transfer_to:

  1. En la cuenta destino se crea una nueva Solicitud de Pago, ya en estado paid, por el importe de amount. Esa solicitud tiene:

    • description: Pago en cuenta conectada <nombre de la cuenta origen> (ID <id de la solicitud original>). Concepto: <description>.

    • external_reference: el de transfer_to o, si no lo enviaste, el de la solicitud original.

    • payer_name: el nombre de la cuenta origen.

  2. En la cuenta origen se registra la Transferencia Programada, que descuenta amount de su saldo. En el historial de movimientos figura como Transferencia Programada a <nombre de la cuenta destino> (<ID de cuenta destino>).

En los pagos con medios en efectivo o por archivo de rendición (por ejemplo Rapipago, Pago Fácil o débito en CBU), el split se genera cuando PAGOS360 procesa la rendición del medio de pago, es decir, el informe con los cobros que ese medio recibió.

Importante

Asegurate de que la cuenta destino esté activa: si no lo está en el momento del pago, esa transferencia no se genera. El importe de la transferencia es siempre el amount que enviaste, aunque el comprador pague con segundo vencimiento.

Estados de la Transferencia Programada

Estado

Descripción

pending

La transferencia se generó, pero el dinero todavía no está disponible.

transferred

El dinero ya está disponible en la cuenta destino.

refunded

La transferencia se revirtió (ver más abajo).

La transferencia pasa a transferred cuando el cobro de la cuenta origen queda disponible, según los plazos de acreditación del medio de pago con el que se pagó.

Comisiones

  • La cuenta origen paga la comisión del cobro según su cuadro tarifario, calculada sobre el importe total pagado. La transferencia no tiene una comisión adicional para la cuenta origen.

  • La cuenta destino recibe el dinero como un cobro por el canal Transferencia Programada, al que se le aplican las condiciones de su propio cuadro tarifario para ese canal.

Devoluciones y contracargos

Si se devuelve el pago original o el comprador desconoce el cargo (contracargo), lo que pasa con la transferencia depende de refundable:

refundable

Qué pasa con la transferencia

true

Se revierte: se le descuenta el importe a la cuenta destino, la transferencia pasa a refunded y la cuenta destino recibe el webhook reverted de la solicitud que había recibido. La cuenta origen solo necesita saldo por el importe que le quedó.

false

No se revierte. La cuenta origen asume el total de la devolución y necesita saldo suficiente para cubrirla.

La reversión solo se aplica si la solicitud de la cuenta destino todavía está en estado paid.

4. Webhooks y consultas

Cada cuenta recibe los webhooks en la URL que tiene configurada (Webhooks):

Cuenta

Evento

Cuándo

Origen

payment_request / paid

Cuando se paga la solicitud original.

Origen

payment_request / refunded o reverted

Cuando se devuelve o se revierte el pago original.

Destino

payment_request / paid

Cuando se genera la Transferencia Programada. El entity_id es el de la nueva solicitud en la cuenta destino.

Destino

payment_request / reverted

Cuando se revierte una transferencia con refundable: true.

Ejemplo del webhook que recibe la cuenta destino:

{ "entity_name": "payment_request", "type": "paid", "entity_id": 136, "payload": { "id": 136, "request_result_id": 547, "external_reference": "COMISION-PEDIDO-0001" } }

Para consultar el detalle, cada cuenta usa GET /payment-request/{id} con su propia API Key (Consultar solicitud de pago):

  • La cuenta origen consulta la solicitud original. La respuesta incluye transfer_to con las transferencias que pediste.

  • La cuenta destino consulta la solicitud generada por el split, con el id que recibe en el webhook.

Tip

Usá external_reference en transfer_to para que la cuenta destino pueda conciliar cada transferencia con la venta que la originó.

La API pública no tiene hoy un endpoint para consultar el estado de una Transferencia Programada (pending, transferred o refunded).

Errores frecuentes

Si falla la validación, la API responde 400 Bad Request.

Mensaje

Causa y solución

El importe total del split de cobro debe ser menor al 50% del importe de la solicitud de pago

La suma de amount supera el tope (el porcentaje del mensaje es el configurado), o falta amount en algún elemento. Revisá los importes.

No puede realizar un split de cobro a la misma cuenta que origino la solicitud de pago

Un account_id es el ID de la misma cuenta que crea la solicitud. Usá el ID de la cuenta destino.

account destination <ID> unauthorized

Falta el header X-Connect-Account para ese account_id, el secret no coincide, la cuenta destino no está habilitada o está inactiva. También aparece si enviás un header que no corresponde a ningún account_id de transfer_to.

Header duplicado <valor>

Enviaste el mismo valor en dos headers X-Connect-Account. Usá un valor distinto en cada uno.

Se deben ingresar como máximo 5 headers de distintas cuentas

Enviaste más de 5 headers X-Connect-Account. Enviá hasta 5.

Los errores de headers llegan con este formato:

{ "status_code": 400, "message": [ "account destination 1A2B3C4D unauthorized" ] }

Si falta account_id, amount o description, o si amount es 0 o negativo, la API devuelve un error de validación sobre transfer_to.