Saltar al contenido

Generador de Documentación de API en Vivo para n8n

Genera automáticamente una página de documentación HTML interactiva y en vivo para los webhooks de n8n. Escanea workflows activos, extrae metadatos de nodos `API_DOCS` y construye la documentación.

17 nodos 10 tipos conectado
Cargando workflow...

Nodos

Aggregate Webhook Set StickyNote RespondToWebhook Html ExecuteWorkflow ExecuteWorkflowTrigger N8n Code

Herramientas

n8n (API)

Detalles

ID
7706
Nodos
17
Conex.
Tipos
10

Pertenece a:

¿Qué hace este workflow?

Este workflow escanea todos los workflows activos en tu instancia de n8n, extrayendo metadatos clave de los nodos `API_DOCS` para generar automáticamente una página de documentación HTML interactiva y en vivo. Esta página centraliza la información de tus webhooks, incluyendo sus parámetros, ejemplos de uso y respuestas esperadas, haciéndola fácilmente accesible y actualizable. Ideal para equipos que gestionan múltiples integraciones y necesitan mantener una documentación técnica coherente y al día sin esfuerzo manual. Simplifica el onboarding de nuevos desarrolladores, reduce la fricción en la colaboración interna y asegura que tus APIs estén siempre bien documentadas, ahorrando valiosas horas de trabajo en la creación y mantenimiento de manuales.

¿Cómo funciona?

Este workflow usa 17 nodos conectados con 10 tipos diferentes: Aggregate, Webhook, Set, StickyNote, RespondToWebhook y 5 más. La estructura está totalmente conectada — listo para importar.

¿Para quién es?

Diseñado para equipos de IT & DevOps. Nivel intermedio — necesitas familiaridad con n8n.

¿Lo quieres en tu empresa?

Lo implementamos por ti end-to-end: integración, deploy, mantenimiento y soporte. Consultoría B2B con Genai Sapiens.

Hablemos de tu proyecto

¿Quieres aprender a hacerlo?

Sprints de 30 días con companion IA + comunidad. Aprende n8n, automatización y agentes IA desde cero o nivel avanzado.

Ver formación Momentum

Workflows similares

