Liquidar despesas em grupo
Digite o saldo líquido de cada pessoa e receba uma lista curta de quem paga a quem: se Alice tem 50 a receber, Bob deve 30 e Carol deve 20, dois pagamentos para Alice acertam o grupo inteiro. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Depois de uma viagem, uma república ou um jantar de equipe, todo mundo sabe grosso modo quem pagou o quê — mas converter esses saldos líquidos em transferências bancárias reais é confuso. Esta ferramenta de acerto de despesas em grupo recebe o saldo líquido de cada pessoa (valor pago menos valor devido) e devolve uma lista compacta de quem deve pagar a quem e quanto, para que o grupo fique totalmente quitado sem IOUs circulares. Saldos positivos significam que alguém deve receber dinheiro; negativos, que ainda deve. As somas precisam fechar em zero; se não fecharem, a calculadora rejeita a entrada em vez de inventar um residual silencioso.
O que significam os saldos líquidos e por que devem somar zero
Um saldo líquido é o resumo mais simples das despesas compartilhadas: para cada pessoa, subtraia o que ela deveria cobrir do que realmente pagou. Se Alice pagou sessenta de uma conta compartilhada e sua parte justa era quarenta, o líquido dela é mais vinte — ela deve receber vinte de volta. Se Bob não pagou nada de um total do qual ainda deve trinta, o líquido dele é menos trinta.
Quando todas as pessoas de um grupo fechado estão listadas, os líquidos positivos e negativos se cancelam: o dinheiro que saiu dos bolsos do grupo precisa reaparecer como pagamento a mais de outra pessoa. Por isso esta calculadora de acerto exige que os saldos somem zero dentro de uma tolerância numérica mínima. Se a soma não for zero, a planilha está incompleta — falta alguém, uma cota foi digitada errado ou moedas foram misturadas — e inventar transferências esconderia o erro.
São necessárias pelo menos duas pessoas; um único nome não pode acertar consigo mesmo. Cada nome deve ser único para que a lista de transferências não tenha ambiguidade sobre quem paga a quem. Saldos zero são permitidos: pessoas já equilibradas simplesmente não aparecem como remetentes nem destinatários no resultado.
Como a lista mínima de transferências é montada
O algoritmo é o clássico fluxo de caixa mínimo guloso das apps de acerto: divide o grupo em devedores (saldo negativo, ainda devem) e credores (saldo positivo, devem receber). Cópias de trabalho rastreiam quanto cada devedor ainda precisa pagar e quanto cada credor ainda precisa receber. Em cada passo, o maior devedor restante paga o máximo possível ao maior credor restante, gerando uma transferência desse valor; em seguida ambas as obrigações diminuem.
Quando o valor restante de uma pessoa chega a zero, ela sai da fila; o processo continua até zerar todo líquido diferente de zero. O número de transferências é no máximo um a menos que o de pessoas com saldo diferente de zero — bem menos do que rotear toda dívida por um único tesoureiro quando muitos pagamentos bilaterais podem se cancelar localmente. Campos opcionais são omitidos em vez de null.
Quando vale a pena acertar assim
Organizadores de viagem colam os líquidos de uma planilha e mandam aos amigos uma lista curta de pagamentos em vez de reunir capturas de três apps diferentes. Repúblicas e grupos de coliving que fecham utilidades mensais querem um plano reproduzível que ainda funcione quando o líquido de um colega for zero. Anfitriões de hackathon e meetup que adiantam local ou comida precisam de um acerto justo sem construir Splitwise do zero.
Equipes de produto que embutem finanças de grupo em bots de chat chamam o mesmo módulo puro da ferramenta web gratuita, para que demos e produção não divirjam em casos limite como grupos já quitados ou trocas entre duas pessoas. Validação falha — pessoas ausentes, nomes duplicados, saldos não finitos ou soma diferente de zero — não consome saldo.
Mantenha as requisições pequenas, fixe a lista de transferências nos testes e obtenha um plano confiável de quem deve a quem para eventos, residências e automação sem montar um livro de despesas completo.
Casos de uso
Acerto de viagem e fim de semana
Converta o líquido pago-menos-devido de cada viajante em uma lista curta de transferências bancárias para que ninguém fique com um IOU após as férias.
Utilidades mensais entre colegas de casa
Depois de somar aluguel, luz e compras, acerte os líquidos residuais com o menor número de pagamentos de quarto a quarto no mês.
Perguntas frequentes
Como calcular transferências de acerto a partir de saldos de grupo?
Envie people como um array de {name, balance} em que balance é pago menos devido. Positivo significa que devem receber dinheiro; negativo, que devem.
Por que os saldos devem somar zero?
Em um grupo fechado, pagamentos a mais e a menos se cancelam.
O que significa um saldo positivo ou negativo?
Saldo positivo: a pessoa pagou a mais e deve receber dinheiro. Saldo negativo: pagou a menos e deve pagar. Zero significa já acertado e não aparece nas transferências.
É a mesma coisa que dividir a conta por pesos?
Não. Um divisor de despesas compartilhadas transforma valores de itens e pesos na cota de cada pessoa. Esta ferramenta de acerto parte de líquidos já existentes e só planeja quem paga a quem.
Quantas transferências são necessárias para acertar um grupo?
No máximo, uma a menos que o número de pessoas com saldo diferente de zero. Com três pessoas devendo ou a receber, dois pagamentos bastam, e quem já está zerado fica fora da lista.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"people": [
{
"name": "Alice",
"balance": 50
},
{
"name": "Bob",
"balance": -30
},
{
"name": "Carol",
"balance": -20
}
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.who_owes_who_settle_up",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
O que significam os saldos líquidos e por que devem somar zero
O endpoint então falha com invalid_input e uma mensagem clara de que os saldos devem somar zero, para que você corrija as entradas antes de alguém enviar dinheiro.
Como a lista mínima de transferências é montada
Os campos de saída incluem person_count, balance_sum (sempre zero em sucesso), transfer_count, total_transferred (soma dos valores), transfers como array de from, to e amount, e uma string curta de resumo. Os valores são arredondados para JSON estável. Combine este endpoint com sua própria interface de livro-razão se precisar de recibos ou conversão multicurrency; a capacidade só planeja transferências numéricas puras em uma unidade de conta.
Quando uma API de acerto vale a pena
Como a implementação é parse pura de nível A, cada chamada bem-sucedida custa o preço base publicado US$ 0,002, sem tokens de modelo e sem rede de saída.
Casos de integração
Automação com bot de chat e planilha
Envie linhas de saldos fechados de uma planilha ou bot para a API e publique o plano de transferências de volta no canal do grupo.
Perguntas técnicas
Quanto custa a calculadora de acerto de despesas em grupo?
A ferramenta no navegador é gratuita. Solicitações API usam saldo KIT pré-pago a US$ 0,002 por chamada bem-sucedida; entrada inválida não é cobrada.