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 more

API / SDK

Deploy workflows programmatically. Continue reading below.

You are here

Chat UI

Build workflows with Ali, the AI copilot.

Open chat

Step 1: Get an API Key

  1. Sign up at s6s.ai if you haven't already.
  2. Navigate to the API Keys page in the sidebar.
  3. Click Create API Key and give it a name.
  4. 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:

POST https://s6s.ai/api/v1/workflows/deploy
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

FieldPurpose
nameA human-readable name for the workflow.
triggerHow the workflow starts. manual runs immediately on deploy.
stepsAn array of actions. Each step has a ref (unique name), action (what to do), and config (action-specific settings).
flowExecution 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:

GET https://s6s.ai/api/v1/runs/:runId
curl https://s6s.ai/api/v1/runs/run_ghi789 \
  -H "Authorization: Bearer s6s_your_api_key"
Response
{
  "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

StatusMeaning
runningThe workflow is currently executing.
succeededAll steps completed without errors.
failedOne or more steps failed. Check the summary field for diagnosis.
cancelledThe 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.

POST https://s6s.ai/api/v1/workflows/deploy
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 their ref name.
  • Error handling — Setting "on_error": "continue" lets the workflow proceed even if that step fails. The default is fail, which stops the run.
  • Parallel flow — To run steps in parallel, nest them in a sub-array: ["fetch_order", ["enrich", "notify_slack"]] would run enrich and notify_slack simultaneously after fetch_order completes.

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

Ready to build?

Create an account and deploy your first workflow in under a minute.