¿Hay una forma de agregar descripción en el workflow con la API de n8n

Describe el problema/error/pregunta

Quiero escribir una descripción al flujo de trabajo con la API de n8n, pero no sé cómo hacerlo. Intenté escribir una variable de descripción por mi cuenta, en el objeto meta en el flujo de trabajo, pero simplemente no funcionó. Así que mi pregunta es, ¿cómo puedo escribir mi descripción con la API de n8n?

Gracias de antemano a quien responda, cualquier ayuda es apreciada.

¿Cuál es el mensaje de error (si lo hay)?

Por favor, comparte tu flujo de trabajo

(Selecciona los nodos en tu lienzo y usa los atajos de teclado CMD+C/CTRL+C y CMD+V/CTRL+V para copiar y pegar el flujo de trabajo.)

Comparte el resultado devuelto por el último nodo

Información sobre tu configuración de n8n

  • Versión de n8n:
  • Base de datos (por defecto: SQLite):
  • Configuración n8n EXECUTIONS_PROCESS (por defecto: own, main):
  • Ejecutando n8n a través de (Docker, npm, n8n cloud, aplicación de escritorio):
  • Sistema operativo:

Hola @SE-automations

La razón por la que tu intento anterior no funcionó es que la descripción debe estar en el nivel superior de tus datos de solicitud. Intentabas colocarla dentro del objeto “meta”, pero n8n no la busca allí; espera que la descripción sea un campo separado en el cuerpo principal del mensaje.

También necesitas asegurarte de que tu software n8n esté actualizado. En versiones anteriores, había un bug que bloqueaba que la API aceptara descripciones, lo que causaba que el sistema enviara un mensaje de error. Esto se corrigió en la versión 2.16.0, así que mientras uses una versión más nueva, funcionará.

Para solucionarlo, simplemente envía una solicitud “PATCH” al endpoint del flujo de trabajo e incluye la descripción como una propiedad principal. En lugar de anidarla, solo escribe "description": "tu texto aquí" en la raíz de tu código JSON, y el sistema actualizará la descripción del flujo de trabajo correctamente.

Aquí hay un ejemplo:

curl -X PATCH "https://your-n8n-instance.com/api/v1/workflows/YOUR_WORKFLOW_ID" \
  -H "X-N8N-API-KEY: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"description": "This is my updated workflow description"}'

Hola @SE-automations

Para hacer esto directamente dentro de un flujo de trabajo de n8n (sin Postman/cURL), puedes usar el nodo “n8n” integrado para llamar a la API de n8n:

  1. Añade el nodo n8n

    • En el editor, haz clic en el botón grande “+” para añadir un nuevo nodo.

    • En el cuadro de búsqueda, escribe n8n.

    • Selecciona el nodo simplemente llamado “n8n” (categoría: Core Nodes).

  2. Elige la acción correcta

    • En el desplegable Resource / Action, elige “Workflow” y luego “Update a workflow” (o “Update workflow”, según tu versión).

    • Esto le indica al nodo que quieres llamar al punto final /workflows de la API de n8n.

  3. Selecciona el flujo de trabajo que quieres actualizar

    • En el campo Workflow ID, selecciona tu flujo de trabajo del desplegable o pega el ID manualmente.

    • Si aún no conoces el ID, puedes usar primero el mismo nodo n8n con la acción “Get a workflow” para obtenerlo.

  4. Proporciona el objeto Workflow con descripción

    • Cambia “Workflow Object” (o “Body”) a modo JSON.

    • Pega el JSON del flujo de trabajo actual y añade el campo description en el nivel raíz, por ejemplo:

      json
      

      {
      "name": "My workflow",
      "nodes": [...],
      "connections": {...},
      "settings": {},
      "description": "This is my updated workflow description"
      }

    • Asegúrate de que description no esté dentro de meta, tiene que permanecer en el nivel raíz del objeto.

  5. Ejecuta el nodo

    • Ejecuta el nodo.

    • Si el JSON coincide con el esquema del flujo de trabajo y tu versión de n8n es lo suficientemente reciente para soportar description en la API, la descripción del flujo de trabajo en la interfaz se actualizará.

@kjooleng, quiero hacerlo dentro del nodo de n8n mismo ya que estoy construyendo una automatización que tiene que actualizar la descripción de otros flujos de trabajo de n8n, de todas formas gracias por proporcionar una solución. :smiley:

