> ## Documentation Index
> Fetch the complete documentation index at: https://wiki.another-horizon.eu/llms.txt
> Use this file to discover all available pages before exploring further.

# Tutorial: Actualiza automáticamente la documentación cuando cambie el código

> Usa la API del agente para actualizar automáticamente tu documentación.

<div id="what-you-will-build">
  ## Qué vas a construir
</div>

Una automatización que actualiza tu documentación cuando se hace push de código a tu branch principal. El flujo de trabajo se puede crear en varias plataformas, incluidas GitHub Actions y n8n. Supervisa tu repositorio de código y luego llama a la API del agente para actualizar tu documentación en un repositorio de documentación independiente.

Este flujo de trabajo conecta dos repositorios separados:

* **Repositorio de código**: Donde almacenas el código de la aplicación. Configurarás el disparador de la automatización en este repositorio. Algunos ejemplos incluyen una API de backend, una aplicación de frontend, un SDK o una herramienta de CLI.
* **Repositorio de documentación**: Donde almacenas tu documentación y lo conectas a tu proyecto de Mintlify. El agente crea solicitudes de extracción con actualizaciones de documentación en este repositorio.

Este tutorial asume que tu documentación está en un repositorio separado del código de tu aplicación. Si tienes un monorepo, modifica el flujo de trabajo para apuntar al directorio donde almacenas tu documentación.

<div id="workflow-overview">
  ### Descripción general del flujo de trabajo
</div>

1. Alguien sube código a tu branch principal.
2. Se activa el flujo de trabajo.
3. El flujo de trabajo llama a la API del agente para actualizar tu documentación.
4. El agente crea una solicitud de extracción con actualizaciones de la documentación en tu repositorio de documentación.

<div id="choose-your-platform">
  ## Elige tu plataforma
</div>

