---
title: "Validate a flow"
method: POST
path: "/flows/validate"
tags: ["Flows"]
---

# Validate a flow

`POST /flows/validate`

## Request

- Base URL: `https://api.mobilerun.ai`
- URL: `https://api.mobilerun.ai/flows/validate`
- Auth: HTTP bearer

## Request body

- object
  - `name` string, required
  - `description` string
  - `triggerId` string, uuid
  - `enabled` boolean
  - `deviceIds` string[]
  - `cooldownSeconds` integer, nullable
  - `cooldownScope` 'flow' | 'device'
  - `notifyWebhookId` string, uuid, nullable
  - `notifyOnSuccess` boolean
  - `notifyOnFailure` boolean
  - `healthMonitoringEnabled` boolean
  - `selfHealingEnabled` boolean
  - `selfHealingMaxAttempts` integer
  - `recordingEnabled` boolean
  - `recordingPolicy` object
    - `mode` 'off' | 'flow' | 'selected_steps', required
  - `delivery` object
    - `destination` 'mobilerun' | 'one_drive' | 'google_drive', required
    - `folder` string: not allowed when destination is mobilerun
    - `recording` object
      - `filename` string, required
    - `screenshots` object
  - `actions` union[], required
    - union
      - FlowActionInput
        - `actionId` string, uuid, required
        - `position` integer, required
        - `continueOnError` boolean
        - `nameOverride` string
        - `key` string: Stable identifier used by template resolution v2+ to address this step as {{key.field}}. Omitted keys are derived from the step name whenever a flow is created. For template resolution v3, replacing an existing flow's full action tree requires every step to carry an explicit key — a missing key is rejected there, not derived, so a name change can never silently move a step's key.
        - `overrides` FlowActionOverrides, nullable
          - `params` object
        - `recordingEnabled` boolean
        - `children` FlowChildActionInput[]
          - `actionId` string, uuid, required
          - `position` integer, required
          - `continueOnError` boolean
          - `nameOverride` string
          - `key` string: Stable identifier used by template resolution v2+ to address this step as {{key.field}}. Omitted keys are derived from the step name whenever a flow is created. For template resolution v3, replacing an existing flow's full action tree requires every step to carry an explicit key — a missing key is rejected there, not derived, so a name change can never silently move a step's key.
          - `overrides` FlowActionOverrides, nullable
            - `params` object
          - `recordingEnabled` boolean
      - FlowDraftActionInput
        - `draft` object, required
          - `name` string, required
          - `service` string, required
          - `method` string, required
          - `params` object
        - `position` integer, required
        - `continueOnError` boolean
        - `nameOverride` string
        - `key` string: Stable identifier used by template resolution v2+ to address this step as {{key.field}}. Omitted keys are derived from the step name whenever a flow is created. For template resolution v3, replacing an existing flow's full action tree requires every step to carry an explicit key — a missing key is rejected there, not derived, so a name change can never silently move a step's key.
        - `overrides` FlowActionOverrides, nullable
          - `params` object
        - `recordingEnabled` boolean

## Response `200`

Flow validation result

- object
  - `data` FlowValidateResponse, required
    - `valid` boolean, required
    - `errors` object[], required
      - `code` string, required
      - `field` string, required
      - `message` string, required
      - `reference` string
      - `knownSteps` string[]
    - `warnings` object[], required
      - `code` string, required
      - `message` string, required
      - `destination` string
      - `connectKey` string

## Other responses

- `401`: Unauthorized
- `422`: Validation Error

## Changes

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

[Operation history](https://skmtc.dev/droidrun/apis/droidrun-cloud/changes/flows/validate/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)
