---
title: "Create a workflow"
method: POST
path: "/workflows"
tags: ["Workflows"]
---

# Create a workflow

`POST /workflows`

## Request

- Base URL: `https://be.graph8.com/api/v1`
- URL: `https://be.graph8.com/api/v1/workflows`
- Auth: HTTP bearer

Create a new workflow. Pins ``org_id`` and ``runtime_type='workflow'``
server-side - the body cannot override either.

The workflow's OWNER is the authenticated caller, never a body field: a
body ``created_by`` is dropped (see ``voice_owner_headers``). Record steps
and record triggers run with the owner's record access, so the key must hold
the object scopes they exercise (403 ``missing_scopes``). A node or trigger
config that carries the same key in snake_case and camelCase with values
that disagree is refused (422 ``conflicting_node_keys``): keep one spelling.

Translates the public ``config`` field to voice's internal
``skill_config`` before forwarding (see module docstring).

## Headers

- `Authorization` string, nullable
- `X-Target-Org-Id` string, nullable

## Request body

- object: Workflow create payload (voice ActionCreateRequest).

## Response `201`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/graph8/apis/graph8-developer-api.md) · [All operations](https://skmtc.dev/graph8/apis/graph8-developer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/graph8/apis/graph8-developer-api/revisions/2e7cfa0ca921?raw)
