Générez un tableau esport à double élimination
Transformez une liste ordonnée d’équipes en une structure complète à double élimination sans dessiner les tours à la main.
Lancer gratuitement
Le générateur interprète l’ordre comme le classement des têtes de série, agrandit le tableau jusqu’à la puissance de deux suivante, attribue les exemptions nécessaires et renvoie les parcours gagnant et perdant reliés. Chaque place ultérieure indique le match et le résultat qui l’alimentent, tandis que la grande finale comprend la réinitialisation conditionnelle requise si le finaliste du parcours perdant remporte le premier match décisif. Le résultat déterministe convient aux logiciels de tournoi, habillages vidéo, inscriptions et contrôles avant compétition.
Préparez les têtes de série et les exemptions
Saisissez les équipes de la tête de série la plus forte à la plus faible. Le premier nom reçoit le numéro un, le deuxième le numéro deux, et ainsi de suite ; le générateur ne réorganise jamais ce classement au hasard. Chaque nom doit contenir du texte visible et être unique sans tenir compte de la casse, car deux concurrents impossibles à distinguer rendraient les résultats ambigus. Un tableau à double élimination se représente idéalement avec une puissance de deux : six équipes occupent huit places, tandis qu’un groupe de huit reste inchangé. Les places vacantes sont des objets d’exemption explicites, jamais des adversaires inventés. Le placement canonique éloigne les meilleures têtes de série aussi longtemps que possible. Une équipe bénéficiant d’une exemption avance sans jouer, mais la place du match initial est conservée afin que les identifiants et références restent stables. Ce fonctionnement est utile si les inscriptions se terminent avec un effectif irrégulier ou si un forfait tardif réduit le tableau prévu.
Lisez les liens des parcours gagnant et perdant
La réponse sépare winners_bracket et losers_bracket en tours numérotés. Les premiers matchs contiennent les équipes classées ou les exemptions. Les suivants contiennent des objets source, car leurs participants dépendent des résultats : kind précise si la place reçoit un gagnant ou un perdant, match désigne la rencontre précédente et slot conserve le côté du nouveau duel. Les défaites du parcours gagnant alimentent le parcours perdant par étapes. Entre ces arrivées, des tours de consolidation réduisent les survivants avant qu’un autre groupe ne descende. Ce rythme garantit qu’une équipe n’est éliminée qu’après sa deuxième défaite sportive. Les identifiants tels que W2M1 et L3M2 sont déterministes. Votre application peut enregistrer les résultats sous ces clés, résoudre les sources à la fin d’un match et afficher la structure en liste, tableau classique ou graphisme de diffusion. La structure décrit la progression ; elle ne prédit aucun vainqueur et n’invente aucun score.
Gérez le titre et intégrez le résultat
L’objet grand_final contient le premier match pour le titre et une rencontre conditionnelle de réinitialisation. GF1 oppose le finaliste invaincu au survivant du parcours perdant. Si l’invaincu gagne, le tournoi se termine puisque son adversaire compte alors deux défaites. Si le finaliste du parcours perdant s’impose, chacun a une défaite et GF2 désigne le champion à égalité. Cette condition explicite évite l’erreur fréquente consistant à prévoir une seule finale. Pour intégrer la réponse, conservez-la comme définition du tournoi, puis rattachez horaires, serveurs, scores et statuts à chaque identifiant stable. Ne résolvez une source qu’après la validation définitive du match référencé et appliquez votre règlement aux exemptions. Le générateur n’utilise aucun réseau et ne conserve aucune équipe. La génération dans le navigateur est gratuite ; une requête API applique le tarif de base affiché de $0.002 pour automatiser les inscriptions ou la gestion d’événements.
Cas d’usage
Classez une qualification en ligne
Convertissez le classement des inscriptions en tours reliés, même si l’effectif final impose des exemptions.
Créez un tableau de diffusion
Pilotez les habillages avec des identifiants stables et des sources de progression sans reconnecter les tours.
Initialisez un logiciel de tournoi
Enregistrez la topologie déterministe, puis ajoutez horaires, scores, cartes et statuts dans votre système.
Questions fréquentes
Combien d’équipes faut-il ?
Il faut au moins quatre noms uniques et non vides ; la limite acceptée est de 64 équipes.
Comment les équipes sont-elles classées ?
L’ordre de saisie définit les têtes de série. La première équipe reçoit le numéro un et le placement canonique sépare les favorites.
Que se passe-t-il si l’effectif n’est pas une puissance de deux ?
Le tableau passe à la puissance de deux suivante et les places inutilisées deviennent des exemptions explicites.
Le tableau prévoit-il une réinitialisation de la finale ?
Oui. GF2 se joue uniquement si le finaliste du parcours perdant bat le finaliste invaincu lors de GF1.
Cet outil planifie-t-il les horaires ou choisit-il les gagnants ?
Non. Il fournit la topologie et les sources de progression ; votre système gère les horaires, scores et décisions.
Quel est le prix d’une requête API ?
Le prix de base d’une requête API est $0.002. Vous pouvez aussi générer le tableau gratuitement dans le navigateur.
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/sports/esports-bracket-seed-matchups \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"teams":["Aurora","Blaze","Cyclone","Dragons","Eclipse","Falcons"]}'const res = await fetch("https://api.kit.forhosting.com/sports/esports-bracket-seed-matchups", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"teams": [
"Aurora",
"Blaze",
"Cyclone",
"Dragons",
"Eclipse",
"Falcons"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/sports/esports-bracket-seed-matchups",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"teams": [
"Aurora",
"Blaze",
"Cyclone",
"Dragons",
"Eclipse",
"Falcons"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/sports/esports-bracket-seed-matchups", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"teams":["Aurora","Blaze","Cyclone","Dragons","Eclipse","Falcons"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"teams":["Aurora","Blaze","Cyclone","Dragons","Eclipse","Falcons"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/sports/esports-bracket-seed-matchups", 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
{
"teams": [
"Aurora",
"Blaze",
"Cyclone",
"Dragons",
"Eclipse",
"Falcons"
]
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "sports.esports_bracket_seed_matchups",
"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. |