Bad request - please check your parameters

request/body/settings must NOT have additional properties

Estoy recibiendo este error dentro del nodo n8n si intento tu solución. ¿Quizás no lo entendí correctamente? ¿O me equivoqué en algún lugar?

El mensaje de error
Bad request - please check your parameters
request/body/settings must NOT have additional properties
significa que en el cuerpo de tu solicitud, específicamente dentro del objeto settings del flujo de trabajo, estás enviando una o más claves que no están permitidas por el esquema de la API de n8n.

Según la documentación de la API, settings solo acepta un conjunto específico de campos. Un ejemplo abreviado se ve así:

"settings": {
"saveExecutionProgress": true,
"saveManualExecutions": false,
"saveDataErrorExecution": "all",
"saveDataSuccessExecution": "all",
"executionTimeout": 3600,
"errorWorkflow": "VzqKEW0ShTXA5vPj",
"timezone": "America/New_York",
"executionOrder": "v1",
"callerPolicy": "workflowsFromSameOwner",
"callerIds": "14, 18, 23",
"timeSavedPerExecution": 5,
"redactionPolicy": "none",
"availableInMCP": false,
"customTelemetryTags": [
{ "key": "env", "value": "prod" }
]
}

Si tu objeto settings contiene claves adicionales o personalizadas (por ejemplo myCustomSetting, o campos que fueron añadidos por versiones anteriores / metadatos de la interfaz y no forman parte del esquema actual), la API responderá exactamente con:

request/body/settings must NOT have additional properties

Cómo solucionarlo:

  1. Verifica el JSON que estás enviando (ya sea a través del nodo de n8n, un nodo HTTP Request, o un cliente externo).

  2. Dentro de "settings": { ... }, elimina todas las claves que no estén listadas en la documentación de la API.

  3. Envía la solicitud nuevamente con un objeto settings “limpio”.

Si estás utilizando el JSON de GET /workflows/{id} y luego lo utilizas para PUT/Actualizar, asegúrate de que:

  • En el nivel raíz solo mantengas campos válidos como name, nodes, connections, settings, staticData, tags, description, etc.

  • Dentro de settings, solo mantengas campos que estén definidos en el esquema actual de la API, de lo contrario seguirás recibiendo el error «must NOT have additional properties».

Estás muy cerca, una vez que elimines esas claves no soportadas de settings, la misma solicitud debería comenzar a funcionar como esperas. Si deseas compartir tu JSON actual, con gusto puedo señalarte exactamente qué propiedades están causando el problema.

No, no envié nada personalizado en el campo settings del JSON, como dijiste, solo configuré el campo description del JSON a nivel raíz, ¿me estoy perdiendo algo, o no lo estoy haciendo correctamente?

¿Puedes enviar el JSON de tu nodo de error n8n? Puedo ver claramente el problema.

Sure, here you go,

Let try with this:

No, la descripción sigue vacía, no se actualizó, estoy en la última versión de n8n, ¿qué estoy haciendo mal? ¿n8n admite la edición de descripciones a través del nodo?

@SE-automations

Intenta esto

Necesitas configurar el nodo «Set Parameters» con tu workflowId, apiKey y baseUrl.

Bad request - please check your parameters

request/body/settings must NOT have additional properties

¿Es este el error en el último nodo de solicitud http, estoy haciendo algo mal?

@SE-automations

He realizado cambios en los últimos 2 nodos. Ahora está funcionando

