---
title: "Update a workflow"
method: PUT
path: "/workflows/{workflow_id}"
tags: ["workflows"]
---

# Update a workflow

`PUT /workflows/{workflow_id}`

Applies a partial update (name, platform, status, ocr_engine). Org-scoped — workflows in other orgs return 404.

## Path parameters

- `workflow_id` string, uuid, required — workflow identifier

## Request body

- WorkflowUpdateRequest — Request body for updating mutable workflow fields.
  - `$schema` string, uri — A URL to the JSON Schema for this object.
  - `capture` boolean — Capture media this workflow's runs produce on the phone into the org's file library (default true). false disables capture for every run dispatched through the scheduler.
  - `name` string — Updated workflow name.
  - `ocr_engine` 'free' | 'premium' — Updated OCR backend selection.
  - `platform` 'ios' | 'android' | 'both' — Updated target platform.
  - `recording` boolean — Record this workflow's runs (default true). false suppresses video recording and the rolling thumbnail entirely, for every run dispatched through the scheduler.
  - `status` 'ready' | 'training' | 'running' — Updated lifecycle status.
  - `telemetry` boolean — Persist telemetry spans for this workflow's runs (default true). false skips the durable trace store; the live telemetry stream still works while a run is active.

## Response `200`

OK

- WorkflowResponse — Full workflow record with embedded stats.
  - `$schema` string, uri — A URL to the JSON Schema for this object.
  - `stats` WorkflowStats, required — WorkflowStats summarizes run statistics for a workflow.
    - `success_rate` number, double, required — Fraction of runs that completed successfully, from 0.0 to 1.0 (multiply by 100 for a percentage).
    - `total_runs` integer, required — Total number of runs for this workflow.
  - `workflow` WorkflowSummary, required — A workflow: a saved automation that runs against a phone.
    - `capture` boolean, required — Whether this workflow's runs capture media into the org's file library (default true).
    - `created_at` string, date-time, required — When the workflow was created.
    - `id` string, uuid, required — Workflow identifier.
    - `last_run_at` string, date-time, nullable, required — When the workflow last ran; absent if never run.
    - `name` string, required — Workflow name.
    - `ocr_engine` 'free' | 'premium', required — OCR engine the workflow runs with.
    - `organization_id` string, uuid, nullable, required — Organization the workflow belongs to.
    - `platform` 'android' | 'ios' | 'both', required — Target platform.
    - `recording` boolean, required — Whether this workflow's runs record their screen (default true).
    - `status` 'ready' | 'training' | 'running', required — Workflow lifecycle status.
    - `telemetry` boolean, required — Whether this workflow's runs persist telemetry spans (default true).
    - `updated_at` string, date-time, required — When the workflow was last updated.
    - `user_id` string, uuid, required — User who created the workflow.

## Other responses

- `default` — Error

---

[API](https://skmtc.net/axilioai/apis/axilio-api.md) · [All operations](https://skmtc.net/axilioai/apis/axilio-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/axilioai/axilio-api/versions/108ab4b41051/schema)
