Gere um sumário a partir de Markdown
Transforme seus títulos em um sumário com links pronto para colar: no exemplo, Project Guide, Installation e Usage são recuados por nível, e o segundo Requirements recebe a âncora requirements-1 para que os dois links funcionem. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Transforme um documento Markdown em um sumário claro e clicável sem copiar títulos nem calcular âncoras manualmente. O gerador lê títulos ATX escritos com cerquilhas e títulos Setext escritos com linhas de sublinhado, ignora falsos títulos dentro de blocos de código cercados e devolve tanto Markdown pronto para colar quanto dados estruturados. Títulos aninhados recebem a indentação correspondente, enquanto nomes repetidos ganham âncoras distintas. O processamento é determinístico, não usa a rede e informa um erro claro quando o documento não contém títulos.
Cole o Markdown e receba uma estrutura pronta para uso
Insira a fonte Markdown completa no campo de texto. O gerador percorre o documento na ordem de leitura e reconhece títulos ATX do nível um ao seis, como <code>## Instalação</code>. Ele também reconhece títulos Setext, nos quais uma linha de texto é seguida por sinais de igual para o nível um ou hífens para o nível dois.
O resultado inclui uma string <code>toc</code> que você pode colar diretamente no início de um README, guia, especificação ou artigo de base de conhecimento. Cada item usa a sintaxe comum de links Markdown, e a indentação acompanha a diferença entre seu nível e o título menos profundo encontrado. Isso preserva a hierarquia mesmo quando um trecho começa no nível dois.
A resposta ainda inclui um array estruturado <code>headings</code>, com nível, texto visível e âncora gerada para cada entrada, permitindo que aplicativos criem sua própria navegação.
Entenda como o texto vira um link estável
Um sumário só é útil quando cada link aponta para o mesmo identificador de fragmento criado para o título. Este gerador aplica uma transformação previsível no estilo do GitHub: converte letras para minúsculas, troca espaços por hífens, remove a maior parte da pontuação e mantém letras e números de idiomas além do inglês. A formatação Markdown inline é retirada do rótulo visível e da âncora; portanto, <code>Opções **avançadas**</code> se torna o rótulo legível “Opções avançadas” e a âncora <code>opções-avançadas</code>.
Os links preservam o texto exibido, não a URL de destino. Se o mesmo título limpo aparecer novamente, o primeiro recebe a âncora base, o segundo ganha o sufixo <code>-1</code> e os próximos seguem a contagem. Linhas semelhantes a títulos dentro de blocos de código cercados são ignoradas, e títulos vazios não são emitidos porque não oferecem navegação útil.
Use o resultado em fluxos de documentação
O fluxo mais simples é colar a string <code>toc</code> abaixo do título do documento e gerá-la novamente sempre que os títulos mudarem. Em automações, chame a capacidade depois que a documentação for montada e compare a string devolvida com o sumário versionado. Uma diferença pode solicitar uma atualização durante a revisão sem exigir um renderizador Markdown completo.
Ferramentas de site estático podem consumir os registros estruturados para montar barras laterais, índices de página ou navegação móvel, preservando a ordem e o aninhamento da fonte. O analisador não faz chamadas de rede, não executa HTML incorporado e não altera o Markdown enviado. Ele apenas deriva dados de navegação dos títulos.
A entrada aceita até um milhão de caracteres para manter o processamento limitado e previsível.
Casos de uso
Mantenha o índice de um README atualizado
Gere novamente a estrutura com links quando seções forem adicionadas, renomeadas, reordenadas ou aninhadas em uma versão.
Monte a navegação da documentação
Use o array estruturado de títulos para criar uma barra lateral ou um índice sem manter uma segunda estrutura manualmente.
Verifique a documentação na integração contínua
Compare a saída gerada com o sumário versionado e sinalize navegação desatualizada durante a revisão de código.
Perguntas frequentes
Quais estilos de título Markdown são aceitos?
São aceitos títulos ATX de H1 a H6 e títulos Setext H1 ou H2. Textos semelhantes a títulos dentro de blocos de código cercados são ignorados.
O que acontece quando nomes de títulos se repetem?
O primeiro título usa a âncora base. Os seguintes com o mesmo texto limpo recebem sufixos numéricos como -1 e -2.
O gerador altera meu Markdown?
Não. Ele devolve uma nova string de sumário e registros estruturados; o texto de origem não é reescrito.
Como os nomes das âncoras são formados?
No estilo do GitHub: as letras ficam minúsculas, os espaços viram hífens e quase toda a pontuação é removida, enquanto letras e dígitos de outros idiomas são mantidos. Um título como Advanced **options** gera a âncora advanced-options.
Títulos dentro de blocos de código entram no sumário?
Não. Linhas que parecem títulos dentro de blocos de código são ignoradas, o que importa em tutoriais que ensinam Markdown. Títulos vazios também ficam de fora, e um documento sem nenhum título gera um erro claro em vez de um sumário vazio.
Ferramentas relacionadas
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/dev2/markdown-toc-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"# Project Guide\n\n## Installation\n\n### Requirements\n\n## Usage"}'const res = await fetch("https://api.kit.forhosting.com/dev2/markdown-toc-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "# Project Guide\n\n## Installation\n\n### Requirements\n\n## Usage"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/markdown-toc-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "# Project Guide\n\n## Installation\n\n### Requirements\n\n## Usage"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/markdown-toc-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"# Project Guide\\n\\n## Installation\\n\\n### Requirements\\n\\n## Usage"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"# Project Guide\n\n## Installation\n\n### Requirements\n\n## Usage"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/markdown-toc-generate", 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
{
"text": "# Project Guide\n\n## Installation\n\n### Requirements\n\n## Usage"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.markdown_toc_generate",
"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.
Limites
max_chars | 1000000 |
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. |
Notas técnicas
Use o resultado em fluxos de documentação
Um documento com parágrafos, listas, código ou tabelas, mas sem título válido, produz um erro <code>invalid_input</code> em vez de um sumário vazio.
Perguntas técnicas
E se o documento não tiver títulos?
A solicitação devolve um erro invalid_input explicando que nenhum título Markdown foi encontrado.
Quanto custa uma solicitação de API?
Cada solicitação de API custa US$ 0,002. A versão para navegador pode executar localmente a mesma lógica determinística.