{
  "nodes": [
    {
      "parameters": {},
      "id": "7c366a4c-e62d-4d98-9596-259e806aa7a9",
      "name": "When clicking \"Execute Workflow\"",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        -256,
        -112
      ]
    },
    {
      "parameters": {
        "fields": {
          "values": [
            {
              "name": "workflowId",
              "stringValue": "YOUR_TARGET_WORKFLOW_ID"
            },
            {
              "name": "newDescription",
              "stringValue": "This description was updated via API!"
            },
            {
              "name": "apiKey",
              "stringValue": "YOUR_N8N_API_KEY"
            },
            {
              "name": "baseUrl",
              "stringValue": "https://your-n8n-instance.com"
            }
          ]
        },
        "options": {}
      },
      "id": "b26141cc-8a55-4085-b351-4a099ceca651",
      "name": "Set Parameters",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.2,
      "position": [
        -32,
        -112
      ]
    },
    {
      "parameters": {
        "url": "={{$json.baseUrl}}/api/v1/workflows/{{$json.workflowId}}",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {}
      },
      "id": "c3dc2010-db72-45a1-8d7e-fa4da8c6b726",
      "name": "Get Current Workflow",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        192,
        -112
      ]
    },
    {
      "parameters": {
        "jsCode": "const workflow = $input.first().json;\nconst params = $(\"Set Parameters\").first().json;\n\n// n8n's public PUT /api/v1/workflows/{id} endpoint rejects some\n// settings returned by GET, especially settings.binaryMode.\n// Build a clean request body with only accepted workflow-update fields.\nconst cleanSettings = {};\nif (workflow.settings?.executionOrder !== undefined) {\n  cleanSettings.executionOrder = workflow.settings.executionOrder;\n}\n\nreturn {\n  name: workflow.name,\n  description: params.newDescription,\n  nodes: workflow.nodes,\n  connections: workflow.connections,\n  settings: cleanSettings,\n};"
      },
      "id": "396b85c0-72a8-474d-b629-87ab5ccf026c",
      "name": "Clean 
 & Add Description",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        432,
        -112
      ]
    },
    {
      "parameters": {
        "method": "PUT",
        "url": "={{$(\"Set Parameters\").first().json.baseUrl}}/api/v1/workflows/{{$(\"Set Parameters\").first().json.workflowId}}",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "n8nApi",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify({\n  name: $json.name,\n  description: $json.description,\n  nodes: $json.nodes,\n  connections: $json.connections,\n  settings: {\n    executionOrder: $json.settings?.executionOrder ?? 'v1',\n  },\n}) }}",
        "options": {}
      },
      "id": "f4f011eb-0bb9-4ecd-86b5-3a273b839d5a",
      "name": "Update Workflow",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        640,
        -112
      ],
      "credentials": {
        "n8nApi": {
          "id": "tJzSKMBOStUkRFnW",
          "name": "n8n account"
        }
      }
    }
  ],
  "connections": {
    "When clicking \"Execute Workflow\"": {
      "main": [
        [
          {
            "node": "Set Parameters",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Parameters": {
      "main": [
        [
          {
            "node": "Get Current Workflow",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Current Workflow": {
      "main": [
        [
          {
            "node": "Clean 
 & Add Description",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Clean 
 & Add Description": {
      "main": [
        [
          {
            "node": "Update Workflow",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "meta": {
    "instanceId": "1a1f57ec2a2da833e112999d86f7d337d8347efc10e2e2a4dab8d5b310dec682"
  }
}

La descripción no forma parte de meta — es su propio campo en la raíz del objeto workflow, junto a name, nodes, connections y settings. Así que: GET el workflow desde /api/v1/workflows/{id}, agrega “description”: “tu texto” en el nivel superior (no dentro de meta, no dentro de settings), y luego envía el objeto completo con un PUT al mismo Endpoint.

Dos cosas que me confundieron cuando hice esto: la API pública es estricta y quiere el objeto workflow completo de vuelta, así que un PATCH con solo { “description”: “…” } puede fallar la validación de esquema — GET → agrega el campo → PUT el objeto completo. Y si el endpoint /api/v1 público aún no lo acepta, el endpoint interno que usa el editor mismo (/rest/workflows/{id}) acepta la descripción sin problemas. Eso debería hacer que se guarde.

Descripción

Las descripciones claras ayudan a otros usuarios y clientes MCP a entender el propósito de tu flujo de trabajo

La descripción aún está vacía, pero el flujo de trabajo que me proporcionaste se ejecutó sin ningún error.

Gracias por tu solución, la probé, creo que solo quisiste decir lo que @kjooleng proporcionó como flujo de trabajo, estoy extremadamente apenado, pero no lo entendí, intenté el flujo de trabajo de @kjooleng se ejecutó exitosamente pero no actualizó la descripción del flujo de trabajo, ¿querías decir otra solución o sugeriste cambios al flujo de trabajo?

Necesitas abrir el flujo de trabajo directamente desde el panel de control.
No aparecerá si el flujo de trabajo está actualmente abierto

¡Sí, funcionó! ¡Gracias @kjooeng por la solución, y gracias a todos los demás por intentar resolver el problema!