Create a folder
POST/
Makes a folder for workflows, at the top or inside another folder.
Needs an API token with the Write permission for workflows (workflow:write).
Parameters
Body
nameRequired · stringUp to 255 characters, trimmed. It must differ from the other folders in the same place, ignoring case.
parentIdOptional · UUIDThe folder to put it in. Leave it out, or send
null, for the top level.
Request
GORUNNER="https://api.gorunner.io"
GORUNNER_TOKEN="grt_…" # needs Write for workflows
curl -X POST "$GORUNNER/api/folders" \
-H "Authorization: Bearer $GORUNNER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Invoices",
"parentId": "7a2c9e41-5b3d-4f08-a6e1-2d9c4b7f0e13"
}'const GORUNNER = "https://api.gorunner.io";
const TOKEN = process.env.GORUNNER_TOKEN;
const res = await fetch(`${GORUNNER}/api/folders`, {
method: "POST",
headers: {
Authorization: `Bearer ${TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "Invoices",
parentId: "7a2c9e41-5b3d-4f08-a6e1-2d9c4b7f0e13",
}),
});
const { data } = await res.json();import os, requests
GORUNNER = "https://api.gorunner.io"
TOKEN = os.environ["GORUNNER_TOKEN"]
res = requests.post(
f"{GORUNNER}/api/folders",
headers={"Authorization": f"Bearer {TOKEN}"},
json={
"name": "Invoices",
"parentId": "7a2c9e41-5b3d-4f08-a6e1-2d9c4b7f0e13",
},
)
data = res.json()["data"]Response · 201 Created
{
"data": {
"id": "6e9a1c3f-8b2d-4a57-9e0c-3f7b5d1a8c42",
"name": "Invoices",
"parentId": "7a2c9e41-5b3d-4f08-a6e1-2d9c4b7f0e13",
"workspaceId": "c41a7e02-9b3d-4f6a-8e15-7d2c0b9a4f68",
"orgId": "e9d2b6f1-3a7c-4d05-b8e4-1c6f2a9d7b30",
"workflowCount": 0,
"createdAt": "2026-10-25T09:00:00Z",
"updatedAt": "2026-10-25T09:00:00Z"
}
}Responses
- 201Created
The new folder, with
workflowCount0. The body isn’t JSON, the name is blank or over 255 characters, or
parentIdisn’t a folder in this workspace.- 403
FORBIDDENThe token lacks the Write permission for workflows.
- 409
NAME_TAKENA folder with this name is already in that place. Names are compared without case.
The folder wasn’t made. Try again.
Any call can also answer: 401 UNAUTHORIZED · 401 TOKEN_ENDED · 403 TOKEN_SURFACE_OFF · 403 FEATURE_OFF · 403 EMBED_NOT_ALLOWED · 403 EMBED_NOT_AVAILABLE · 403 ACCOUNT_SUSPENDED · 413 PAYLOAD_TOO_LARGE · 415 INVALID_CONTENT_TYPE · 429 RATE_LIMITED · 503 BUSY · 503 PAUSED · 503 SERVICE_UNAVAILABLE. See Errors.
Response · 409 Conflict
{
"error": {
"code": "NAME_TAKEN",
"message": "A folder named “Invoices” is already here."
}
}Every field
Body
nameRequired · stringRequired; trimmed. Blank after trimming, or longer than 255 characters, is a 400. A name a folder in the same place already has, ignoring case, is a 409
NAME_TAKEN.parentIdOptional · UUIDOptional parent. Omit or send null for a root folder. Must exist in the same workspace — an unknown or cross-tenant id is a 400 "Parent folder not found."
Response · 201 Created
dataobjectA node in the workflow-organization tree. Folders organize workflows only — they have no relationship to connections or templates.
idUUIDnamestringTrimmed of surrounding whitespace. At most 255 characters. Create and rename refuse a name a sibling already has, ignoring case (409
NAME_TAKEN); deleting a folder moves its children up and renames a child whose name is taken there (<name> (2)), so siblings never share a name.parentIdUUIDParent folder. Absent/null means a root folder. The list is flat — build the tree from this field.
workspaceIdUUIDOwning workspace. Populated on create; the all-zero UUID in list responses (not selected by the list query).
orgIdUUIDOwning organization. Same caveat as
workspaceId.workflowCountintegerWorkflows filed DIRECTLY in this folder. Does not include workflows in descendant folders.
liveCountintegerlive workflows filed directly in this folder. 0 on a create’s answer.
failingCountintegerfailing workflows filed directly in this folder (live, and the latest finished production run failed). 0 on a create’s answer.
totalWorkflowCountintegerworkflows in this folder and every folder under it, at any depth. 0 on a create’s answer.
totalLiveCountintegerlive workflows in this folder and every folder under it. 0 on a create’s answer.
totalFailingCountintegerfailing workflows in this folder and every folder under it. 0 on a create’s answer.
createdAttimeupdatedAttime
Is it safe to send again?
No. It takes no Idempotency-Key. If the first call made the folder, a retry answers 409 NAME_TAKEN; List folders shows it.