---
title: "[Beta] Update a workflow (creates a new version)"
method: PATCH
path: "/workflows/{workflow_id}"
tags: ["Workflows (Beta)"]
---

# [Beta] Update a workflow (creates a new version)

`PATCH /workflows/{workflow_id}`

Update a workflow by creating a new version. The new version is created as an inactive draft. Only the provided fields are changed; omitted fields carry over from the current version. Use the activate endpoint to make the new version live. When blocks or trigger fields are provided, the resulting definition must pass deep validation — failures return a 400 with structured issues.

## Path parameters

- `workflow_id` string, required

## Request body

- UpdateWorkflowPublicInput
  - `name` string — New workflow name
  - `description` string, nullable — New workflow description
  - `trigger_type` 'manual-trigger' | 'ai-trigger' | 'cron-trigger' | 'form-trigger' | 'webhook' | 'contact-created' | 'contact-updated' | 'phone-call-started' | 'phone-call-finished' | 'ticket-created' | 'ticket-reassigned' | 'ticket-resolved' | 'ticket-handoff' | 'pre-ticket-handoff' | 'ticket-tag-added' | 'ticket-inactive' | 'agent-inactive' | 'sequence-completed' | 'csat-score-submit' | 'prohibited-topic-detected' | 'sla-first-reply-breached' | 'sla-next-reply-breached' | 'sla-resolution-breached' | 'voice-call-transferred' | 'pre-voice-call-transfer' | 'pre-phone-call-finished' | 'manual-ticket-trigger' | 'contact-message-received' | 'first-contact-message-received' | 'macro-called' | 'ai-response-completed' | 'agent-availability-changed' | 'agent-avail-in-team-changed' | 'ai-response-requested' | 'ticket-reopened' — New trigger type
  - `trigger_configuration` unknown
  - `workflow_blocks` unknown[] — New workflow step/block definitions (replaces existing blocks)
    - unknown
  - `workflow_editor_state` unknown

## Response `200`

Default Response

- WorkflowDetailPublicResponseDto
  - `id` number, required — Version serial ID
  - `workflow_id` string, required — Workflow UUID (groups all versions of the same workflow)
  - `name` string, required — Workflow name
  - `description` string, nullable, required — Workflow description
  - `is_active` boolean, nullable, required — Whether this version is currently active
  - `trigger_type` string, required — Trigger type: "manual-trigger", "ai-trigger", "cron-trigger", "webhook", "form-trigger", or event-based triggers
  - `version_number` number, required — Version number (increments with each edit)
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `workflow_blocks` unknown[], nullable, required — Workflow step/block definitions
    - unknown
  - `trigger_configuration` unknown, required
  - `webhook_url` string, nullable, required — Trigger URL for webhook-type workflows. Call this URL (POST) to trigger the workflow. Null for non-webhook workflows.

## Other responses

- `400` — Default Response
- `500` — Internal Server Error

---

[API](https://skmtc.net/open/apis/opencx-api.md) · [All operations](https://skmtc.net/open/apis/opencx-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/open/opencx-api/revisions/57b06b52302d/schema)
