---
title: "Activate a verified flow"
method: POST
path: "/flows/{flowId}/activate"
tags: ["Flows"]
---

# Activate a verified flow

`POST /flows/{flowId}/activate`

## Request

- Base URL: `https://api.mobilerun.ai`
- URL: `https://api.mobilerun.ai/flows/{flowId}/activate`
- Auth: HTTP bearer

Activate a disabled flow only when the supplied verification execution succeeded and the flow graph has not changed since verification. Repeating activation is idempotent for an already-enabled flow.

## Path parameters

- `flowId` string, uuid, required

## Request body

- ActivateFlowBody
  - `verificationExecutionId` string, uuid, required

## Response `200`

Flow activated

- object
  - `data` Flow, required
    - `id` string, uuid, required
    - `userId` string, uuid, required: Deprecated: use ownerId (tenancy) / createdBy (actor).
    - `ownerId` string, uuid, required
    - `agentId` string, uuid, nullable, required
    - `createdBy` string, uuid, nullable, required
    - `name` string, required
    - `description` string, nullable, required
    - `triggerId` string, uuid, required
    - `enabled` boolean, required: Compatibility projection of lifecycleStatus; true only when lifecycleStatus is enabled.
    - `lifecycleStatus` 'enabled' | 'disabled' | 'archived', required
    - `archivedAt` string, date-time, nullable, 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, date-time, nullable, required
    - `status` 'healthy' | 'failing' | 'blocked', required
    - `templateResolutionVersion` integer, required: Template-resolver semantics this flow runs under. 1 = legacy (missing/forbidden/null all resolve to ''). 2 = typed (missing/forbidden throw, a whole-token null stays JSON null). 3 = typed, key-based (steps are addressed as {{steps.<key>...}} instead of by name; trigger.payload is not available). Existing flows stay 1; new flows default to the current version.
    - `consecutiveFailures` integer, required
    - `lastFailureCode` 'device_not_found' | 'permission_denied' | 'client_error' | 'transient' | 'logic' | 'invalid_config' | 'null', nullable, required
    - `lastFailureAt` string, date-time, nullable, required
    - `blockedAt` string, date-time, nullable, required
    - `healthMonitoringEnabled` boolean, required
    - `selfHealingEnabled` boolean, required
    - `selfHealingMaxAttempts` integer, required
    - `recordingEnabled` boolean, required: Deprecated: use recordingPolicy.mode ("flow" = recordingEnabled=true, "off" = recordingEnabled=false).
    - `recordingPolicy` RecordingPolicy, required
      - `mode` 'off' | 'flow' | 'selected_steps', required
    - `delivery` object, nullable, required
      - `destination` 'mobilerun' | 'one_drive' | 'google_drive', required
      - `folder` string: not allowed when destination is mobilerun
      - `recording` object
        - `filename` string, required
      - `screenshots` object
    - `createdAt` string, date-time, nullable, required
    - `updatedAt` string, date-time, nullable, required

## Other responses

- `404`: Flow not found
- `409`: Verification is missing, not successful, or stale

## Changes

- **2026-10-16** `4ad548c528a8`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/droidrun/apis/droidrun-cloud/changes/flows/:flowId/activate/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.dev/droidrun/apis/droidrun-cloud/revisions/1cc95586c933?raw)
