Describe the problem/error/question
Creating data tables via the Public API ignores the projectId parameter and always creates the data table in Personal.
Data tables are purely project scoped, so there is no solution right now of creating data tables via API, breaking any automated production pipelines.
What is the error message (if any)?
No error messages, just a successful response that the data table is created in Personal projectId.
Please share your workflow
(Select the nodes on your canvas and use the keyboard shortcuts CMD+C/CTRL+C and CMD+V/CTRL+V to copy and paste the workflow.)
Share the output returned by the last node
{
"name": "Test Table",
"columns": [
{"name": "test_col", "type": "string"}
],
"projectId": "ss9BIoHbHFHdweXS"
}
Sample output when creating data table to projectId ss9BIoHbHFHdweXS, it defaults back to Personal projectId 9lWqhstD7pl2mnMP
{
“updatedAt”: “2026-04-28T04:35:17.339Z”,
“createdAt”: “2026-04-28T04:35:17.339Z”,
“id”: “muNe4g4O6vERcOug”,
“name”: “Test Table”,
“projectId”: “9lWqhstD7pl2mnMP”,
“columns”: [
{
“updatedAt”: “2026-04-28T04:35:17.341Z”,
“createdAt”: “2026-04-28T04:35:17.341Z”,
“id”: “iyMCDMB1FsHUlpZE”,
“dataTableId”: “muNe4g4O6vERcOug”,
“name”: “test_col”,
“type”: “string”,
“index”: 0
}
]
}
Information on your n8n setup
Issue persists in both Cloud and Self-Hosted Enterprise.
n8n version: 2.15.1
Database (default: SQLite): default for cloud, RDS for self-hosted
n8n EXECUTIONS_PROCESS setting (default: own, main): default for cloud, workers for self-hosted
Running n8n via (Docker, npm, n8n cloud, desktop app): n8n cloud, eks for self-hosted
Operating system: macOS
selbainu:
Describe the problem/error/question
Creating data tables via the Public API ignores the projectId parameter and always creates the data table in Personal.
Data tables are purely project scoped, so there is no solution right now of creating data tables via API, breaking any automated production pipelines.
API reference | n8n Docs
What is the error message (if any)?
No error messages, just a successful response that the data table is created in Personal projectId.
Please share your workflow
(Select the nodes on your canvas and use the keyboard shortcuts CMD+C/CTRL+C and CMD+V/CTRL+V to copy and paste the workflow.)
Share the output returned by the last node
{
"name": "Test Table",
"columns": [
{"name": "test_col", "type": "string"}
],
"projectId": "ss9BIoHbHFHdweXS"
}
Sample output when creating data table to projectId ss9BIoHbHFHdweXS, it defaults back to Personal projectId 9lWqhstD7pl2mnMP
{
“updatedAt”: “2026-04-28T04:35:17.339Z”,
“createdAt”: “2026-04-28T04:35:17.339Z”,
“id”: “muNe4g4O6vERcOug”,
“name”: “Test Table”,
“projectId”: “9lWqhstD7pl2mnMP”,
“columns”: [
{
“updatedAt”: “2026-04-28T04:35:17.341Z”,
“createdAt”: “2026-04-28T04:35:17.341Z”,
“id”: “iyMCDMB1FsHUlpZE”,
“dataTableId”: “muNe4g4O6vERcOug”,
“name”: “test_col”,
“type”: “string”,
“index”: 0
}
]
}
Information on your n8n setup
Issue persists in both Cloud and Self-Hosted Enterprise.
n8n version: 2.15.1
Database (default: SQLite): default for cloud, RDS for self-hosted
n8n EXECUTIONS_PROCESS setting (default: own, main): default for cloud, workers for self-hosted
Running n8n via (Docker, npm, n8n cloud, desktop app): n8n cloud, eks for self-hosted
Operating system: macOS
Hey @selbainu ,
welcome to the community,
based on what you shared, you’re probably not doing anything wrong.
If POST /api/v1/data-tables returns 200 OK but always sets projectId to your Personal project even when you pass a valid projectId, that’s a backend/API behavior. not a request-format issue.
The only thing is to double-check everythiing:
Make sure the projectId you’re sending is the actual project id (not a table/workflow id) and that the API key user is a member of that project (at least Viewer/Editor).
Try a “fresh minimal” request (just name + columns + projectId) like you already did, if it still lands in Personal, it confirms it’s not your payload.
let me know if it still failed or worked
curl https://my-personal-workflows.app.n8n.cloud/api/v1/data-tables \
--request POST \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'X-N8N-API-KEY: my-token-here' \
--data '{
"name": "customers",
"projectId": "ss9BIoHbHFHdweXS",
"columns": [
{
"name": "email",
"type": "string"
},
{
"name": "status",
"type": "string"
},
{
"name": "age",
"type": "number"
}
]
}'
Hi @Mayank1024 ! Confirming that I have the right projectId passed in the parameter. The API key has sufficient access and project is shared access to all members of the workspace just to be sure.
For the request, I’m testing it now using postman. Are we able set user in the request headers? I attached the above sample request in the Public API specs. I only saw X-N8N-API-KEY and currently have no way of setting the owner of the API key or user calling the request in the request headers.
Attaching here PRs that included creation of credentials and workflows inside projects via public API:
master ← ligo-418-credential-per-workflow
opened 09:45AM - 09 Apr 26 UTC
## Summary
Adds support for specifying a `projectId` when creating credential… s via the public REST API (`POST /api/v1/credentials`). Without this, credentials always land in the user's personal project, blocking automated workflows that need to create credentials in team projects.
**Changes:**
- Extends `POST /api/v1/credentials` request body to accept an optional `projectId` field
- Rafctoring: delegates to CredentialService to unify the behaviour with internal API
- Returns `404` when the specified project does not exist, and `403` when the user lacks access to it (previously both returned `400`)
https://www.loom.com/share/a835a8f3cf644c05b8fdf8b7d5ba957e
## Related Linear tickets, Github issues, and Community forum posts
Closes [LIGO-418](https://linear.app/n8n/issue/LIGO-418)
## Review / Merge checklist
- [x] I have seen this code, I have run this code, and I take responsibility for this code.
- [x] PR title and summary are descriptive. ([conventions](../blob/master/.github/pull_request_title_conventions.md))
- [ ] [Docs updated](https://github.com/n8n-io/n8n-docs) or follow-up ticket created.
- [x] Tests included.
- [ ] PR Labeled with `Backport to Beta`, `Backport to Stable`, or `Backport to v1` (if the PR is an urgent fix that needs to be backported)
master ← ligo-430-support-projectid-when-creating-workfow-via-the-public-api
opened 09:48AM - 01 Apr 26 UTC
## Summary
The public API `POST /workflows` endpoint now accepts an optional … `projectId` in the payload, allowing callers to create workflows directly in a specific project instead of always defaulting to the user's personal project.
**Changes:**
- Added optional `projectId` to request body of `POST /workflows`
- Delegates to WorkflowCreationService
- Fix order in WorkflowCreationService: project authorization now runs before credential validation so callers receive the correct HTTP status when the target project is missing or inaccessible
- Returns 404 if the project doesn't exist, 403 if the user lacks access
- Falls back to the user's personal project when `projectId` is omitted
https://www.loom.com/share/0a0a796d89b446f6a0e4577531e6b7b6
**How to test:**
```bash
# Create workflow in a specific project
curl -X POST 'http://localhost:5678/api/v1/workflows?projectId=<PROJECT_ID>' \
-H 'X-N8N-API-KEY: <API_KEY>' \
-H 'Content-Type: application/json' \
-d '{"name": "test", "nodes": [...], "connections": {}, "settings": {"executionOrder": "v1"}}'
# Without projectId — still creates in personal project
curl -X POST 'http://localhost:5678/api/v1/workflows' ...
```
## Related Linear tickets, Github issues, and Community forum posts
https://linear.app/n8n/issue/LIGO-430
## Review / Merge checklist
- [x] PR title and summary are descriptive. ([conventions](../blob/master/.github/pull_request_title_conventions.md))
- [ ] [Docs updated](https://github.com/n8n-io/n8n-docs) or follow-up ticket created.
- [x] Tests included.
- [ ] PR Labeled with `release/backport` (if the PR is an urgent fix that needs to be backported)
I have yet to find the PR for Data Table inside projects via Public API, even though the docs already have it.
c6k3
April 30, 2026, 8:32am
7
Hi, the PR to support projectId for data tables was released with 2.18.0. Please let me know if the issue persists after an upgrade.
Our docs generally talk about the latest stable release - this is of course not ideal, sorry for the trouble.