Créez un slug URL depuis le nom d’une branche Git
Convertissez un nom de branche Git tel que feature/add-user-login en slug court et adapté aux URL, sans conserver le préfixe du flux de travail.
Lancer gratuitement
La capacité reconnaît le premier segment du chemin comme type de branche, garde toute la suite comme partie descriptive et la normalise en mots minuscules séparés par des tirets. Son fonctionnement est déterministe, sans accès réseau, et signale clairement toute branche qui possède un préfixe mais aucune description exploitable.
Distinguez les métadonnées du flux de la description utile
Les équipes Git commencent souvent leurs noms de branche par un type de flux tel que feature, fix, chore, release ou docs. Ce premier segment aide les personnes et les automatismes à comprendre l’objectif de la branche, mais il encombre généralement une URL publique. Cette capacité considère le texte précédant la première barre oblique comme le préfixe de type et construit le slug uniquement à partir de la suite. Ainsi, feature/add-user-login devient add-user-login, tandis que fix/checkout/payment-timeout produit checkout-payment-timeout. Les chemins descriptifs imbriqués sont conservés sous forme de mots, ce qui permet à votre équipe de garder des périmètres pertinents sans afficher de barres obliques dans l’URL finale. Le préfixe facultatif refs/heads/, souvent renvoyé par les outils Git et les systèmes d’intégration continue, est supprimé avant l’analyse. L’opération ne dépend d’aucune liste fermée de types autorisés. Tout premier segment non vide peut servir de préfixe, afin que la même règle s’adapte à vos conventions comme spike, experiment, maintenance ou au circuit de tickets propre à votre organisation.
Comprenez précisément la normalisation du slug
Après avoir isolé la partie descriptive, l’algorithme applique une suite stable de transformations. Il retire les espaces périphériques, normalise les caractères latins accentués, passe les lettres en minuscules, remplace chaque série de caractères autres que des lettres ASCII ou des chiffres par un tiret, puis supprime les tirets initiaux et finaux. Barres obliques, espaces, tirets bas, ponctuation et séparateurs répétés convergent ainsi vers une même forme sûre pour une URL. Une branche telle que feature/Account Settings_v2 devient account-settings-v2. Le résultat reste volontairement prévisible : aucun modèle linguistique, dictionnaire, appel réseau, nombre aléatoire, horodatage ou état de dépôt n’intervient. La fonction n’invente pas de mots et n’interprète pas les identifiants de tickets. Les nombres présents dans la description sont conservés, notamment dans fix/PROJ-482-login-loop. Comme la normalisation peut éliminer certains symboles et systèmes d’écriture, la capacité vérifie qu’il subsiste au moins une lettre ou un chiffre utilisable. Une description composée uniquement de signes ou de caractères incompatibles avec le slug ASCII accepté entraîne une erreur de saisie, jamais un résultat vide silencieux.
Exploitez le résultat sans risque dans vos automatisations
L’objet renvoyé contient un seul champ, slug. Vous pouvez donc l’envoyer directement vers un aperçu de documentation, l’URL d’un environnement éphémère, un chemin de notes de version, une page de journal des modifications ou un flux de publication de pull request. Vérifiez le résultat avant de réserver une route si votre destination impose des règles supplémentaires, par exemple une longueur maximale, des chemins protégés ou une contrainte d’unicité. Cette capacité ne consulte ni votre routeur, ni votre hébergeur, ni votre service Git, ni votre base de contenu : elle ignore donc si le slug est déjà pris. Elle ne confirme pas non plus que la chaîne fournie correspond à une branche réelle du dépôt ; seule la convention documentée est appliquée. Les noms sans barre oblique, ceux qui s’arrêtent juste après le préfixe et les descriptions normalisées en slug vide sont refusés. Cette erreur stricte empêche une source mal formée de publier accidentellement vers une route vide ou générique. Pour une automatisation par API, chaque requête applique le prix de base publié de $0.002. La même transformation déterministe fonctionne dans le navigateur pour les conversions ponctuelles.
Cas d’usage
Nommez un déploiement de prévisualisation
Transformez une branche de fonctionnalité en chemin lisible pour un environnement de revue isolé, sans le préfixe du flux.
Créez un chemin de notes de version
Produisez un segment URL cohérent depuis la description d’une branche release ou fix pour générer vos notes.
Uniformisez les liens de pull request
Normalisez les descriptions imbriquées des branches en liens stables et minuscules pour la documentation et l’automatisation.
Questions fréquentes
Qu’est-ce qui constitue le préfixe de type ?
Il s’agit du premier segment non vide avant la première barre oblique : feature, fix, chore ou tout type choisi par votre équipe.
Comment les chemins de branche imbriqués sont-ils traités ?
Tous les segments après la première barre appartiennent à la description, et leurs séparateurs deviennent des tirets.
Puis-je fournir un nom refs/heads complet ?
Oui. Le début refs/heads/ est retiré avant l’identification du préfixe de type et de la partie descriptive.
Pourquoi une branche sans barre est-elle refusée ?
La capacité exige un préfixe de type distinct de la description ; un nom unique sans séparation reste donc ambigu.
Vérifiez-vous que la branche existe ?
Non. Seul un traitement de texte déterministe est effectué, sans connexion à un dépôt ni à un hébergeur Git.
Quel est le coût d’une requête API ?
Chaque requête API applique le prix de base publié de $0.002 ; la version pour navigateur exécute localement la même transformation.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre 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)Exemple de requête
{
"branch": "feature/add-user-login"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.slug_from_git_branch",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |