---
title: "Unblock a flow"
method: POST
path: "/flows/{flowId}/unblock"
tags: ["Flows"]
---

# Unblock a flow

`POST /flows/{flowId}/unblock`

Clear a flow's blocked status after fixing the underlying issue. Idempotent — safe to call on already-healthy flows.

## Path parameters

- `flowId` string, uuid, required

## Response `200`

Flow unblocked (or already healthy)

- object
  - `data` Flow, required
    - `id` string, uuid, required
    - `userId` string, uuid, required — Deprecated: use ownerId (tenancy) / createdBy (actor).
    - `ownerId` string, uuid, required
    - `createdBy` string, uuid, nullable, required
    - `name` string, required
    - `description` string, nullable, required
    - `triggerId` string, uuid, required
    - `enabled` boolean, required
    - `deviceIds` string[], required
    - `cooldownSeconds` integer, nullable, required
    - `cooldownScope` 'flow' | 'device', required
    - `notifyWebhookId` string, uuid, nullable, required
    - `notifyOnSuccess` boolean, required
    - `notifyOnFailure` boolean, required
    - `lastTriggeredAt` string, nullable, required
    - `status` 'healthy' | 'failing' | 'blocked', required
    - `templateResolutionVersion` integer, required — Template-resolver semantics this flow runs under (MVA-23). 1 = legacy (missing/forbidden/null all resolve to ''). 2 = typed (missing/forbidden throw, a whole-token null stays JSON null). Existing flows stay 1; new flows default to 2.
    - `consecutiveFailures` integer, required
    - `lastFailureCode` 'device_not_found' | 'permission_denied' | 'client_error' | 'transient' | 'logic' | 'invalid_config', nullable, required
    - `lastFailureAt` string, nullable, required
    - `blockedAt` string, nullable, required
    - `createdAt` string, nullable, required
    - `updatedAt` string, nullable, required

## Other responses

- `400` — Flow is still broken — preflight failed
- `404` — Not Found

## Changes

- **2026-07-24** `618bd1cc1aed` — 1 info
  - added the required property `data/templateResolutionVersion` to the response with the `200` status
- **2026-07-07** `d5d1e5ee8188` — 3 info
  - response property `data/userId` deprecated
  - added the required property `data/createdBy` to the response with the `200` status
  - added the required property `data/ownerId` to the response with the `200` status
- **2026-06-29** `8f06726ac240` — 1 breaking, 7 info
  - the `code` response's property type/format changed from `string`/`` to ``/`` for status `400`
  - added `#/components/schemas/FlowFailureCode, subschema #2` to the `code` response property `allOf` list for the response status `400`
  - removed the `client_error` enum value from the `code` response property for the response status `400`
  - removed the `device_not_found` enum value from the `code` response property for the response status `400`
  - …4 more
- **2026-06-28** `fd8fb6b29e38` — 1 info
  - endpoint added
- **2026-06-27** `99b4ade46263` — 1 breaking
  - api path removed without deprecation

[Full history](https://skmtc.dev/droidrun/apis/droidrun-cloud/changes/flows/:flowId/unblock/post.md)

---

[API](https://skmtc.dev/droidrun/apis/droidrun-cloud.md) · [All operations](https://skmtc.dev/droidrun/apis/droidrun-cloud/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/droidrun/droidrun-cloud/revisions/b6fd8aed4bf4/schema)
