POST /v1/runs
Execute an inline workflow definition (ephemeral run). The definition must use "manual" trigger type. No workflow is saved — the definition is executed once and the run is recorded with workflowId="". Requires WorkflowCreate permission.
POST
/v1/runs
Execute an inline workflow definition (ephemeral run). The definition must use "manual" trigger type. No workflow is saved — the definition is executed once and the run is recorded with workflowId="". Requires WorkflowCreate permission.
Request Body required
Inline workflow definition and optional payload/props
application/jsonOne 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:
payload
object
Payload is merged into the trigger result (root node output),
accessible via {{root.result.key}} expressions. A "triggeredAt"
timestamp is always added automatically.
propValues
object
PropValues are template parameter values injected into the run
context, accessible via {{$props.key}} expressions.
runId
string
RunID is an optional client-generated run ID. Must start with
"run_" prefix. If omitted, a run ID is generated server-side.
Use this to subscribe to SSE stream before triggering the run.
Responses
200
Run created and enqueued for execution
application/jsoncode
integer
data
object
runId
string
message
string
requestId
string
400
Invalid definition (400228), non-manual trigger (400229), invalid run ID (400078), or duplicate run ID (400079)
402
Insufficient CU balance
403
Missing org context or insufficient permissions
curl -X POST 'https://api.example.com/v1/runs' \ -H 'Authorization: Bearer YOUR_API_TOKEN' \ -H 'Content-Type: application/json' \ -d '{}'
const response = await fetch('https://api.example.com/v1/runs', { 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/runs', 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/runs", 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": { "runId": "run_c9i6j8k2l0m3" }, "message": "success", "requestId": "abc-123"}
API Playground
Try this endpoint
POST
/v1/runs
