---
title: "Update a workflow's graph"
method: PUT
path: "/workflows/{action_id}"
tags: ["Workflows"]
---

# Update a workflow's graph

`PUT /workflows/{action_id}`

## Request

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

Update a workflow. The voice update endpoint takes ``org_id`` as a
query param and the partial body in JSON, so we forward both. A graph with
record steps or a record trigger needs the object scopes they exercise
(403 ``missing_scopes``), like create, and a node or trigger config whose
snake_case and camelCase keys disagree is refused (422
``conflicting_node_keys``). On a workflow with record steps or a record
trigger, only its owner or a graph8 admin may change what it runs (403
``owner_or_admin_required``); its name and description stay editable.

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

## Path parameters

- `action_id` string, required: Workflow action_id.

## Headers

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

## Request body

- object: Partial update payload (voice ActionUpdateRequest).

## Response `200`

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/89fc11143b70?raw)
