Cree un slug URL desde el nombre de una rama Git
Convierta un nombre de rama Git como feature/add-user-login en un slug breve y apto para URL, sin incluir el prefijo del flujo de trabajo.
Ejecutar — gratis
La capacidad reconoce el primer segmento de la ruta como tipo de rama, conserva como descripción todo lo posterior y lo normaliza como palabras en minúsculas separadas por guiones. Es determinista, no requiere acceso a la red y devuelve un error claro cuando la rama tiene un prefijo, pero carece de una descripción utilizable.
Separe los metadatos del flujo de la descripción útil
Los equipos que usan Git suelen iniciar los nombres de rama con un tipo de flujo, como feature, fix, chore, release o docs. Ese primer segmento ayuda a las personas y a la automatización a entender el propósito de la rama, pero normalmente sobra en una URL pública. Esta capacidad interpreta el texto anterior a la primera barra como prefijo de tipo y deriva el slug únicamente de todo lo posterior. Por ejemplo, feature/add-user-login se convierte en add-user-login, mientras que fix/checkout/payment-timeout produce checkout-payment-timeout. Las rutas descriptivas anidadas se conservan como palabras en lugar de descartarse, de modo que su equipo puede mantener ámbitos significativos sin exponer barras en la URL final. Antes de interpretar la rama se elimina el prefijo opcional refs/heads/, que suelen devolver las herramientas Git y los sistemas de integración continua. La operación no utiliza una lista cerrada de tipos admitidos. Cualquier primer segmento no vacío puede actuar como prefijo, por lo que la misma regla funciona con convenciones propias como spike, experiment, maintenance o el flujo de incidencias de su organización.
Comprenda cómo se normaliza exactamente el slug
Tras seleccionar la parte descriptiva, el algoritmo aplica una secuencia estable de transformaciones. Elimina espacios exteriores, normaliza caracteres latinos acentuados, convierte las letras a minúsculas, sustituye cada grupo de caracteres que no sean letras ASCII ni dígitos por un guion y quita los guiones iniciales y finales. Por tanto, barras, espacios, guiones bajos, signos de puntuación y separadores repetidos convergen en la misma forma segura para URL. Una rama como feature/Account Settings_v2 se convierte en account-settings-v2. El resultado es deliberadamente previsible: no intervienen modelos lingüísticos, diccionarios, consultas de red, valores aleatorios, marcas temporales ni el estado del repositorio. La función no inventa palabras ni intenta interpretar identificadores de incidencias. Los números presentes en la descripción se mantienen, algo útil para nombres como fix/PROJ-482-login-loop. Como la normalización puede eliminar símbolos y escrituras no admitidas, la capacidad comprueba además que quede al menos una letra o un número válido. Si la descripción solo contiene puntuación o caracteres que no permiten formar el slug ASCII admitido, devuelve un error de entrada en vez de producir silenciosamente un valor vacío.
Use el resultado con seguridad al publicar y automatizar
El objeto devuelto contiene un único campo, slug, por lo que puede alimentar directamente una vista previa de documentación, una URL de entorno efímero, una ruta de notas de versión, una página de cambios o un flujo de publicación de solicitudes de incorporación. Valide el resultado antes de reservar una ruta si su destino impone reglas adicionales, como una longitud máxima, rutas protegidas o unicidad. Esta capacidad no consulta su enrutador, proveedor de alojamiento, servicio Git ni base de datos de contenido, así que no puede saber si el slug ya está ocupado. Tampoco valida que la cadena suministrada corresponda a una rama real del repositorio; solo aplica la convención documentada. Se rechazan las ramas sin barra, las que terminan justo después del prefijo y las descripciones que se normalizan como un slug vacío. Este fallo estricto resulta valioso en automatización, pues evita que una fuente mal formada publique accidentalmente en una ruta vacía o genérica. En la automatización mediante API, cada solicitud usa el precio base publicado de $0.002. La misma transformación determinista puede ejecutarse en el navegador para conversiones individuales rápidas.
Qué puede hacer con ella
Nombre una implementación de vista previa
Convierta una rama de funcionalidad en una ruta legible para un entorno aislado de revisión sin incluir el prefijo del flujo.
Cree una ruta para notas de versión
Derive un segmento URL coherente de la parte descriptiva de una rama release o fix para generar notas.
Estandarice enlaces de solicitudes
Normalice descripciones de ramas anidadas como enlaces estables en minúsculas para documentación y automatización.
Preguntas frecuentes
¿Qué se considera prefijo de tipo?
El primer segmento no vacío anterior a la primera barra. Puede ser feature, fix, chore o cualquier tipo que utilice su equipo.
¿Qué ocurre con las rutas de rama anidadas?
Todos los segmentos posteriores a la primera barra forman la descripción y sus separadores se convierten en guiones.
¿Puedo enviar un nombre completo refs/heads?
Sí. Se elimina el inicio refs/heads/ antes de identificar el prefijo de tipo y la parte descriptiva.
¿Por qué falla una rama sin barra?
La capacidad exige un prefijo de tipo y una descripción diferenciados, por lo que un nombre único sin separación resulta ambiguo.
¿Comprueba si existe la rama?
No. Solo procesa texto de forma determinista y nunca se conecta a un repositorio ni a un servicio de alojamiento Git.
¿Cuánto cuesta una solicitud API?
Cada solicitud API usa el precio base publicado de $0.002; la versión del navegador ejecuta localmente la misma transformación.
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/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)Ejemplo de solicitud
{
"branch": "feature/add-user-login"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.slug_from_git_branch",
"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. |