<Tabs>
  <Tab title="GitHub Actions">
    GitHub Actions es la opción más simple si tu código ya está en GitHub. No se requieren servicios adicionales.

    ## Requisitos previos

    * GitHub Actions habilitado en tus repositorios de código y documentación
    * [Aplicación de GitHub de Mintlify](/es/deploy/github) instalada en ambos repositorios, de código y de documentación
    * [Clave de API de administración de Mintlify](https://dashboard.mintlify.com/settings/organization/api-keys)
    * [ID del proyecto de Mintlify](https://dashboard.mintlify.com/settings/organization/api-keys)
    * [Plan Pro o personalizado de Mintlify](https://mintlify.com/pricing)
    * Acceso de administrador a los repositorios de GitHub que contienen tu código y tu documentación

    ### Instala la aplicación de Mintlify en tu repositorio de código

    La aplicación de Mintlify debe estar instalada en tu repositorio de código para que el agente pueda obtener el contexto de tu código base. Para agregar la aplicación a repositorios nuevos:

    1. Abre el panel del agente en tu panel de control de Mintlify.

           <Frame>
             <img src="https://mintcdn.com/anotherhorizon/J4BH3chw5X4BWXwI/images/agent/dashboard-light.png?fit=max&auto=format&n=J4BH3chw5X4BWXwI&q=85&s=86e0b388a60c9d32e744960f59b73251" alt="El panel del agente en modo claro." className="block dark:hidden" width="2056" height="840" data-path="images/agent/dashboard-light.png" />

             <img src="https://mintcdn.com/anotherhorizon/J4BH3chw5X4BWXwI/images/agent/dashboard-dark.png?fit=max&auto=format&n=J4BH3chw5X4BWXwI&q=85&s=2b0ce1583e0e91c6a1ea6a9a49990390" alt="El panel del agente en modo oscuro." className="hidden dark:block" width="2056" height="840" data-path="images/agent/dashboard-dark.png" />
           </Frame>
    2. Haz clic en el botón **Settings**.

           <Frame>
             <img src="https://mintcdn.com/anotherhorizon/J4BH3chw5X4BWXwI/images/agent/dashboard-settings-light.png?fit=max&auto=format&n=J4BH3chw5X4BWXwI&q=85&s=b38d93419f324772150682405feed0e9" alt="El botón de configuración en modo claro." className="block dark:hidden" width="668" height="112" data-path="images/agent/dashboard-settings-light.png" />

             <img src="https://mintcdn.com/anotherhorizon/J4BH3chw5X4BWXwI/images/agent/dashboard-settings-dark.png?fit=max&auto=format&n=J4BH3chw5X4BWXwI&q=85&s=a773c798a5c8a4a4d1621e93229ee7d1" alt="El botón de configuración en modo oscuro." className="hidden dark:block" width="670" height="112" data-path="images/agent/dashboard-settings-dark.png" />
           </Frame>
    3. Haz clic en **Add to New Organization**. Irás a la página de instalación de la aplicación en GitHub.
    4. Selecciona en la lista los repositorios a los que quieres conceder acceso.
    5. Guarda los cambios.

    ### Obtén tu clave de API de administrador

    1. Ve a la página de [claves de API](https://dashboard.mintlify.com/settings/organization/api-keys) en tu panel de control.
    2. Selecciona la opción **Create Admin API Key**.
    3. Copia la clave y almacénala de forma segura.

    ## Construye el flujo de trabajo

    ### Crear el archivo de flujo de trabajo

    1. En tu repositorio de código, crea un nuevo archivo: `.github/workflows/update-docs.yml`
    2. Añade este flujo de trabajo:

       ```yaml theme={null}
       name: Actualizar Documentación

       on:
       push:
           branches:
           - main

       jobs:
       update-docs:
           runs-on: ubuntu-latest
           steps:
           - uses: actions/github-script@v8
               env:
               MINTLIFY_API_KEY: ${{ secrets.MINTLIFY_API_KEY }}
               PROJECT_ID: ${{ secrets.MINTLIFY_PROJECT_ID }}
               with:
               script: |
                   const { owner, repo } = context.repo;
                   const projectId = process.env.PROJECT_ID;
                   const apiKey = process.env.MINTLIFY_API_KEY;

                   if (!projectId || !apiKey) {
                   core.setFailed('Faltan los secretos MINTLIFY_PROJECT_ID o MINTLIFY_API_KEY');
                   return;
                   }

                   const url = `https://api.mintlify.com/v1/agent/${projectId}/job`;
                   const payload = {
                   branch: `mintlify/docs-update-${Date.now()}`,
                   messages: [
                       {
                       role: 'system',
                       content: 'Eres un ejecutor de acciones que actualiza la documentación según los cambios en el código. Nunca debes hacer preguntas. Si no puedes acceder al repositorio, reporta el error y finaliza.'
                       },
                       {
                       role: 'user',
                       content: `Actualiza la documentación para nuestros pushes recientes a main:\n\nRepositorio: ${owner}/${repo}`
                       }
                   ],
                   asDraft: false
                   };

                   try {
                       const response = await fetch(url, {
                       method: 'POST',
                       headers: {
                           'Authorization': `Bearer ${apiKey}`,
                           'Content-Type': 'application/json'
                       },
                       body: JSON.stringify(payload)
                       });

                       if (!response.ok) {
                       throw new Error(`La solicitud a la API falló con estado ${response.status}: ${await response.text()}`);
                       }

                       const reader = response.body.getReader();
                       const decoder = new TextDecoder();
                       let buffer = '';

                       while (true) {
                       const { done, value } = await reader.read();
                       if (done) break;
                       buffer += decoder.decode(value, { stream: true });
                       const lines = buffer.split('\n');
                       buffer = lines.pop() || '';
                       for (const line of lines) {
                           if (line.trim()) {
                           console.log(line);
                           }
                       }
                       }
                       if (buffer.trim()) {
                       console.log(buffer);
                       }

                       core.notice(`Trabajo de actualización de documentación activado para ${owner}/${repo}`);
                   } catch (error) {
                       core.setFailed(`Error al crear el trabajo de actualización de documentación: ${error.message}`);
                   }
       ```

    ### Agregar secretos

    1. En tu repositorio de código, ve a **Settings** → **Secrets and variables** → **Actions**.
    2. Haz clic en **New repository secret**.
    3. Añade los siguientes secretos:
       * Nombre: `MINTLIFY_API_KEY`, Secreto: Tu clave de API de administrador de Mintlify
       * Nombre: `MINTLIFY_PROJECT_ID`, Secreto: Tu ID de proyecto de Mintlify (se encuentra en la página de [API keys](https://dashboard.mintlify.com/settings/organization/api-keys) de tu panel de control)

    Para obtener más información, consulta [Uso de secretos en GitHub Actions](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets) en la documentación de GitHub.

    ## Prueba la automatización

    1. Realiza un pequeño cambio en tu repositorio de código y súbelo a la rama main:
       ```bash theme={null}
       git add .
       git commit -m "Prueba: activar automatización de docs"
       git push origin main
       ```

    2. Comprueba la pestaña **Actions** de tu repositorio de código para ver el flujo de trabajo en ejecución.

    3. Cuando termine el flujo de trabajo, revisa tu repositorio de documentación para verificar que se haya creado una nueva branch y una solicitud de extracción con actualizaciones de la documentación.

    ## Solución de problemas

    ### El flujo de trabajo no se está ejecutando

    * Comprueba que GitHub Actions esté habilitado en tu repositorio de código.
    * Revisa la pestaña **Actions** para ver los mensajes de error.
    * Asegúrate de que el archivo de flujo de trabajo se encuentre en `.github/workflows/` y tenga la extensión `.yml`.

    ### Error 401 de la API del agente

    * Verifica que tu clave de API empiece por `mint_`.
    * Comprueba que el encabezado Authorization tenga el formato `Bearer mint_yourkey`.
    * Confirma que la clave de API corresponde a la organización correcta de Mintlify.

    ### Las actualizaciones de documentación no aparecen

    * Comprueba que el repositorio de documentación esté conectado a tu proyecto de Mintlify.
    * Verifica que el agente tenga permisos de escritura en el repositorio de documentación.
    * Consulta los registros del flujo de trabajo para ver si hay mensajes de error del agente.
  </Tab>

  <Tab title="n8n">
    n8n ofrece un editor visual de flujos de trabajo y se puede integrar con múltiples servicios.

    ## Requisitos previos

    * Espacio de trabajo de n8n
    * [Plan Pro o personalizado de Mintlify](https://mintlify.com/pricing)
    * Aplicación de Mintlify instalada en tu repositorio de código
    * Clave de API de administrador de Mintlify
    * Acceso de administrador a los repositorios de GitHub que contienen tu código y tu documentación
    * Token de acceso personal de GitHub

    ### Instala la aplicación de Mintlify en tu repositorio de código

    La aplicación de Mintlify debe estar instalada en tu repositorio de código para que el agente pueda obtener el contexto de tu código base. Para agregar la aplicación a repositorios nuevos:

    1. Abre el panel del agente en tu panel de control de Mintlify.

           <Frame>
             <img src="https://mintcdn.com/anotherhorizon/J4BH3chw5X4BWXwI/images/agent/dashboard-light.png?fit=max&auto=format&n=J4BH3chw5X4BWXwI&q=85&s=86e0b388a60c9d32e744960f59b73251" alt="El panel del agente en modo claro." className="block dark:hidden" width="2056" height="840" data-path="images/agent/dashboard-light.png" />

             <img src="https://mintcdn.com/anotherhorizon/J4BH3chw5X4BWXwI/images/agent/dashboard-dark.png?fit=max&auto=format&n=J4BH3chw5X4BWXwI&q=85&s=2b0ce1583e0e91c6a1ea6a9a49990390" alt="El panel del agente en modo oscuro." className="hidden dark:block" width="2056" height="840" data-path="images/agent/dashboard-dark.png" />
           </Frame>
    2. Haz clic en el botón **Settings**.

           <Frame>
             <img src="https://mintcdn.com/anotherhorizon/J4BH3chw5X4BWXwI/images/agent/dashboard-settings-light.png?fit=max&auto=format&n=J4BH3chw5X4BWXwI&q=85&s=b38d93419f324772150682405feed0e9" alt="El botón de configuración en modo claro." className="block dark:hidden" width="668" height="112" data-path="images/agent/dashboard-settings-light.png" />

             <img src="https://mintcdn.com/anotherhorizon/J4BH3chw5X4BWXwI/images/agent/dashboard-settings-dark.png?fit=max&auto=format&n=J4BH3chw5X4BWXwI&q=85&s=a773c798a5c8a4a4d1621e93229ee7d1" alt="El botón de configuración en modo oscuro." className="hidden dark:block" width="670" height="112" data-path="images/agent/dashboard-settings-dark.png" />
           </Frame>
    3. Haz clic en **Add to New Organization**. Irás a la página de instalación de la aplicación en GitHub.
    4. Selecciona en la lista los repositorios a los que quieres conceder acceso.
    5. Guarda los cambios.

    ### Obtén tu clave de API de administrador

    1. Ve a la página de [claves de API](https://dashboard.mintlify.com/settings/organization/api-keys) en tu panel de control.
    2. Selecciona la opción **Create Admin API Key**.
    3. Copia la clave y almacénala de forma segura.

    ### Obtén tu token de acceso personal de GitHub

    1. En GitHub, ve a **Configuración**.
    2. Haz clic en **Developer settings**.
    3. Haz clic en **Personal access tokens**.
    4. Haz clic en **Tokens (classic)**.
    5. Haz clic en **Generate new token (classic)**.
    6. Selecciona estos permisos:
       * `repo` (control total de los repositorios privados)
       * `admin:repo_hook` (si quieres que n8n cree webhooks)
    7. Genera y almacena el token de forma segura.

    Para obtener más información, consulta [Crear un token de acceso personal (clásico)](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens?versionId=free-pro-team%40latest\&productId=account-and-profile#creating-a-personal-access-token-classic) en la documentación de GitHub.

    ## Construye el flujo de trabajo

    ### Crear el activador de webhook

    1. En n8n, crea un nuevo flujo de trabajo.
    2. Añade un nodo de webhook.
    3. Configurar el webhook:
       * Método HTTP: `POST`
       * Ruta: `auto-update-documentation` (o cualquier ruta única)
       * Autenticación: ninguna
       * Responder: inmediatamente
    4. Guarda el flujo de trabajo.
    5. Copia la URL del webhook de producción. Tiene este formato: `https://your-n8n-instance.app.n8n.cloud/webhook/auto-update-documentation`

    <Frame>
      <img
        src="https://mintcdn.com/anotherhorizon/JcCuRMYxa7xgY0h0/images/guides/n8n/webhook-node.png?fit=max&auto=format&n=JcCuRMYxa7xgY0h0&q=85&s=efb3772df40e8127173b6dd72fe5b5e8"
        alt="Captura de pantalla de la configuración del nodo de webhook."
        style={{
width: 'auto',
height: '700px',
}}
        width="794"
        height="1290"
        data-path="images/guides/n8n/webhook-node.png"
      />
    </Frame>

    ### Configurar el webhook de GitHub

    1. Accede a tu repositorio de código en GitHub.
    2. Haz clic en **Settings**.
    3. Haz clic en **Webhooks**.
    4. Haz clic en **Add webhook**.
    5. Configurar el webhook:
       * URL de carga útil: pega la URL de tu webhook de n8n
       * Tipo de contenido: `application/json`
       * ¿Qué eventos quieres usar para activar este webhook?
         * Selecciona **Let me select individual events.**
         * Selecciona solo **Push events**.
       * Selecciona **Active**
    6. Haz clic en **Add webhook**.

    ### Filtrar pushes a la rama principal

    Agrega un nodo de código después del webhook para filtrar los pushes a main y extraer la información relevante.

    1. Añade un nodo de código.
    2. Llámalo "Filtrar envíos a main."
    3. Configura el modo en **Ejecutar una vez para todos los elementos**.
    4. Añade este código JavaScript:

    ```javascript theme={null}
    const webhookData = $input.first().json.body;

    // Solo continuar si es un push a main
    if (webhookData.ref !== "refs/heads/main") {
      return [];
    }

    // Extraer información
    const repository = webhookData.repository;
    const pusher = webhookData.pusher;

    // Construir mensaje para el agente
    const agentMessage = `Actualiza la documentación para los cambios enviados a main en ${repository.name}. Siempre edita los archivos y crea una solicitud de extracción.`;

    return {
      json: {
        codeRepoName: repository.full_name,
        codeRepoShortName: repository.name,
        agentMessage: agentMessage
      }
    };
    ```

    <Frame>
      <img src="https://mintcdn.com/anotherhorizon/JcCuRMYxa7xgY0h0/images/guides/n8n/filter-merged-PRs-node.png?fit=max&auto=format&n=JcCuRMYxa7xgY0h0&q=85&s=2eed186b7e23079b9d9f01b66d93588b" alt="Captura de pantalla de la configuración del nodo «Filtrar pushes a main»." width="1520" height="1444" data-path="images/guides/n8n/filter-merged-PRs-node.png" />
    </Frame>

    Este código detiene el flujo de trabajo si el push no se realizó a main, extrae toda la información relevante del webhook de GitHub y crea un mensaje para la API del agente.

    ### Llamar a la API del agente

    Añade un nodo de solicitud HTTP para crear un trabajo de documentación.

    1. Añade un nodo de solicitud HTTP.
    2. Llámalo "Crear trabajo de agente."
    3. Configurar la solicitud:

       * Método: `POST`
       * URL: `https://api.mintlify.com/v1/agent/YOUR_PROJECT_ID/job` (reemplaza `YOUR_PROJECT_ID` con el ID de tu proyecto en la página de [API keys](https://dashboard.mintlify.com/settings/organization/api-keys))
       * Autenticación: Generic Credential Type → Header Auth
         * Crea una nueva credencial:
           * Name: `Authorization`
           * Value: `Bearer mint_YOUR_API_KEY` (reemplázalo con tu API key)
       * Enviar cuerpo (Send Body): On
       * Tipo de contenido del cuerpo (Body Content Type): JSON
       * Especificar cuerpo (Specify Body): Using JSON
       * Agrega este JSON:

       ```json theme={null}
       {
       "branch": "docs-update-from-{{ $json.codeRepoShortName }}-{{ $now.toISOString() }}",
       "messages": [
           {
           "role": "system",
           "content": "{{ $json.agentMessage }}"
           }
       ],
       "asDraft": false
       }
       ```

    <Frame>
      <img
        src="https://mintcdn.com/anotherhorizon/JcCuRMYxa7xgY0h0/images/guides/n8n/create-agent-job-node.png?fit=max&auto=format&n=JcCuRMYxa7xgY0h0&q=85&s=d118c51ecd3eba07c6a8f8b4fe588aa3"
        alt="Captura de pantalla de la configuración del nodo de creación de tareas de agente."
        style={{
width: 'auto',
height: '700px',
}}
        width="756"
        height="1438"
        data-path="images/guides/n8n/create-agent-job-node.png"
      />
    </Frame>

    El agente crea una solicitud de extracción en tu repositorio de documentación usando un nombre de branch descriptivo que incluye el nombre del repositorio de origen y la marca temporal.

    ### Activar el flujo de trabajo

    1. Guarda tu flujo de trabajo.
    2. Actívalo.

    Tu flujo de trabajo ahora está monitoreando tu repositorio de código en busca de pushes a main.

    <Frame>
      <img src="https://mintcdn.com/anotherhorizon/JcCuRMYxa7xgY0h0/images/guides/n8n/workflow.png?fit=max&auto=format&n=JcCuRMYxa7xgY0h0&q=85&s=0ec2a09ab97a5173124d4df53fde9cb5" alt="Captura de pantalla del flujo de trabajo automatizado en el editor de n8n." width="1562" height="632" data-path="images/guides/n8n/workflow.png" />
    </Frame>

    ## Prueba la automatización

    1. Crea una branch de prueba en tu repositorio de código:
       ```bash theme={null}
       git checkout -b test-docs-automation
       ```

    2. Realiza un pequeño cambio y crea un commit:
       ```bash theme={null}
       git add .
       git commit -m "Prueba: activar automatización de docs"
       git push origin test-docs-automation
       ```

    3. Abre una solicitud de extracción en GitHub.

    4. Fusiona la solicitud de extracción.

    ### Verificar la automatización

    Deberías ver una nueva ejecución de n8n con todos los nodos completados exitosamente, y una nueva branch y solicitud de extracción en tu repositorio de documentación.

    ## Solución de problemas

    ### El webhook no se está activando

    * Comprueba que el flujo de trabajo esté activo en n8n.
    * En la configuración del repositorio de GitHub, ve a Settings → Webhooks → Recent Deliveries para ver el código de respuesta.
    * Verifica que la URL del webhook coincida exactamente con la de tu webhook de n8n.

    ### Error 401 de la API del agente

    * Verifica que tu clave de API empiece por `mint_`.
    * Comprueba que el encabezado Authorization tenga el formato `Bearer mint_yourkey`.
    * Confirma que la clave de API corresponda a la organización correcta de Mintlify.

    ### Error 401 de GitHub

    * Asegúrate de que tu token tenga el permiso `repo`.
    * Comprueba que el token no haya caducado.
    * Confirma que has incluido el encabezado `User-Agent` en la solicitud a GitHub.
  </Tab>
</Tabs>
