{"record":{"id":"08648140143146aa","repo":"n8n-io/n8n","slug":"execute-workflow-invalid-input-mapping","errorCode":"EXECUTE_WORKFLOW_INVALID_INPUT_MAPPING","errorMessage":"${nodeRef} has an invalid ${WORKFLOW_INPUTS_VALUE_PATH}. When parameters.workflowInputs.mappingMode is '${DEFINE_BELOW_MODE}', an explicitly provided ${WORKFLOW_INPUTS_VALUE_PATH} must be an object. If the selected sub-workflow accepts all data, omit parameters.workflowInputs. Otherwise set parameters.workflowInputs to a full Resource Mapper mapping whose value and schema match the declared inputs, such as ${VALID_MAPPING_EXAMPLE}.","messagePattern":"(.+?) has an invalid (.+?)\\. When parameters\\.workflowInputs\\.mappingMode is '(.+?)', an explicitly provided (.+?) must be an object\\. If the selected sub-workflow accepts all data, omit parameters\\.workflowInputs\\. Otherwise set parameters\\.workflowInputs to a full Resource Mapper mapping whose value and schema match the declared inputs, such as (.+?)\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/@n8n/workflow-sdk/src/workflow-builder/plugins/validators/execute-workflow-validator.ts","lineNumber":70,"sourceCode":"\t\t\treturn [];\n\t\t}\n\n\t\tif (isRecord(workflowInputs)) {\n\t\t\tconst mappingMode = workflowInputs.mappingMode ?? DEFINE_BELOW_MODE;\n\t\t\tconst value = workflowInputs.value;\n\t\t\tif (mappingMode !== DEFINE_BELOW_MODE || value === undefined || isRecord(value)) return [];\n\t\t}\n\n\t\tconst mapKey = findMapKey(graphNode, ctx);\n\t\tconst originalName = node.name;\n\t\tconst renamed = isAutoRenamed(mapKey, originalName);\n\t\tconst displayName = renamed ? mapKey : originalName;\n\t\tconst origForWarning = renamed ? originalName : undefined;\n\t\tconst nodeRef = formatNodeRef(displayName, origForWarning, node.type);\n\n\t\treturn [\n\t\t\t{\n\t\t\t\tcode: 'EXECUTE_WORKFLOW_INVALID_INPUT_MAPPING',\n\t\t\t\tmessage:\n\t\t\t\t\t`${nodeRef} has an invalid ${WORKFLOW_INPUTS_VALUE_PATH}. ` +\n\t\t\t\t\t`When parameters.workflowInputs.mappingMode is '${DEFINE_BELOW_MODE}', an explicitly provided ${WORKFLOW_INPUTS_VALUE_PATH} must be an object. ` +\n\t\t\t\t\t`If the selected sub-workflow accepts all data, omit parameters.workflowInputs. Otherwise set parameters.workflowInputs to a full Resource Mapper mapping whose value and schema match the declared inputs, such as ${VALID_MAPPING_EXAMPLE}.`,\n\t\t\t\tseverity: 'error',\n\t\t\t\tviolationLevel: 'major',\n\t\t\t\tnodeName: displayName,\n\t\t\t\tparameterPath: WORKFLOW_INPUTS_VALUE_PATH,\n\t\t\t\toriginalName: origForWarning,\n\t\t\t},\n\t\t];\n\t},\n};\n","sourceCodeStart":52,"sourceCodeEnd":84,"githubUrl":"https://github.com/n8n-io/n8n/blob/5ac6606e81f67bb9534255570cd4e86fd8101eee/packages/@n8n/workflow-sdk/src/workflow-builder/plugins/validators/execute-workflow-validator.ts#L52-L84","documentation":"Error-level validator issue (code EXECUTE_WORKFLOW_INVALID_INPUT_MAPPING, violationLevel 'major') emitted when an Execute Workflow node has parameters.workflowInputs.mappingMode set to 'defineBelow' (DEFINE_BELOW_MODE) AND an explicitly provided parameters.workflowInputs.value is not a record/object. In defineBelow mode the value must be a full Resource Mapper mapping object; otherwise it must be omitted entirely (which lets the sub-workflow accept all data).","triggerScenarios":"Setting mappingMode: 'defineBelow' with a non-object value (e.g. a string, array, or number) under workflowInputs.value; providing a partial mapping that is not a complete Resource Mapper shape.","commonSituations":"Hand-writing executeWorkflow config without the Resource Mapper schema; LLM-generated mapping that uses a primitive where an object is required; partial migration from an older mapping format.","solutions":["If the sub-workflow accepts all data, omit parameters.workflowInputs entirely.","Otherwise set parameters.workflowInputs to a full Resource Mapper mapping whose value and schema match the declared inputs (see VALID_MAPPING_EXAMPLE).","Ensure mappingMode 'defineBelow' is paired with an object value, not a primitive."],"exampleFix":"// before\nexecuteWorkflow({\n  workflowId: '123',\n  workflowInputs: { mappingMode: 'defineBelow', value: 'hardcoded' }\n})\n// after\nexecuteWorkflow({\n  workflowId: '123'\n  // omit workflowInputs to accept all data\n})","handlingStrategy":"validation","validationCode":"const wi = params.workflowInputs;\nconst DEFINE_BELOW_MODE = 'defineBelow';\nif (wi && wi.mappingMode === DEFINE_BELOW_MODE && wi.value !== undefined && typeof wi.value !== 'object') {\n  // error: value must be an object or omitted\n}","typeGuard":"function isValidWorkflowInputs(wi: unknown): boolean {\n  if (wi == null) return true;\n  if (typeof wi !== 'object') return false;\n  const v = (wi as any);\n  if (v.mappingMode !== 'defineBelow') return true;\n  return v.value === undefined || (typeof v.value === 'object' && !Array.isArray(v.value));\n}","tryCatchPattern":null,"preventionTips":["Omit workflowInputs when the sub-workflow accepts all data.","When using 'defineBelow', provide a full Resource Mapper mapping object.","Validate executeWorkflow config against the Resource Mapper schema before saving."],"tags":["execute-workflow","validator","resource-mapper","mapping"],"backgroundTag":null,"analyzedSha":"5ac6606e81f67bb9534255570cd4e86fd8101eee","analyzedAt":"2026-08-12T05:26:35.080Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}