POST /v1/workflows/validate
Validate a workflow definition without saving

Request Body required

Workflow definition and name to validate

application/json
One of:
Option 1
Option 2
definition object REQUIRED
Definition is the full workflow graph to execute. Must contain a "root" node with type "manual". All action nodes referenced in children arrays must be present.
blockExpansions object
Set on run snapshots only (not workflow DB)
inputSchema object[]
Array of:
description string
key string
required boolean
type string
"string", "number", "boolean", "object", "array"
nodes object REQUIRED
sensitivePropKeys string[]
Legacy: kept for old runs; no longer populated for new workflows
Array of:
name string

Responses

200 OK
application/json
code integer
data object
errors object[]
Array of:
field string
Optional field name
message string
Human readable error message
nodeId string
Optional node ID
nodeName string
Optional node display name
type string
name, nodes, root, connectivity, pattern, variable
valid boolean
message string
requestId string
400 Bad Request
curl -X POST 'https://api.example.com/v1/workflows/validate' \  -H 'Authorization: Bearer YOUR_API_TOKEN' \  -H 'Content-Type: application/json' \  -d '{}'
const response = await fetch('https://api.example.com/v1/workflows/validate', {  method: 'POST',  headers: {      "Authorization": "Bearer YOUR_API_TOKEN",      "Content-Type": "application/json"  },  body: JSON.stringify({})});const data = await response.json();console.log(data);
import requestsheaders = {    'Authorization': 'Bearer YOUR_API_TOKEN'}response = requests.post('https://api.example.com/v1/workflows/validate', headers=headers, json={})print(response.json())
package mainimport (	"fmt"	"io"	"net/http"	"strings")func main() {	body := strings.NewReader(`{}`)	req, _ := http.NewRequest("POST", "https://api.example.com/v1/workflows/validate", body)	req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")	req.Header.Set("Content-Type", "application/json")	resp, _ := http.DefaultClient.Do(req)	defer resp.Body.Close()	result, _ := io.ReadAll(resp.Body)	fmt.Println(string(result))}
200 Response
{  "code": 200,  "data": {    "errors": [      {        "field": "<string>",        "message": "<string>",        "nodeId": "<string>",        "nodeName": "<string>",        "type": "<string>"      }    ],    "valid": true  },  "message": "success",  "requestId": "abc-123"}