Free tool
n8n workflow JSON checker
Published · Last updated · Checked against docs.n8n.io and the n8n source on November 11, 2026
An n8n workflow JSON is the file n8n saves when you download a workflow. It has a nodes array (name, type, typeVersion, position, parameters, credentials) and a connections object keyed by source node name. Paste one below to check it before you import or share it.
Check your workflow JSON
Your JSON stays in this browser tab. The check runs on your device and nothing is uploaded or saved.
In n8n, open the workflow menu and select Download, or select all nodes and copy them. Then paste here.
What the checker looks for
- Invalid JSON. The line and column where parsing stopped.
- Broken connections. Links from or to a node name that is not in the nodes array, and links without a type or index (IConnections type).
- Nodes that never run. Nodes with no connection at all, and nodes with nothing feeding their input that are not triggers. AI sub-nodes such as chat models and tools are fine without a main input, because they plug in through ai_* connections.
- Node problems. Duplicate names, missing type, typeVersion, position or parameters, duplicate ids, and deactivated nodes (INode type).
- Missing node references. Expressions like
$("Get customer").itemthat name a node not in the workflow. A common break after a rename (expression reference). - Credential names. Every credential reference, with its name, since n8n says names can be sensitive (export and import).
- Hardcoded secrets. Bearer and Basic auth headers, values of fields named like apiKey, token, secret or password, keys in URL query strings, passwords inside URLs, and known formats: GitHub tokens, AWS access key IDs, Stripe secret keys, Slack incoming webhook URLs, JSON Web Tokens and PEM private keys.
- Webhooks. Webhook nodes with no authentication (n8n's default is None), and full webhook URLs that show your n8n host.
- Pinned data and error workflow. pinData that may hold real records, and an error workflow id that will not exist on another instance.
What is inside an n8n workflow JSON
n8n's docs say "n8n saves workflows in JSON format" (export and import). The docs do not describe every key, so the tables below come from n8n's TypeScript types (INode, IConnections) at the commit linked in the sources.
Top-level keys
| Key | What it holds |
|---|---|
| name | The workflow name. |
| nodes | Array of node objects. This is the workflow. |
| connections | Object keyed by source node name. Says which output feeds which input. |
| settings | Workflow settings such as execution order, timezone and error workflow. |
| pinData | Pinned test output, keyed by node name. Can hold real data. |
| id, active, versionId, meta | Details from the instance the workflow came from. |
Fields on each node
| Key | What it holds |
|---|---|
| name | Unique name. Connections and expressions use it. |
| type | Which node to load, for example n8n-nodes-base.httpRequest. |
| typeVersion | Version of that node, a number. |
| position | Canvas place as [x, y]. |
| parameters | The settings you filled in on the node. |
| id | Node id, a string. |
| credentials | Optional. { "<credential type>": { "id", "name" } }. No secret values. |
| disabled | Optional. true when the node is deactivated. |
| webhookId | Optional. An id for the node's webhook. |
| notes, retryOnFail, onError, ... | Optional node settings. |
How connections are stored
Each key in connections is a source node name. Under it, each output type (main, or an AI type like ai_languageModel) holds an array of output slots, and each slot holds the links that leave it. index is the input slot on the target node.
"connections": {
"Webhook": {
"main": [
[ { "node": "HTTP Request", "type": "main", "index": 0 } ]
]
}
}Before you share a workflow JSON
n8n's docs: "Exported workflow JSON files include credential names and IDs. While IDs aren't sensitive, the names could be, depending on how you name your credentials. HTTP Request nodes may contain authentication headers when imported from cURL. Remove or anonymize this information from the JSON file before sharing to protect your credentials." (export and import)
- Paste the file into the checker above and read every warning.
- Move hardcoded keys into n8n credentials. If a key was already in a shared file, revoke it and make a new one.
- Add authentication to public webhooks. The Webhook node supports Basic auth, Header auth and JWT auth.
- Copy or download the cleaned JSON, read it once more, then share that file.
How to import the JSON into n8n
- Open a workflow and select the Workflow menu in the canvas header.
- Select Import from File for a .json file, or Import from URL for a link to workflow JSON.
- Or copy the JSON and paste it onto the canvas with
Ctrl + VorCmd + V. - Open each node that uses a credential and select one of your own.
Steps from n8n's export and import page.
How this tool works
- Everything runs in your browser. Nothing you paste or open is sent to a server or stored, and there are no API keys or accounts.
- The text goes through the browser's JSON parser. If that passes, the tool walks the nodes array and the connections object and runs the checks listed above. Each finding links the doc or source line it is based on.
- It does not know every node's parameter list, so it cannot tell you that a field inside a node is set wrong. Run the workflow once in n8n after you import it.
- Triggers are spotted by type name: types ending in "Trigger", plus webhook, start, cron, interval and emailReadImap. A custom trigger with another name shows up as a node with no input.
- The secret scan uses key names and published token formats. It can miss a secret with an unusual name, and it can flag a long value that is not secret. It scans the parameters of every node, sticky note text included. pinData is not scanned line by line; the cleaned copy drops it whole.
- The cleaned copy changes only what was flagged: credential names become "<type> credential", flagged secrets become REDACTED, webhook hosts become your-n8n-host.example, and pinData is removed.
More free n8n tools and templates
- n8n cron expression builder for the Schedule Trigger, with the next 10 run times.
- Move Pipedream workflows to n8n, a step-by-step guide.
- Template: Slack messaging through a webhook
- Template: Google Doc creation from a webhook
- Template: Connect Claude Code with n8n
- Template: Slack conversation summaries
- Browse all n8n workflow templates
Want someone to build, review and run your n8n workflows? AY Automate builds and looks after n8n automations.
n8n workflow JSON FAQ
What is an n8n workflow JSON?
It is the file n8n saves when you download a workflow. n8n saves workflows in JSON format. The file has a nodes array, where each node has a name, type, typeVersion, position and parameters, and a connections object that links nodes by their names.
How do I validate an n8n workflow JSON?
Paste it into the checker on this page. It first checks that the text is valid JSON and shows the line and column of any syntax error. Then it checks the nodes array and the connections object against the field names in n8n's own TypeScript types, and lists broken connections, unknown node references, deactivated nodes, credential names and hardcoded secrets.
Is there an official JSON schema for n8n workflows?
n8n's docs index did not list a JSON Schema file for workflows when we checked on November 11, 2026. The closest reference is n8n's source code: the INode, IConnection and IConnections types in packages/workflow/src/interfaces.ts. This tool uses those field names, and the sources list links the exact lines.
How do I get the JSON of an n8n workflow?
Open the workflow, select the Workflow menu in the canvas header and select Download. n8n saves the current workflow as a JSON file. You can also select nodes on the canvas and copy them with Ctrl+C or Cmd+C, which puts the JSON on your clipboard.
How do I import a workflow JSON into n8n?
In the Workflow menu, select Import from File to load a .json file, or Import from URL to load workflow JSON from a link. You can also paste copied JSON straight onto the canvas with Ctrl+V or Cmd+V.
Is it safe to share an n8n workflow JSON?
Check it first. n8n's docs say exported workflow JSON files include credential names and IDs, that the names could be sensitive, and that HTTP Request nodes may contain authentication headers when imported from cURL. Pinned test data can also be real data. The checker flags all of these and gives you a cleaned copy.
Why are my connections broken after I edited the JSON by hand?
Connections point at nodes by name, not by id. The connections object is keyed by the source node name and each link names its target node. If you rename a node in the nodes array and not in connections, the link points at a node that no longer exists. The checker lists each one.
Does this tool upload my workflow?
No. The check runs in your browser with plain JavaScript. Nothing you paste or open is sent to a server or saved, and there are no accounts or API keys.
Sources
All checked November 11, 2026.
- n8n docs: Export and import (JSON format, credential names and IDs, cURL headers, import options)
- n8n source: INode type, IConnection, IConnections, NodeConnectionTypes and INodeCredentialsDetails (packages/workflow/src/interfaces.ts at commit 2fdca26)
- n8n docs: Work with nodes (triggers, Deactivate)
- n8n docs: Connect nodes together
- n8n docs: Expression reference ($("NodeName"))
- n8n docs: Pin and mock data
- n8n docs: Webhook node and n8n source: Webhook authentication default
- n8n docs: endpoint environment variables (/webhook and /webhook-test paths)
- n8n docs: Configure workflow settings (error workflow)
- Token formats: GitHub, AWS, Stripe, Slack incoming webhooks
- Standards: RFC 6750, RFC 7617, RFC 7519, RFC 7468, RFC 3986 section 3.2.1
