Loading...
Loading...
Compare original and translation side by side
| Variable | Description | Example |
|---|---|---|
| n8n instance hostname (with protocol, no trailing slash) | |
| API key generated in n8n UI (Settings > API) | |
export N8N_HOST="https://n8n.example.com"
export N8N_API_KEY="your-api-key-here"| 变量名 | 描述 | 示例 |
|---|---|---|
| n8n实例的主机名(包含协议,末尾无斜杠) | |
| 在n8n界面(设置 > API)生成的API密钥 | |
export N8N_HOST="https://n8n.example.com"
export N8N_API_KEY="your-api-key-here"X-N8N-API-KEYcurl -H "X-N8N-API-KEY: $N8N_API_KEY" "$N8N_HOST/api/v1/workflows"$N8N_HOST/api/v1X-N8N-API-KEY: $N8N_API_KEYapplication/jsonX-N8N-API-KEYcurl -H "X-N8N-API-KEY: $N8N_API_KEY" "$N8N_HOST/api/v1/workflows"$N8N_HOST/api/v1X-N8N-API-KEY: $N8N_API_KEYapplication/json| Method | Path | Description |
|---|---|---|
| GET | | List all workflows (supports |
| GET | | Get a single workflow by ID |
| POST | | Create a new workflow |
| PUT | | Update an existing workflow (full replace) |
| DELETE | | Delete a workflow |
| POST | | Activate a workflow |
| POST | | Deactivate a workflow |
| POST | | Transfer workflow to another project |
| 请求方法 | 路径 | 描述 |
|---|---|---|
| GET | | 列出所有工作流(支持 |
| GET | | 根据ID获取单个工作流 |
| POST | | 创建新工作流 |
| PUT | | 更新现有工作流(全量替换) |
| DELETE | | 删除工作流 |
| POST | | 激活工作流 |
| POST | | 停用工作流 |
| POST | | 将工作流转移至其他项目 |
curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/workflows?limit=50" | jq .activetagsnamelimitcursorcurl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/workflows?limit=50" | jq .activetagsnamelimitcursorcurl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/workflows/{id}" | jq .curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/workflows/{id}" | jq .curl -s -X POST \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "My Workflow",
"nodes": [],
"connections": {},
"settings": {
"executionOrder": "v1"
}
}' \
"$N8N_HOST/api/v1/workflows" | jq .namenodesconnectionssettingsstaticDatatags[{"id": "tagId"}]curl -s -X POST \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "My Workflow",
"nodes": [],
"connections": {},
"settings": {
"executionOrder": "v1"
}
}' \
"$N8N_HOST/api/v1/workflows" | jq .namenodesconnectionssettingsstaticDatatags[{"id": "tagId"}]curl -s -X PUT \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Updated Workflow",
"nodes": [...],
"connections": {...},
"settings": {...}
}' \
"$N8N_HOST/api/v1/workflows/{id}" | jq .Note: If the workflow is active, the updated version is automatically re-published.
curl -s -X PUT \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Updated Workflow",
"nodes": [...],
"connections": {...},
"settings": {...}
}' \
"$N8N_HOST/api/v1/workflows/{id}" | jq .注意: 如果工作流处于激活状态,更新后的版本会自动重新发布。
undefinedundefinedundefinedundefinedcurl -s -X DELETE -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/workflows/{id}" | jq .curl -s -X DELETE -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/workflows/{id}" | jq .| Method | Path | Description |
|---|---|---|
| GET | | List executions (supports filters) |
| GET | | Get a single execution |
| DELETE | | Delete an execution |
| POST | | Stop a running execution |
| 请求方法 | 路径 | 描述 |
|---|---|---|
| GET | | 列出执行记录(支持筛选) |
| GET | | 获取单个执行记录 |
| DELETE | | 删除执行记录 |
| POST | | 停止正在运行的执行记录 |
curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/executions?limit=20&status=error" | jq .workflowIdstatuserrorsuccesswaitingrunninglimitcursorincludeDatacurl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/executions?limit=20&status=error" | jq .workflowIdstatuserrorsuccesswaitingrunninglimitcursorincludeDatacurl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/executions/{id}?includeData=true" | jq .idfinishedmodestartedAtstoppedAtworkflowIdstatusdataincludeData=truecurl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/executions/{id}?includeData=true" | jq .idfinishedmodestartedAtstoppedAtworkflowIdstatusdataincludeData=truecurl -s -X POST -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/executions/{id}/stop" | jq .curl -s -X POST -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/executions/{id}/stop" | jq .| Method | Path | Description |
|---|---|---|
| GET | | List all credentials |
| POST | | Create new credential |
| DELETE | | Delete a credential |
| POST | | Transfer credential to another project |
| 请求方法 | 路径 | 描述 |
|---|---|---|
| GET | | 列出所有凭证 |
| POST | | 创建新凭证 |
| DELETE | | 删除凭证 |
| POST | | 将凭证转移至其他项目 |
curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/credentials?limit=50" | jq .limitcursorcurl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/credentials?limit=50" | jq .limitcursorcurl -s -X POST \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "My API Key",
"type": "httpHeaderAuth",
"data": {
"name": "Authorization",
"value": "Bearer token123"
}
}' \
"$N8N_HOST/api/v1/credentials" | jq .nametypehttpHeaderAuthoAuth2ApihttpBasicAuthdataSecurity note: The API does not return credential secrets in GET responses. Only metadata (id, name, type, createdAt, updatedAt) is returned.
curl -s -X POST \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "My API Key",
"type": "httpHeaderAuth",
"data": {
"name": "Authorization",
"value": "Bearer token123"
}
}' \
"$N8N_HOST/api/v1/credentials" | jq .nametypehttpHeaderAuthoAuth2ApihttpBasicAuthdata安全提示: API在GET响应中不会返回凭证密钥,仅返回元数据(ID、名称、类型、创建时间、更新时间)。
| Method | Path | Description |
|---|---|---|
| GET | | List all tags |
| GET | | Get a single tag |
| POST | | Create a new tag |
| PUT | | Update a tag |
| DELETE | | Delete a tag |
| 请求方法 | 路径 | 描述 |
|---|---|---|
| GET | | 列出所有标签 |
| GET | | 获取单个标签 |
| POST | | 创建新标签 |
| PUT | | 更新标签 |
| DELETE | | 删除标签 |
curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/tags?limit=100" | jq .curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/tags?limit=100" | jq .curl -s -X POST \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "production"}' \
"$N8N_HOST/api/v1/tags" | jq .curl -s -X POST \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "production"}' \
"$N8N_HOST/api/v1/tags" | jq .curl -s -X PUT \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "staging"}' \
"$N8N_HOST/api/v1/tags/{id}" | jq .curl -s -X PUT \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "staging"}' \
"$N8N_HOST/api/v1/tags/{id}" | jq .| Method | Path | Description |
|---|---|---|
| GET | | List all variables |
| POST | | Create a variable |
| PUT | | Update a variable |
| DELETE | | Delete a variable |
| 请求方法 | 路径 | 描述 |
|---|---|---|
| GET | | 列出所有变量 |
| POST | | 创建变量 |
| PUT | | 更新变量 |
| DELETE | | 删除变量 |
curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/variables" | jq .curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/variables" | jq .curl -s -X POST \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{"key": "API_ENDPOINT", "value": "https://api.example.com"}' \
"$N8N_HOST/api/v1/variables" | jq .curl -s -X POST \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{"key": "API_ENDPOINT", "value": "https://api.example.com"}' \
"$N8N_HOST/api/v1/variables" | jq .curl -s -X PUT \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{"key": "API_ENDPOINT", "value": "https://api-v2.example.com"}' \
"$N8N_HOST/api/v1/variables/{id}" | jq .curl -s -X PUT \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{"key": "API_ENDPOINT", "value": "https://api-v2.example.com"}' \
"$N8N_HOST/api/v1/variables/{id}" | jq .| Method | Path | Description |
|---|---|---|
| GET | | List all users |
| GET | | Get user by ID (or |
| 请求方法 | 路径 | 描述 |
|---|---|---|
| GET | | 列出所有用户 |
| GET | | 根据ID(或 |
curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/users?limit=50" | jq .limitcursorincludeRolecurl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/users?limit=50" | jq .limitcursorincludeRole| Method | Path | Description |
|---|---|---|
| GET | | List all projects |
| GET | | Get project by ID |
| POST | | Create a project |
| PUT | | Update a project |
| DELETE | | Delete a project |
| 请求方法 | 路径 | 描述 |
|---|---|---|
| GET | | 列出所有项目 |
| GET | | 根据ID获取项目 |
| POST | | 创建项目 |
| PUT | | 更新项目 |
| DELETE | | 删除项目 |
curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/projects" | jq .curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/projects" | jq .curl -s -X POST \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Marketing Automations"}' \
"$N8N_HOST/api/v1/projects" | jq .curl -s -X POST \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Marketing Automations"}' \
"$N8N_HOST/api/v1/projects" | jq .| Method | Path | Description |
|---|---|---|
| POST | | Generate a security audit report |
| 请求方法 | 路径 | 描述 |
|---|---|---|
| POST | | 生成安全审计报告 |
curl -s -X POST \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{"additionalOptions": {"categories": ["credentials", "nodes", "instance"]}}' \
"$N8N_HOST/api/v1/audit" | jq .credentialsnodesdatabasefilesysteminstancecurl -s -X POST \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{"additionalOptions": {"categories": ["credentials", "nodes", "instance"]}}' \
"$N8N_HOST/api/v1/audit" | jq .credentialsnodesdatabasefilesysteminstance| Method | Path | Description |
|---|---|---|
| GET | | Get source control preferences |
| POST | | Set source control preferences |
| POST | | Pull changes from remote |
| POST | | Push changes to remote |
| GET | | Get modified resources status |
| POST | | Disconnect from source control |
| 请求方法 | 路径 | 描述 |
|---|---|---|
| GET | | 获取源代码控制偏好设置 |
| POST | | 设置源代码控制偏好设置 |
| POST | | 从远程仓库拉取变更 |
| POST | | 将变更推送到远程仓库 |
| GET | | 获取已修改资源的状态 |
| POST | | 断开与源代码控制的连接 |
curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/source-control/status" | jq .curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/source-control/status" | jq .curl -s -X POST \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{"force": false}' \
"$N8N_HOST/api/v1/source-control/pull" | jq .curl -s -X POST \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{"force": false}' \
"$N8N_HOST/api/v1/source-control/pull" | jq .{
"data": [...],
"nextCursor": "eyJsaW1pdCI6MTAsIm9mZnNldCI6MTB9"
}?cursor=<nextCursor>nextCursornull{
"data": [...],
"nextCursor": "eyJsaW1pdCI6MTAsIm9mZnNldCI6MTB9"
}?cursor=<nextCursor>nextCursornullcurl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/workflows?limit=250" | \
jq '.data[] | {id, name, active, updatedAt}'curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/workflows?limit=250" | \
jq '.data[] | {id, name, active, updatedAt}'curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/executions?workflowId=123&status=error&limit=50" | \
jq '.data[] | {id, status, startedAt, stoppedAt}'curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/executions?workflowId=123&status=error&limit=50" | \
jq '.data[] | {id, status, startedAt, stoppedAt}'curl -s -X POST \
-H "Content-Type: application/json" \
-d '{"key": "value"}' \
"$N8N_HOST/webhook/{webhook-path}"Note: Webhook URLs useor/webhook/path, not/webhook-test/./api/v1/
curl -s -X POST \
-H "Content-Type: application/json" \
-d '{"key": "value"}' \
"$N8N_HOST/webhook/{webhook-path}"注意: Webhook URL使用或/webhook/路径,而非/webhook-test/。/api/v1/
curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/workflows/{id}" | jq . > workflow-backup.jsoncurl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
"$N8N_HOST/api/v1/workflows/{id}" | jq . > workflow-backup.jsoncurl -s -X POST \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d @workflow-backup.json \
"$N8N_HOST/api/v1/workflows" | jq .curl -s -X POST \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d @workflow-backup.json \
"$N8N_HOST/api/v1/workflows" | jq .undefinedundefinedundefinedundefinedundefinedundefined
---
---| Code | Meaning |
|---|---|
| 200 | Success |
| 201 | Created |
| 400 | Bad request (invalid parameters) |
| 401 | Unauthorized (missing or invalid API key) |
| 403 | Forbidden (insufficient permissions) |
| 404 | Resource not found |
| 500 | Internal server error |
{
"code": 404,
"message": "The requested workflow was not found"
}| 状态码 | 含义 |
|---|---|
| 200 | 请求成功 |
| 201 | 创建成功 |
| 400 | 请求错误(参数无效) |
| 401 | 未授权(API密钥缺失或无效) |
| 403 | 禁止访问(权限不足) |
| 404 | 资源未找到 |
| 500 | 服务器内部错误 |
{
"code": 404,
"message": "The requested workflow was not found"
}N8N_HOSTN8N_API_KEYjqfetch()axiosnextCursor/webhook//api/v1/includeData=falseN8N_HOSTN8N_API_KEYjqfetch()axiosnextCursor/webhook//api/v1/includeData=falseconst N8N_HOST = process.env.N8N_HOST;
const N8N_API_KEY = process.env.N8N_API_KEY;
async function n8nApi(method, path, body = null) {
const url = `${N8N_HOST}/api/v1${path}`;
const options = {
method,
headers: {
'X-N8N-API-KEY': N8N_API_KEY,
'Content-Type': 'application/json',
},
};
if (body) options.body = JSON.stringify(body);
const res = await fetch(url, options);
if (!res.ok) throw new Error(`n8n API ${res.status}: ${await res.text()}`);
return res.json();
}
// List workflows
const workflows = await n8nApi('GET', '/workflows?limit=50');
console.log(workflows.data);
// Create a tag
const tag = await n8nApi('POST', '/tags', { name: 'automated' });
console.log(tag);const N8N_HOST = process.env.N8N_HOST;
const N8N_API_KEY = process.env.N8N_API_KEY;
async function n8nApi(method, path, body = null) {
const url = `${N8N_HOST}/api/v1${path}`;
const options = {
method,
headers: {
'X-N8N-API-KEY': N8N_API_KEY,
'Content-Type': 'application/json',
},
};
if (body) options.body = JSON.stringify(body);
const res = await fetch(url, options);
if (!res.ok) throw new Error(`n8n API ${res.status}: ${await res.text()}`);
return res.json();
}
// 列出工作流
const workflows = await n8nApi('GET', '/workflows?limit=50');
console.log(workflows.data);
// 创建标签
const tag = await n8nApi('POST', '/tags', { name: 'automated' });
console.log(tag);import os
import requests
N8N_HOST = os.environ["N8N_HOST"]
N8N_API_KEY = os.environ["N8N_API_KEY"]
HEADERS = {
"X-N8N-API-KEY": N8N_API_KEY,
"Content-Type": "application/json",
}
def n8n_api(method, path, json=None):
url = f"{N8N_HOST}/api/v1{path}"
resp = requests.request(method, url, headers=HEADERS, json=json)
resp.raise_for_status()
return resp.json()import os
import requests
N8N_HOST = os.environ["N8N_HOST"]
N8N_API_KEY = os.environ["N8N_API_KEY"]
HEADERS = {
"X-N8N-API-KEY": N8N_API_KEY,
"Content-Type": "application/json",
}
def n8n_api(method, path, json=None):
url = f"{N8N_HOST}/api/v1{path}"
resp = requests.request(method, url, headers=HEADERS, json=json)
resp.raise_for_status()
return resp.json()
---
---idnameactivetruestatusidnameactivetruestatusN8N_HOSTdataN8N_HOSTdata