Skip to main content

Deploying Workflows

Beyond internal automation, any workflow can be exposed as a public API endpoint, a chat widget, or run in bulk over a dataset for evaluation.

Public API keys

Generate a workflow-scoped API key to allow external callers to run a specific workflow without a full user JWT:

EndpointDescription
GET /api/v1/workflows/{id}/api-keysList API keys for a workflow.
POST /api/v1/workflows/{id}/api-keysCreate a new key (a random 32-byte hex string).
DELETE /api/v1/workflows/{id}/api-keys/{keyId}Revoke a key.

Call the workflow:

curl -X POST https://your-instance/run/$WORKFLOW_ID \
-H "Authorization: Bearer $WORKFLOW_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"input_field": "value"}'

POST /run/{workflowId} is public but requires a valid Bearer key scoped to that workflow — distinct from the /webhooks/{workflowId} trigger route, and from the dashboard's authenticated /api/v1/workflows/{id}/trigger.

Chat deployments

Turn a workflow into a conversational chat widget — useful for support bots, internal Q&A, or any agent-backed assistant:

POST /api/v1/workflows/{id}/chat
{
"title": "Support Bot",
"greeting": "Hello! How can I help you today?",
"input_field": "message",
"output_field": "text",
"enabled": true
}
FieldDefaultDescription
title"<workflow name> Chat"Widget title.
greeting"Hello! How can I help you today?"First message shown to the user.
input_field"message"Trigger payload field the widget writes the user's message into.
output_field"text"Workflow output field the widget displays as the assistant's reply.

This generates a stable slug (chat-<first 8 chars of workflow id>) for embedding the widget. Pair this with an agent node using memory_mode: "session" (keyed by a per-visitor session ID) for a stateful conversation — see AI Agents & Tools.

GET / DELETE /api/v1/workflows/{id}/chat retrieve or remove the deployment.

Batch evaluation

Run a workflow once per row of a dataset — useful for evals, bulk data processing, or testing prompt changes across many examples:

POST /api/v1/workflows/{id}/batch
{
"name": "Eval run 2026-06-11",
"items": [
{ "input": "first test case" },
{ "input": "second test case" }
]
}

Each item in items becomes one execution, with the item's fields available as trigger data. Track progress and results:

EndpointDescription
GET /api/v1/workflows/{id}/batchesList batch runs for a workflow.
GET /api/v1/batches/{batchId}Status and per-item results for a batch run.

Combine with the Test Runner node (type: "test-runner") to assert on each item's output (e.g. not_empty, equals, regex, json_valid, status_ok) — failed assertions fail that item's execution, giving you a pass/fail rate across the batch.

For a reusable, versioned setup — a saved dataset, a library of graders including an LLM judge, and pass-rate tracking across runs — see Evaluations & Testing instead of a one-off batch.

Prompt Playground

POST /api/v1/playground/run runs a single LLM prompt (provider, model, system, prompt, temperature, max_tokens, api_key/base_url) without creating a workflow — for quickly iterating on prompts before wiring them into an llm or agent node.

Next