---
title: "Create a new workflow for a user (admin only)"
method: POST
path: "/api/workflow/users/{user_id}/workflows"
tags: ["Workflows"]
---

# Create a new workflow for a user (admin only)

`POST /api/workflow/users/{user_id}/workflows`

## Request

- Base URL: `https://app.herondata.io`
- URL: `https://app.herondata.io/api/workflow/users/{user_id}/workflows`
- Auth: API key in header `x-api-key`

## Path parameters

- `user_id` integer, required

## Request body

- WorkflowCreateSchema
  - `display_config` object, nullable
  - `name` string, required
  - `set_as_default` boolean
  - `status` 'draft' | 'published'
  - `workflow_definition` JSONWorkflowDefinition, required
    - `debounce_seconds` integer
    - `default_on_failure` string, nullable
    - `edges` JSONWorkflowEdge[]
      - `from_handle_id` string
      - `from_node_id` string, required
      - `to_handle_id` string
      - `to_node_id` string, required
    - `error_handling` JSONWorkflowErrorHandling
      - `failure_strategy` 'fail_fast' | 'best_effort' | 'critical'
      - `join_rule` 'all_success' | 'any_success'
      - `max_attempts_per_node` integer
    - `nodes` JSONWorkflowNode[]
      - `id` string, required
      - `is_critical` boolean
      - `name` string, required
      - `parameters` object
      - `settings` JSONWorkflowNodeSettings
        - `cache` NodeCacheSettings
          - `enabled` boolean, nullable
          - `scope` string, nullable
          - `ttl_seconds` integer, nullable
        - `is_disabled` boolean
        - `max_executions_per_end_user` integer
        - `on_disabled_output_handle_id` string
      - `type` string, required
      - `version` integer
    - `workflow_parameters` object

## Response `201`

Workflow created successfully

- WorkflowSchema
  - `alerts_muted_until` string, date-time, nullable
  - `created` string, date-time
  - `dashboard_trigger_enabled` boolean
  - `dashboard_trigger_label` string, nullable
  - `heron_id` string
  - `is_default` boolean
  - `name` string
  - `owners` FlowmingoWorkflowOwners
    - `group_slack_name` string[]
    - `user_email` string[]
  - `silent_run_allowed` boolean
  - `user_id` string
  - `user_username` string, nullable
  - `versions` WorkflowVersionSummary[]
    - `approved_at` string, date-time, nullable
    - `approved_by` string, nullable
    - `approved_comment` string, nullable
    - `author_email` string, nullable
    - `change_description` string, nullable
    - `created` string, date-time
    - `last_edited_at` string, date-time, nullable
    - `published_at` string, date-time, nullable
    - `published_by` string, nullable
    - `status` 'draft' | 'in_review' | 'approved' | 'published'
    - `submitted_by` string, nullable
    - `submitted_for_review_at` string, date-time, nullable
    - `version` integer

## Other responses

- `400`: Invalid workflow data
- `404`: User not found
- `409`: Workflow with this name already exists

## Changes

- **2026-11-03** `bd8008e49534`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/herondata/apis/heron-data-api/changes/api/workflow/users/:user_id/workflows/post.md)

---

[API](https://skmtc.dev/herondata/apis/heron-data-api.md) - [All operations](https://skmtc.dev/herondata/apis/heron-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/herondata/apis/heron-data-api/revisions/1ec936e17fef?raw)
