Liquidar gastos de grupo
Escriba el saldo neto de cada persona y obtenga una lista breve de quién paga a quién: si a Alice le deben 50, Bob debe 30 y Carol debe 20, dos pagos a Alice saldan todo el grupo. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Tras un viaje, un piso compartido o una cena de equipo, todo el mundo sabe a grandes rasgos quién pagó qué, pero convertir esos saldos netos en transferencias bancarias reales resulta engorroso. Esta herramienta de liquidación de gastos de grupo toma el saldo neto de cada persona (importe pagado menos importe debido) y devuelve una lista compacta de quién debe pagar a quién y cuánto, de modo que el grupo quede saldado por completo sin deudas circulares. Los saldos positivos indican que alguien debe recibir dinero; los negativos, que aún adeuda. Las sumas deben cerrar a cero; si no lo hacen, la calculadora rechaza la entrada en lugar de inventar un residual silencioso.
Qué significan los saldos netos y por qué deben sumar cero
Un saldo neto es el resumen más simple de los gastos compartidos: para cada persona, reste lo que debía cubrir de lo que realmente pagó. Si Alice pagó sesenta de una cuenta compartida y su parte justa era cuarenta, su neto es más veinte: debe recuperar veinte. Si Bob no pagó nada de un total del que aún adeuda treinta, su neto es menos treinta.
Cuando se enumera a todas las personas de un grupo cerrado, los netos positivos y negativos se anulan: el dinero que salió de los bolsillos del grupo debe reaparecer como un sobrepago de otra persona. Por eso esta calculadora de liquidación exige que los saldos sumen cero dentro de una tolerancia numérica mínima. Si la suma no es cero, la hoja está incompleta —falta alguien, se escribió mal una parte o se mezclaron monedas— e inventar transferencias ocultaría el error.
Se exigen al menos dos personas; un solo nombre no puede liquidarse consigo mismo. Cada nombre debe ser único para que la lista de transferencias no tenga ambigüedad sobre quién paga a quién. Se admiten saldos cero: las personas ya equilibradas simplemente no aparecen como emisores ni receptores en el resultado.
Cómo se construye la lista mínima de transferencias
El algoritmo es el clásico flujo de caja mínimo codicioso de las aplicaciones de liquidación: divide el grupo en deudores (saldo negativo, aún adeudan) y acreedores (saldo positivo, deben recibir). Las copias de trabajo rastrean cuánto debe pagar aún cada deudor y cuánto debe cobrar aún cada acreedor. En cada paso, el mayor deudor restante paga lo máximo posible al mayor acreedor restante, generando una transferencia de ese importe; luego se reducen ambas obligaciones.
Cuando el importe restante de una persona llega a cero, sale de la cola; el proceso continúa hasta liquidar todo neto distinto de cero. El número de transferencias es como máximo uno menos que el de personas con saldo distinto de cero —mucho menos que enrutar toda deuda por un único tesorero cuando muchos pagos bilaterales pueden cancelarse localmente. Los campos opcionales se omiten en lugar de null.
Cuándo conviene liquidar así
Los organizadores de viajes pegan los netos de una hoja de cálculo y envían a sus amigos una lista corta de pagos en lugar de recopilar capturas de tres aplicaciones distintas. Los pisos compartidos y grupos de convivencia que cuadran utilidades mensuales quieren un plan reproducible que siga funcionando cuando el neto de un compañero sea cero. Los anfitriones de hackatones y meetups que adelantan el local o la comida necesitan una liquidación justa sin construir Splitwise desde cero.
Los equipos de producto que integran finanzas de grupo en bots de chat llaman al mismo módulo puro que usa la herramienta web gratuita, de modo que demos y producción no divergen en casos límite como grupos ya saldados o intercambios entre dos personas. La validación fallida —personas ausentes, nombres duplicados, saldos no finitos o suma distinta de cero— no consume saldo.
Mantenga las solicitudes pequeñas, fije la lista de transferencias en las pruebas y obtendrá un plan fiable de quién debe a quién para eventos, hogares y automatización sin montar un libro de gastos completo.
Qué puede hacer con ella
Liquidación de viaje y fin de semana
Convierta el neto pagado-menos-debido de cada viajero en una lista breve de transferencias bancarias para que nadie se quede con un pagaré tras las vacaciones.
Utilidades mensuales de compañeros de piso
Tras sumar alquiler, luz y compra, liquide los netos residuales con el menor número de pagos de habitación a habitación del mes.
Preguntas frecuentes
¿Cómo se calculan las transferencias de liquidación a partir de saldos de grupo?
Envíe people como una matriz de {name, balance} donde balance es pagado menos debido. Positivo significa que deben recibir dinero; negativo, que adeudan.
¿Por qué los saldos deben sumar cero?
En un grupo cerrado, los sobrepagos y los infrapagos se anulan.
¿Qué significa un saldo positivo o negativo?
Saldo positivo: la persona pagó de más y debe recibir dinero. Saldo negativo: pagó de menos y debe abonar. Cero significa ya liquidado y no aparecerá en las transferencias.
¿Es lo mismo que dividir una cuenta por pesos?
No. Un divisor de gastos compartidos convierte importes e ítems y pesos en la parte de cada persona. Esta herramienta de liquidación parte de netos ya existentes y solo planifica quién paga a quién.
¿Cuántas transferencias hacen falta para saldar un grupo?
Como máximo, una menos que el número de personas con saldo distinto de cero. Con tres personas que deben o a las que deben, bastan dos pagos, y quien ya está a cero no aparece en la lista.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/math/who-owes-who-settle-up \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"people":[{"name":"Alice","balance":50},{"name":"Bob","balance":-30},{"name":"Carol","balance":-20}]}'const res = await fetch("https://api.kit.forhosting.com/math/who-owes-who-settle-up", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"people": [
{
"name": "Alice",
"balance": 50
},
{
"name": "Bob",
"balance": -30
},
{
"name": "Carol",
"balance": -20
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/who-owes-who-settle-up",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"people": [
{
"name": "Alice",
"balance": 50
},
{
"name": "Bob",
"balance": -30
},
{
"name": "Carol",
"balance": -20
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/who-owes-who-settle-up", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"people":[{"name":"Alice","balance":50},{"name":"Bob","balance":-30},{"name":"Carol","balance":-20}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"people":[{"name":"Alice","balance":50},{"name":"Bob","balance":-30},{"name":"Carol","balance":-20}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/who-owes-who-settle-up", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"people": [
{
"name": "Alice",
"balance": 50
},
{
"name": "Bob",
"balance": -30
},
{
"name": "Carol",
"balance": -20
}
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.who_owes_who_settle_up",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Qué significan los saldos netos y por qué deben sumar cero
El endpoint falla entonces con invalid_input y un mensaje claro de que los saldos deben sumar cero, para que usted corrija las entradas antes de que alguien envíe dinero.
Cómo se construye la lista mínima de transferencias
Los campos de salida incluyen person_count, balance_sum (siempre cero si tiene éxito), transfer_count, total_transferred (suma de importes), transfers como matriz de from, to y amount, y una cadena breve de resumen. Los importes se redondean para un JSON estable. Combine este endpoint con su propia interfaz de libro contable si necesita recibos o conversión multimoneda; la capacidad solo planifica transferencias numéricas puras en una unidad de cuenta.
Cuándo una API de liquidación merece la pena
Como la implementación es parse pura de nivel A, cada llamada correcta cuesta el precio base publicado $0.002, sin tokens de modelo ni red saliente.
Casos de integración
Automatización con bot de chat y hoja de cálculo
Envíe filas de saldos cerrados desde una hoja o un bot a la API y publique el plan de transferencias de vuelta en el canal del grupo.
Preguntas técnicas
¿Cuánto cuesta la calculadora de liquidación de gastos de grupo?
La herramienta del navegador es gratuita. Las solicitudes API usan saldo KIT prepago a $0.002 por llamada correcta; la entrada inválida no se factura.