These docs cover the S6S workflow engine — the developer playground layer underneath the product. For the main AI Visibility product (brand monitoring, the unified Report, fix actions), start at /docs/ai-visibility.
Workflow Quick Start
Deploy and run your first workflow in three minutes. This is the developer-playground path — if you're here for brand monitoring and the AI Visibility Report, start at /docs/ai-visibility instead.
What this is
The S6S workflow engine is an open-core workflow automation engine designed for AI agents and humans. You define persistent, multi-step workflows as JSON recipes, and S6S handles validation, compilation, credential binding, scheduling, and execution. Deploy via the REST API, MCP server, TypeScript SDK, or the chat UI.
The same engine powers AI Visibility fixes, discovery, and scheduled monitoring underneath the product surface — but you don't need to know any of that to use AI Visibility. It only matters when you want to build agents on top of S6S.
Choose your path
AI Agent (MCP)
Connect your AI agent via MCP server.
Learn moreAPI / SDK
Deploy workflows programmatically. Continue reading below.
You are hereChat UI
Build workflows with Ali, the AI copilot.
Open chatStep 1: Get an API Key
- Sign up at s6s.ai if you haven't already.
- Navigate to the API Keys page in the sidebar.
- Click Create API Key and give it a name.
- Copy the key immediately — it starts with
s6s_and is only shown once.
Keep your API key secure. Store it in an environment variable rather than in code. See API Keys for best practices.
Step 2: Deploy Your First Workflow
Deploy a workflow by sending a Recipe to the deploy endpoint. A Recipe is a JSON object that describes your workflow's trigger, steps, and execution flow.
Here is a minimal example — a manual-trigger workflow with a single transform step:
curl -X POST https://s6s.ai/api/v1/workflows/deploy \
-H "Authorization: Bearer s6s_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Hello World",
"trigger": { "type": "manual" },
"steps": [
{
"ref": "greet",
"action": "transform",
"config": {
"template": {
"message": "Hello from S6S!",
"timestamp": "{{run.startedAt}}"
}
}
}
],
"flow": ["greet"]
}'Recipe fields explained
| Field | Purpose |
|---|---|
| name | A human-readable name for the workflow. |
| trigger | How the workflow starts. manual runs immediately on deploy. |
| steps | An array of actions. Each step has a ref (unique name), action (what to do), and config (action-specific settings). |
| flow | Execution order as an array of step ref names. Steps listed in a sub-array run in parallel. |
Success response
{
"workflowId": "wf_abc123",
"versionId": "ver_def456",
"runId": "run_ghi789",
"monitorUrl": "https://s6s.ai/workflows/wf_abc123/runs/run_ghi789"
}The monitorUrl opens the run in the S6S dashboard where you can watch execution in real time.
Step 3: Check the Run
Poll the run status via API or open the monitorUrl in your browser:
curl https://s6s.ai/api/v1/runs/run_ghi789 \ -H "Authorization: Bearer s6s_your_api_key"
{
"runId": "run_ghi789",
"status": "succeeded",
"summary": "All steps completed successfully.",
"steps": [
{
"ref": "greet",
"status": "succeeded",
"output": {
"message": "Hello from S6S!",
"timestamp": "2026-03-08T12:00:00Z"
}
}
]
}Run statuses
| Status | Meaning |
|---|---|
| running | The workflow is currently executing. |
| succeeded | All steps completed without errors. |
| failed | One or more steps failed. Check the summary field for diagnosis. |
| cancelled | The run was cancelled by the user or via API. |
Step 4: Deploy a Real Workflow
Now let's deploy something more realistic: a webhook-triggered workflow that fetches data from an API, transforms it, and sends a Slack notification — with parallel steps and error handling.
curl -X POST https://s6s.ai/api/v1/workflows/deploy \
-H "Authorization: Bearer s6s_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Order Processor",
"trigger": {
"type": "webhook",
"path": "/orders/new",
"method": "POST"
},
"steps": [
{
"ref": "fetch_order",
"action": "http",
"config": {
"method": "GET",
"url": "https://api.example.com/orders/{{trigger.output.body.order_id}}"
}
},
{
"ref": "enrich",
"action": "transform",
"config": {
"template": {
"summary": "New order #{{fetch_order.output.body.id}} — ${{fetch_order.output.body.total}}",
"customer": "{{fetch_order.output.body.customer_name}}"
}
}
},
{
"ref": "notify_slack",
"action": "slack",
"config": {
"channel": "#orders",
"textTemplate": "{{enrich.output.summary}}"
},
"credential": "default"
}
],
"flow": ["fetch_order", "enrich", "notify_slack"]
}'Key concepts in this example
- Webhook trigger — The workflow runs when a POST request hits
https://s6s.ai/api/webhooks/orders/new. Access the request body via{{trigger.output.body.*}}. - Expressions — Double-brace expressions like
{{fetch_order.output.body.id}}reference outputs from previous steps by theirrefname. - Error handling — Setting
"on_error": "continue"lets the workflow proceed even if that step fails. The default isfail, which stops the run. - Parallel flow — To run steps in parallel, nest them in a sub-array:
["fetch_order", ["enrich", "notify_slack"]]would runenrichandnotify_slacksimultaneously afterfetch_ordercompletes.
Missing credentials
If your workflow uses an integration (like Slack) that you haven't connected yet, the deploy response will include a missing_credentials array with a connect_url for each one:
{
"workflowId": "wf_abc123",
"runId": "run_ghi789",
"missing_credentials": [
{
"provider": "slack",
"connect_url": "https://s6s.ai/credentials/connect/slack"
}
]
}Visit the connect_url to authorize S6S with the provider. The workflow will use the credential automatically on subsequent runs.
Next Steps
Recipe Format
Full reference for the Recipe JSON schema.
API Reference
All REST endpoints for managing workflows and runs.
API Keys
Create, manage, and secure your API keys.
Credentials
Connect third-party services like Slack, Google, and more.
Expressions
Reference data between steps with template expressions.
MCP Server
Connect AI agents via the Model Context Protocol.