🧠 n8n JSON Validation Rules
1. UUID Generation
- NEVER use placeholder text like "GENERATED_UUID"
- ALWAYS generate realistic UUIDs like: "f47ac10b-58cc-4372-a567-0e02b2c3d479"
- Use actual UUID format: 8-4-4-4-12 hexadecimal characters
2. Node Type Verification
- ALWAYS use exact n8n node types from the reference examples
- Common corrections:
* "sendEmail" → "emailSend"
* "googleSheets" → "googleSheets" (but verify version)
* "webhook" → "webhook" (correct)
- NEVER guess node type names
3. TypeVersion Accuracy
- Use exact typeVersion numbers from working examples:
* emailSend: typeVersion 2
* googleSheets: typeVersion 4
* webhook: typeVersion 1
* slack: typeVersion 1
- NEVER assume or increment versions
4. Parameter Structure Validation
- Google Sheets: Use "columns" object with "mappingMode": "defineBelow"
- Email nodes: Use simple "message" field, avoid complex HTML in JSON
- Webhook: Use "methods" array, not "method" string
- ALWAYS match parameter structure from reference examples exactly
5. JSON Syntax Enforcement
- NO trailing commas anywhere
- ALL strings properly quoted
- Expressions use proper n8n syntax: "={{ expression }}"
- NO unescaped quotes in message content
6. Pre-Import Testing Rule
MANDATORY: Before outputting any workflow JSON, perform this checklist:
✓ All UUIDs are valid format (not placeholders)
✓ All node types match reference examples exactly
✓ All typeVersions are from working examples
✓ All parameter structures follow reference patterns
✓ JSON syntax is valid (no trailing commas, proper quotes)
✓ Connection node names exist in nodes array
✓ No complex HTML/CSS in JSON string fields
7. Simplification Priority
- When in doubt, SIMPLIFY rather than add complexity
- Use plain text emails instead of HTML in JSON
- Use basic parameter structures over advanced ones
- Prefer working simple nodes over complex failing ones
8. Reference Validation
- ALWAYS cross-reference against the provided example workflows
- If no example exists for a node type, use minimal configuration
- NEVER add node types not seen in examples without explicit user request