Mensagem de commit
Cole a saída do git diff e receba uma mensagem de commit que resume o que mudou e por quê — no formato que o seu time usa, do texto livre ao Conventional Commits. Chega de histórico cheio de “ajustes”, “fix” e “alterações finais 2”: a mensagem nasce do próprio diff.
Rode online
Rode nos nossos servidores com a sua conta. As ferramentas grátis rodam no seu navegador; esta aqui é descontada do seu saldo do KIT pelo preço acima.
Do diff ao texto
Você envia o diff — a saída de um git diff --staged, por exemplo — e a API devolve a mensagem pronta: um título curto no imperativo e, quando a mudança pede, um corpo explicando o contexto. A mensagem descreve o que de fato está no diff, não o que você acha que fez. É útil justamente no fim do dia, quando o commit reúne dez arquivos e a memória já era.
Padronize o time inteiro sem brigar
Adotar Conventional Commits ou outro padrão costuma morrer na praia porque cada dev escreve de um jeito. Chamando a API em um hook de prepare-commit-msg, a mensagem já nasce no formato combinado — feat, fix, chore, escopo entre parênteses — e o dev só edita se quiser. O padrão vira o caminho de menor esforço, e o changelog gerado a partir do histórico finalmente faz sentido.
Preço de centavos, histórico de gente grande
Cada mensagem custa US$ 0,003 pela chamada mais US$ 0,0135 pelo diff processado — menos de US$ 0,02 por commit, em dólares americanos. Um time que faz 200 commits por mês gasta uns US$ 3,30. Sem mensalidade: o pagamento é por uso, direto e sem cadastro, com o valor publicado nesta página. Se o histórico legível economizar uma única sessão de arqueologia no git blame, já se pagou.
Casos de uso
Hook local que escreve por você
Rafael Almeida Costa plugou a API no hook de commit do repositório: ao commitar, o diff staged vai para o serviço e a mensagem sugerida aparece no editor. Ele aceita, ajusta uma palavra ou outra e pronto — o histórico ficou legível sem esforço.
Auditoria e rastreabilidade
Uma software house que atende instituição financeira precisa justificar cada mudança em produção. Mensagens geradas a partir do diff descrevem com precisão o que cada commit altera — e a resposta para “o que entrou na versão de terça?” sai do próprio git log.
Squash de fim de sprint
Na hora de fazer squash de vinte commits bagunçados antes do merge, cole o diff acumulado e receba uma mensagem única que resume a feature inteira. O revisor agradece.
Perguntas frequentes
A mensagem sai em português ou inglês?
Você escolhe na chamada. Times brasileiros que commitam em inglês por convenção recebem o título em inglês; quem prefere histórico em português, idem. O formato — Conventional Commits ou livre — também é configurável.
Meu diff pode conter dados sensíveis?
Pode, e vale prestar atenção nisso: diffs às vezes carregam senhas, chaves e URLs internas. O conteúdo é usado só para gerar a mensagem da sua tarefa, mas a boa prática vale aqui como em qualquer lugar: mantenha segredos fora do código — e, portanto, fora do diff.
Funciona com diff grande, de monorepo?
Funciona; o serviço resume o conjunto. Mas mensagem boa descreve mudança coesa: se o diff mistura três assuntos, o melhor conserto é dividir o commit, não a mensagem.
Dá para usar direto no editor ou no CI?
Sim. É uma chamada HTTP com resposta em JSON: cabe em hook de git, em extensão de editor ou em uma etapa de pipeline que valida e sugere mensagens em pull requests.
Quanto custa e como pago?
US$ 0,003 por chamada mais US$ 0,0135 por diff — pague por uso, via PayPal, sem criar conta. Preço em dólares americanos, publicado aqui, sem letra miúda.
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/dev/commit-message \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/dev/commit-message", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"input": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/commit-message",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"input": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/commit-message", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"input":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"input":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/commit-message", 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
{
"input": "…"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.commit_message",
"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. |
422 | task_failed | A tarefa falhou do nosso lado. Você não paga nada por ela. |