Extrayez les liens Markdown avec leur texte et leur URL
Obtenez tous les liens d’un texte Markdown sous forme de liste nette, libellé et adresse : l’exemple donne 4 liens, de setup guide à Home, et les liens par référence comme [support][] sont résolus vers leur vraie adresse. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Transformez une source Markdown en liste structurée de liens sans afficher le document ni développer votre propre analyseur. L’outil détecte les liens directs et ceux fondés sur une référence, résout leurs définitions et renvoie le libellé visible avec l’URL cible dans l’ordre du document. Il ignore les images ainsi que les exemples placés dans du code, et renvoie une liste vide lorsque le document ne contient aucun lien. Ce traitement déterministe n’utilise pas le réseau et convient aux README, documentations, journaux de modifications, modèles de tickets et fichiers Markdown générés.
Obtenez les libellés et les destinations en une requête
Collez toute la source Markdown dans le champ <code>text</code>. Le résultat contient un tableau <code>links</code> dont chaque entrée possède <code>text</code> pour le libellé visible et <code>url</code> pour la destination. Un lien direct tel que <code>[Guide](https://example.com/setup)</code> est renvoyé immédiatement.
L’ordre de lecture est conservé afin de faciliter les audits, migrations et rapports sans tri supplémentaire. Les répétitions restent présentes, car chaque occurrence peut compter lors d’une analyse de navigation. Si aucun lien compatible n’est trouvé, la requête réussit avec un tableau vide plutôt que de signaler à tort une erreur.
Une source Markdown vide produit également ce résultat normal.
Résolvez les références sans confondre le code et les liens
Les références Markdown peuvent être explicites, réduites ou abrégées. L’extracteur accepte <code>[libellé][id]</code>, <code>[libellé][]</code> et <code>[libellé]</code> lorsqu’une définition correspondante existe. La recherche des identifiants ne tient pas compte de la casse et normalise les suites d’espaces.
Les destinations entre chevrons et les titres facultatifs sont reconnus, mais ces titres ne sont pas renvoyés puisque la capacité fournit uniquement le texte et l’URL. Une image précédée d’un point d’exclamation est exclue, car sa source n’est pas un lien de navigation. Les blocs de code délimités et le code en ligne sont également ignorés pour ne pas intégrer les exemples techniques à l’inventaire.
Une définition seule ne crée aucune entrée. Les marques de mise en forme sont retirées du libellé et la ponctuation échappée est restaurée.
Intégrez les liens structurés à votre documentation
Un inventaire est utile avant de déplacer une documentation, de changer de domaine ou de rechercher des références à des services retirés. Vous pouvez transmettre chaque URL à une validation autorisée, regrouper les destinations par hôte ou comparer deux versions pour repérer les ajouts et suppressions. Les équipes éditoriales peuvent relever les libellés imprécis, tandis que les équipes techniques détectent les références répétées dans les README générés.
La taille maximale est d’un million de caractères.
Cas d’usage
Auditer les destinations documentaires
Créez un inventaire ordonné des URL avant de vérifier leur disponibilité, leur propriétaire ou leur migration.
Examiner les libellés de liens
Repérez les formulations ambiguës afin d’améliorer la clarté et l’accessibilité de votre documentation.
Comparer des versions Markdown
Extrayez les liens de deux versions et identifiez les destinations ajoutées, remplacées ou supprimées.
Questions fréquentes
Quelles formes de liens sont reconnues ?
Les liens directs ainsi que les références complètes, réduites et abrégées sont reconnus lorsque leur définition existe.
Les images Markdown sont-elles incluses ?
Non. Elles sont exclues, car l’outil recherche des liens de navigation et non des sources de ressources intégrées.
Que se passe-t-il en l’absence de lien ?
La requête réussit et renvoie un tableau <code>links</code> vide.
Les liens placés dans des exemples de code sont-ils comptés ?
Non. Les blocs de code et le code en ligne sont ignorés, si bien que les exemples Markdown d’un tutoriel ne polluent pas votre inventaire réel de liens. Les lignes qui ne font que définir une référence n’apparaissent pas non plus.
Vérifie-t-il que les liens fonctionnent encore ?
Non. Il n’ouvre pas les adresses, ne teste pas leur état, ne suit pas les redirections et ne modifie pas votre texte. Il lit seulement ce que vous collez : la même entrée donne toujours la même liste ordonnée.
Outils associés
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/dev2/markdown-link-extract \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Read the [guide](https://example.com/guide) and [API docs][api].\n\n[api]: https://example.com/api"}'const res = await fetch("https://api.kit.forhosting.com/dev2/markdown-link-extract", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Read the [guide](https://example.com/guide) and [API docs][api].\n\n[api]: https://example.com/api"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/markdown-link-extract",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Read the [guide](https://example.com/guide) and [API docs][api].\n\n[api]: https://example.com/api"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/markdown-link-extract", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Read the [guide](https://example.com/guide) and [API docs][api].\\n\\n[api]: https://example.com/api"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Read the [guide](https://example.com/guide) and [API docs][api].\n\n[api]: https://example.com/api"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/markdown-link-extract", 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
{
"text": "Read the [guide](https://example.com/guide) and [API docs][api].\n\n[api]: https://example.com/api"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.markdown_link_extract",
"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.
Limites
max_chars | 1000000 |
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. |
Notes techniques
Obtenez les libellés et les destinations en une requête
Un lien référencé comme <code>[API][docs]</code> est associé à une définition telle que <code>[docs]: https://example.com/api</code>, même si celle-ci se trouve plus loin.
Intégrez les liens structurés à votre documentation
Cette capacité ne consulte aucune URL, ne teste aucun statut HTTP, ne suit aucune redirection et ne modifie pas le Markdown. Ces limites garantissent un traitement rapide, privé et prévisible. Un champ <code>text</code> absent ou non textuel renvoie <code>invalid_input</code>, ce qui distingue une requête incorrecte d’un document valide sans lien. Chaque appel d’API coûte $0.002.
Questions techniques
L’outil vérifie-t-il le fonctionnement des URL ?
Non. Il extrait les destinations sans accès réseau, suivi de redirection ni contrôle du statut HTTP.
Quel est le prix d’un appel d’API ?
Chaque appel d’API coûte $0.002. L’exécuteur du navigateur applique localement la même extraction déterministe.