\n\n"},"typeVersion":1.2},{"id":"0bd66854-cf1b-46b5-ad75-e0d7ef9b71d4","name":"ExecuteSubWorkflow","type":"n8n-nodes-base.executeWorkflow","onError":"continueRegularOutput","position":[-260,460],"parameters":{"options":{"waitForSubWorkflow":true},"workflowId":{"__rl":true,"mode":"list","value":"y2xOdk7RyRoS2sgF","cachedResultName":"Documentation"},"workflowInputs":{"value":{},"schema":[{"id":"url_base","type":"string","display":true,"removed":false,"required":false,"displayName":"url_base","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":true}},"typeVersion":1.2},{"id":"43a02f1b-9f18-4148-9705-2c3347997cfa","name":"Execute","type":"n8n-nodes-base.executeWorkflowTrigger","position":[-320,-300],"parameters":{"workflowInputs":{"values":[{"name":"url_base"}]}},"typeVersion":1.1},{"id":"91ad9f92-adf3-4a8c-af48-3d1e5cd06678","name":"GetWorkflows","type":"n8n-nodes-base.n8n","position":[-100,-300],"parameters":{"filters":{"tags":"","activeWorkflows":true},"requestOptions":{}},"credentials":{"n8nApi":{"id":"fTE1pX6nL40KSIdW","name":"n8n account"}},"retryOnFail":true,"typeVersion":1,"alwaysOutputData":false},{"id":"c28819b2-2e5d-4732-9a68-0d5045dcb59e","name":"FilterWorkflows","type":"n8n-nodes-base.code","position":[340,-300],"parameters":{"jsCode":"const allWorkflows = $('Aggregate').last().json.data;\nlet html = '';\n\nconst documentedWebhookWorkflows = allWorkflows.filter(item => {\n if (!item.nodes || item.nodes.length === 0) {\n return false;\n }\n const hasWebhook = item.nodes.some(node => node.type === 'n8n-nodes-base.webhook');\n const hasDocsNote = item.nodes.some(node => node.type === 'n8n-nodes-base.set' && node.name === 'API_DOCS');\n return hasWebhook && hasDocsNote;\n});\n\n\nif (documentedWebhookWorkflows.length > 0) {\n html += '
';\n\n const n8nBaseUrl = $(\"Execute\").last().json.url_base || 'https://n8n.io/';\n\n for (const workflow of documentedWebhookWorkflows) {\n const docsNode = workflow.nodes.find(n => n.name === 'API_DOCS');\n\n if (docsNode) {\n const jsonString = docsNode.parameters.jsonOutput || JSON.stringify(docsNode.parameters.docsData);\n let docsData = {};\n let webhookNode = null;\n\n try {\n docsData = JSON.parse(jsonString);\n webhookNode = workflow.nodes.find(n => { return n.type === 'n8n-nodes-base.webhook' && n.name === docsData.webhook });\n } catch (e) {\n console.error(`Erro ao parsear JSON no workflow: ${workflow.name}`, e);\n continue;\n }\n\n if(webhookNode){\n const method = (docsData.method || \"POST\").toUpperCase();\n const uniqueId = webhookNode.parameters.path.replace(/[^a-zA-Z0-9]/g, '');\n\n // --- make CURL\n const fullUrl = `${n8nBaseUrl}webhook/${webhookNode.parameters.path}`;\n\n let curlCommand = `curl -X ${method}\\\\`;\n if (method === 'POST' || method === 'PUT' || method === 'PATCH') {\n const requestBodyString = JSON.stringify(docsData.requestBody || {});\n curlCommand += `\n -H 'Content-Type: application/json' \\\\\n -d '${requestBodyString}' \\\\`;\n }\n curlCommand += `\n ${fullUrl}`;\n\n html += `\n
\n

\n \n

\n
\n
\n

${docsData.summary || 'No summary'}

\n

${docsData.description || 'No description.'}

\n
\n \n
cURL Command:
\n
${curlCommand}
\n \n
Request Body:
\n
${JSON.stringify(docsData.requestBody || {}, null, 2)}
\n
Success Response (${docsData.successCode || 'N/A'}):
\n
${JSON.stringify(docsData.successResponse || {}, null, 2)}
\n
Error Response (${docsData.errorCode || 'N/A'}):
\n
${JSON.stringify(docsData.errorResponse || {}, null, 2)}
\n
\n
\n
\n `;\n }\n }\n }\n html += '
';\n} else {\n html += '
Nenhum endpoint documentado foi encontrado.
';\n}\n\nreturn [{\n json: {\n htmlContent: html\n }\n}];"},"typeVersion":2},{"id":"78526a12-613c-4530-9a6f-bb612036addf","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-940,-400],"parameters":{"color":4,"width":540,"height":700,"content":"### Live n8n API Documentation Generator\n\n**Author:** Matheus Pedrosa | https://www.linkedin.com/in/matheus-pedrosa-custodio/\n**Version:** 1.0\n**Date:** 2025-08-21\n\n## Summary\nThis is a \"meta-workflow\" that acts as an engine to automatically generate a live, interactive HTML documentation page for your n8n instance's webhooks. It scans all active workflows, finds the ones designated for documentation, and renders a single, professional, dark-themed page.\n\n## Key Feature\nThe core logic relies on a **convention-based discovery**. To include a webhook in the documentation, you simply add a `Set` node named **`API_DOCS`** to that workflow and fill in a JSON object with the endpoint's metadata (summary, request body, responses, etc.). This generator then automatically parses that data to build the documentation page.\n\n## Setup (Quick Checklist)\n1. **`API_DOCS` Nodes:** In every workflow you want to document, add a `Set` node named `API_DOCS` and provide the necessary JSON metadata (especially the `webhookPath`).\n2. **`GetWorkflows` Node:** Configure this node with your `n8n API` credentials. It needs permission to read all workflows.\n3. **`Configs` Node:** Customize the global settings for your documentation page, such as the main title (`name_doc`), description, and version.\n4. **`Webhook` Trigger:** The URL of this workflow's trigger is the public URL for your final documentation page."},"typeVersion":1},{"id":"602d0cd7-558e-4360-b385-bf9824f9278b","name":"Webhook1","type":"n8n-nodes-base.webhook","position":[-320,-40],"webhookId":"15105da5-96ca-472f-a7db-2ddc2e8b0891","parameters":{"path":"15105da5-96ca-472f-a7db-2ddc2e8b0891","options":{},"responseMode":"responseNode"},"typeVersion":2},{"id":"6283f30d-d1eb-4a7b-9f97-73834d7c060f","name":"API_DOCS","type":"n8n-nodes-base.set","position":[-320,120],"parameters":{"mode":"raw","options":{},"jsonOutput":"{\n \"expose\": true,\n \"webhook\": \"Webhook1\",\n \"summary\": \"Title test\",\n \"method\":\"get\",\n \"description\": \"Hey community, look at this cool workflow I'm doing.\",\n \"tags\": [\n \"test\",\n \"tag_0101\"\n ],\n \"requestBody\": {},\n \"successCode\": 200,\n \"successResponse\": {\n \"status\": 200,\n \"message\": \"Workflow start\"\n },\n \"errorCode\": 400,\n \"errorResponse\": {\n \"status\": 500,\n \"message\": \"Workflow error\"\n }\n}"},"typeVersion":3.4},{"id":"57843c34-afb5-401e-86dc-8aa22c242263","name":"FakeResponse","type":"n8n-nodes-base.code","position":[-100,-40],"parameters":{"jsCode":"return {\n \"status\": 200,\n \"message\": \"Workflow start\"\n }"},"typeVersion":2},{"id":"29b6b6ea-917b-47a3-b8a1-ff017b0a10a5","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-940,400],"parameters":{"width":150,"height":200,"content":"### Create documentation page\n\n![](https://cdn-icons-png.flaticon.com/512/4028/4028647.png)"},"typeVersion":1}],"pinData":{},"connections":{"Configs":{"main":[[{"node":"ExecuteSubWorkflow","type":"main","index":0}]]},"Execute":{"main":[[{"node":"GetWorkflows","type":"main","index":0}]]},"Webhook":{"main":[[{"node":"Configs","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"FakeResponse","type":"main","index":0}]]},"Aggregate":{"main":[[{"node":"FilterWorkflows","type":"main","index":0}]]},"FakeResponse":{"main":[[{"node":"Respond","type":"main","index":0}]]},"GetWorkflows":{"main":[[{"node":"Aggregate","type":"main","index":0}]]},"MakeFullHTML":{"main":[[{"node":"RespondHTML","type":"main","index":0}]]},"FilterWorkflows":{"main":[[]]},"ExecuteSubWorkflow":{"main":[[{"node":"MakeFullHTML","type":"main","index":0}]]}}}