---
title: "[Beta] Validate a workflow definition"
method: POST
path: "/workflows/validate"
tags: ["Workflows (Beta)"]
---

# [Beta] Validate a workflow definition

`POST /workflows/validate`

Validate workflow blocks without creating a workflow. Runs both the structural check and the deep semantic validation the dashboard editor runs on Save (action inputs against each action's input schema, trigger configuration against the trigger's configuration_def). Returns validation issues and the list of action types used. Use this before creating or updating a workflow to catch errors early.

## Request body

- ValidateWorkflowPublicInput
  - `trigger_type` 'manual-trigger' | 'ai-trigger' | 'cron-trigger' | 'form-trigger' | 'webhook' | 'contact-created' | 'contact-updated' | 'phone-call-started' | 'phone-call-finished' | 'ticket-created' | 'ticket-reassigned' | 'ticket-resolved' | 'ticket-handoff' | 'pre-ticket-handoff' | 'ticket-tag-added' | 'ticket-inactive' | 'agent-inactive' | 'sequence-completed' | 'csat-score-submit' | 'prohibited-topic-detected' | 'sla-first-reply-breached' | 'sla-next-reply-breached' | 'sla-resolution-breached' | 'voice-call-transferred' | 'pre-voice-call-transfer' | 'pre-phone-call-finished' | 'manual-ticket-trigger' | 'contact-message-received' | 'first-contact-message-received' | 'macro-called' | 'ai-response-completed' | 'agent-availability-changed' | 'agent-avail-in-team-changed' | 'ai-response-requested' | 'ticket-reopened', required — Trigger type to validate against
  - `trigger_configuration` unknown
  - `workflow_blocks` unknown[], required — Workflow blocks to validate
    - unknown

## Response `200`

Default Response

- ValidateWorkflowPublicOutput
  - `valid` boolean, required — Whether the workflow definition is valid (no error-severity issues)
  - `issues` object[], required — List of validation issues found
    - `step_id` string, nullable, required — The step ID where the issue was found, if applicable
    - `message` string, required — Description of the validation issue
    - `severity` 'error' | 'warning', required — "error" blocks create/update/activate; "warning" is advisory only
  - `action_types_used` string[], required — List of action types referenced in the workflow

## Other responses

- `500` — Internal Server Error

---

[API](https://skmtc.net/open/apis/opencx-api.md) · [All operations](https://skmtc.net/open/apis/opencx-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/open/opencx-api/revisions/57b06b52302d/schema)
