Crie um slug de URL a partir de uma branch Git
Converta um nome de branch Git como feature/add-user-login em um slug curto e adequado para URL, sem levar o prefixo do fluxo ao resultado.
Executar grátis
A capacidade reconhece o primeiro segmento do caminho como o tipo da branch, mantém tudo o que vem depois como parte descritiva e normaliza esse conteúdo em palavras minúsculas separadas por hífens. O processo é determinístico, dispensa acesso à rede e informa um erro claro quando existe um prefixo, mas não há uma descrição aproveitável.
Separe os metadados do fluxo da descrição útil
Equipes que usam Git normalmente iniciam nomes de branches com um tipo de fluxo, como feature, fix, chore, release ou docs. Esse primeiro segmento ajuda pessoas e automações a entender por que a branch existe, mas em geral é ruído em uma URL pública. Esta capacidade considera o texto antes da primeira barra como o prefixo de tipo e deriva o slug somente do conteúdo posterior. Por exemplo, feature/add-user-login vira add-user-login, enquanto fix/checkout/payment-timeout resulta em checkout-payment-timeout. Caminhos descritivos aninhados são preservados como palavras, em vez de descartados, permitindo que sua equipe mantenha escopos relevantes sem expor barras na URL final. Um prefixo opcional refs/heads/, frequentemente retornado por ferramentas Git e sistemas de integração contínua, é removido antes da interpretação. A operação não mantém uma lista fechada de tipos aceitos. Qualquer primeiro segmento não vazio pode ser o prefixo, portanto a mesma regra funciona com convenções locais como spike, experiment, maintenance ou um fluxo de chamados definido pela sua organização.
Entenda exatamente como o slug é normalizado
Depois de selecionar a parte descritiva, o algoritmo aplica uma sequência estável de transformações. Ele remove espaços das extremidades, normaliza caracteres latinos acentuados, converte letras em minúsculas, troca cada sequência que não seja formada por letras ASCII ou dígitos por um hífen e elimina hífens no início e no fim. Barras, espaços, sublinhados, pontuação e separadores repetidos passam, assim, à mesma forma segura para URL. Uma branch como feature/Account Settings_v2 se torna account-settings-v2. O resultado é intencionalmente previsível: não há modelo de linguagem, dicionário, consulta de rede, valor aleatório, horário nem estado do repositório. A função não inventa palavras nem tenta interpretar identificadores de chamados. Números existentes na descrição continuam presentes, o que ajuda em nomes como fix/PROJ-482-login-loop. Como a normalização pode remover símbolos e sistemas de escrita não compatíveis, a capacidade ainda verifica se resta ao menos uma letra ou um número utilizável. Se a descrição contiver apenas pontuação ou caracteres incapazes de formar o slug ASCII aceito, será retornado um erro de entrada em vez de um valor vazio silencioso.
Use o resultado com segurança em publicações e automações
O objeto retornado contém um único campo, slug, e pode alimentar diretamente uma prévia de documentação, uma URL de ambiente efêmero, um caminho de notas de versão, uma página de alterações ou um fluxo de publicação de pull requests. Valide o resultado antes de reservar uma rota caso seu destino imponha regras adicionais, como comprimento máximo, caminhos protegidos ou exigência de exclusividade. Esta capacidade não consulta seu roteador, provedor de hospedagem, serviço Git ou banco de conteúdo, portanto não sabe se o slug já está ocupado. Ela também não verifica se a string fornecida corresponde a uma branch existente; apenas aplica a convenção documentada. Branches sem barra, nomes que terminam logo após o prefixo e descrições normalizadas como slug vazio são rejeitados. Essa falha rigorosa é útil em automações porque uma origem malformada não publica acidentalmente em uma rota vazia ou genérica. Em automações via API, cada solicitação usa o preço-base publicado de US$ 0,002. A mesma transformação determinística pode ser executada no navegador para conversões individuais rápidas.
Casos de uso
Nomeie uma implantação de prévia
Transforme uma branch de funcionalidade em um caminho legível para um ambiente isolado de revisão, sem o prefixo do fluxo.
Crie um caminho para notas de versão
Derive um segmento de URL consistente da parte descritiva de uma branch release ou fix para notas geradas.
Padronize links de pull requests
Normalize descrições aninhadas de branches em links estáveis e minúsculos usados em documentação e automações.
Perguntas frequentes
O que é considerado prefixo de tipo?
É o primeiro segmento não vazio antes da primeira barra. Pode ser feature, fix, chore ou qualquer tipo adotado pela sua equipe.
O que acontece com caminhos aninhados?
Todos os segmentos após a primeira barra pertencem à descrição, e seus separadores se tornam hífens no slug.
Posso enviar um nome refs/heads completo?
Sim. O início refs/heads/ é removido antes da identificação do prefixo de tipo e da parte descritiva.
Por que uma branch sem barra falha?
A capacidade exige prefixo de tipo e parte descritiva distintos, então um nome único sem separação é ambíguo.
A ferramenta verifica se a branch existe?
Não. Ela apenas processa texto de modo determinístico e nunca acessa um repositório ou serviço de hospedagem Git.
Quanto custa uma solicitação de API?
Cada solicitação de API usa o preço-base publicado de US$ 0,002; a versão do navegador executa localmente a mesma transformação.
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/slug-from-git-branch \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"branch":"feature/add-user-login"}'const res = await fetch("https://api.kit.forhosting.com/dev/slug-from-git-branch", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"branch": "feature/add-user-login"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/slug-from-git-branch",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"branch": "feature/add-user-login"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/slug-from-git-branch", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"branch":"feature/add-user-login"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"branch":"feature/add-user-login"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/slug-from-git-branch", 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
{
"branch": "feature/add-user-login"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.slug_from_git_branch",
"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. |