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.

API Reference

Complete REST API for deploying, managing, and monitoring workflows.

Authentication

All endpoints except /healthz and /api/webhooks/* require a Bearer token in the Authorization header.

Authorization: Bearer s6s_your_api_key

Create API keys from the API Keys page in the dashboard.

Workflows

POST/api/v1/workflows/deploy

The primary endpoint for creating and updating workflows. Accepts both Recipe (agent-friendly) and IR (canvas/internal) formats. Deploys the workflow and optionally starts a run.

Request body (Recipe format)

{
  "name": "Lead Notifier",
  "trigger": {
    "type": "webhook",
    "config": { "path": "/new-lead", "method": "POST" }
  },
  "steps": [
    {
      "ref": "format",
      "action": "transform",
      "config": {
        "template": { "msg": "New: {{trigger.output.body.name}}" }
      }
    },
    {
      "ref": "notify",
      "action": "slack",
      "config": { "channel": "#sales", "text": "{{format.output.msg}}" },
      "credential": "slack"
    }
  ],
  "flow": ["format", "notify"],
  "slug": "lead-notifier",
  "autoRun": true,
  "callback_url": "https://your-app.com/webhook"
}
FieldTypeRequiredDescription
namestringYesWorkflow display name
triggerobjectRecipe{ type, config }
stepsarrayRecipeStep definitions with ref, action, config
flowarrayRecipeExecution order. Sub-arrays for parallel steps.
nodesarrayIRNode definitions
edgesarrayIREdge connections
slugstringNoURL-safe identifier (auto-generated from name)
autoRunbooleanNoSet to false to deploy without executing. Default: true
callback_urlstringNoURL to POST when run completes

Success response (200)

{
  "ok": true,
  "workflowId": "uuid",
  "versionId": "uuid",
  "version": 1,
  "hash": "sha256-hash",
  "runId": "uuid",
  "monitorUrl": "https://s6s.ai/runs/uuid",
  "webhookTrigger": {
    "path": "/new-lead",
    "invokeUrl": "https://s6s.ai/api/webhooks/new-lead",
    "secret": "hex-string"
  }
}

Missing credentials (200, runId: null)

{
  "ok": true,
  "workflowId": "uuid",
  "runId": null,
  "missing_credentials": [
    {
      "provider": "slack",
      "ref": "slack",
      "node_name": "Notify",
      "connect_url": "https://s6s.ai/credentials/connect/slack",
      "setup_instructions": "..."
    }
  ],
  "message": "Workflow saved but cannot run — missing credentials for: slack"
}
GET/api/v1/workflows

Returns all workflows with their latest version info.

Response
{
  "workflows": [
    {
      "id": "uuid",
      "name": "Lead Notifier",
      "slug": "lead-notifier",
      "enabled": true,
      "version": 2,
      "createdAt": "2026-01-15T10:00:00Z",
      "updatedAt": "2026-01-16T08:30:00Z"
    }
  ]
}
GET/api/v1/workflows/:workflowId

Returns workflow details including the latest version JSON.

PATCH/api/v1/workflows/:workflowId

Update a workflow's name or enabled status.

Request body
{
  "name": "Updated Name",
  "enabled": false
}
DELETE/api/v1/workflows/:workflowId

Soft-deletes a workflow. Active runs are cancelled.

POST/api/v1/workflows/:workflowId/validate

Pre-flight check. Validates structure, trigger, schedule, credentials, and node config without executing.

Response
{
  "status": "ready",
  "summary": "All checks passed",
  "checks": [
    { "check": "structure", "status": "pass", "detail": null },
    { "check": "credentials", "status": "pass", "detail": null },
    { "check": "schedule", "status": "pass", "detail": null },
    { "check": "node_config", "status": "pass", "detail": null }
  ]
}
StatusMeaning
readyAll checks passed. Safe to run.
warningsSome checks have warnings but no blockers.
blockedAt least one check failed. Fix before running.
POST/api/v1/workflows/:workflowId/run

Manually trigger a run for a deployed workflow.

Response (200)
{
  "runId": "uuid",
  "workflowId": "uuid",
  "versionId": "uuid",
  "version": 1,
  "status": "running"
}

Runs

GET/api/v1/runs

Returns a paginated list of recent runs. Supports optional query parameters.

ParameterTypeDescription
statusstringFilter by status: running, succeeded, failed, cancelled
limitnumberMax results to return (default: 20)
GET/api/v1/runs/:runId

Returns run details including summary, step summaries, and full step results.

Response
{
  "runId": "uuid",
  "workflowId": "uuid",
  "status": "succeeded",
  "startedAt": "2026-01-15T10:30:00Z",
  "finishedAt": "2026-01-15T10:30:02Z",
  "durationMs": 2340,
  "stepCount": 3,
  "summary": "3/3 steps succeeded.",
  "stepSummaries": [
    {
      "nodeId": "uuid",
      "nodeType": "action.http",
      "status": "succeeded",
      "durationMs": 150,
      "errorCode": null
    }
  ],
  "failureReason": null,
  "errorCode": null
}
FieldDescription
summaryHuman-readable one-liner (e.g. "3/4 steps succeeded. Step 'send_tg' failed: CREDENTIAL_MISSING")
stepSummariesCondensed per-step array with nodeId, nodeType, status, durationMs, errorCode
failureReasonAdditional context for the failure (string or null)
errorCodeTop-level error from first failed step (string or null)

Status values

StatusMeaning
runningThe workflow is currently executing.
succeededAll steps completed without errors.
failedOne or more steps failed.
cancelledThe run was cancelled by the user or via API.
POST/api/v1/runs/:runId/cancel

Cancels an active run. Returns the updated run status.

POST/api/v1/runs/:runId/retry

Retries a failed or cancelled run. Creates a new run from the same workflow version.

Response (200)
{
  "runId": "new-uuid",
  "workflowId": "uuid",
  "status": "running"
}

Discovery

GET/api/v1/catalog

Returns all available node types with their schemas. Useful for building agent system prompts and for auto-generating workflow UIs.

GET/api/v1/integrations

Returns all learned integrations (provider, actions, auth type, setup instructions).

GET/api/v1/integrations/:id

Returns full details for a specific integration. S6S auto-learns integration details as providers are used.

GET/api/v1/activity

Paginated activity log of deployments, runs, errors, and other events.

Credentials

GET/api/v1/credentials

Returns all credential bindings for the current user. Secrets are never exposed.

Response
{
  "credentials": [
    {
      "bindingId": "uuid",
      "provider": "slack",
      "capability": "oauth",
      "accountLabel": "My Slack",
      "status": "ready",
      "expiresAt": null
    }
  ]
}

Webhooks

POST/api/webhooks/:path

Triggers a webhook-triggered workflow. No authentication required — uses the webhook secret for verification. The path is defined when deploying the workflow.

curl -X POST https://s6s.ai/api/webhooks/new-lead \
  -H "Content-Type: application/json" \
  -d '{ "name": "Jane Doe", "email": "[email protected]" }'

AI Visibility Monitor Cloud

Track how AI search engines mention and recommend your brand. Available on S6S Cloud only. See the AI Visibility docs for scoring methodology and engine details.

POST/api/visibility/discover

Crawl a website and auto-extract brand info (name, products, keywords, competitors). Accepts optional targetLocations for location-aware discovery.

GETPOST/api/visibility/brands

List or create brands to track. POST accepts name, domain, keywords, competitors, engines (array of perplexity/chatgpt/gemini/claude/grok).

GETPATCHDELETE/api/visibility/brands/:brandId

Single brand CRUD operations.

POST/api/visibility/brands/:brandId/check

Run an AI visibility check across selected engines. Uses multi-run frequency scoring (3-5 parallel runs per keyword per engine).

GET/api/visibility/brands/:brandId/scores?days=30

Score time-series (up to 365 days). Returns daily aggregates with overall, per-engine, and component breakdowns (frequency, sentiment, position, cross-engine, coverage, consistency).

GETPOST/api/visibility/brands/:brandId/audit

Deterministic site audit: robots.txt, schema markup, Wikipedia/Reddit presence. Runs in 3-5 seconds, costs zero credits.

GET/api/visibility/brands/:brandId/recommendations

Returns prioritized actionable recommendations (15+ types) and accuracy/hallucination report.

POSTGET/api/visibility/brands/:brandId/fix

POST deploys fix workflows (schema gen, FAQ, content recs, YouTube scripts, X threads, Reddit monitor). GET returns persisted fix results.

GET/api/visibility/brands/:brandId/report

Generates print-ready HTML report with HMAC-signed share links (valid 30 days, no login required).

GET/api/visibility/dashboard

Aggregated dashboard: 7-day score delta, average score, top/lowest brand, total counts.

GET/api/audit?domain=example.com

No authentication required. Free public site audit for any domain.

User Management

DELETE/api/user/delete

Permanently deletes user account and all associated data (workflows, runs, credentials, visibility brands, billing).

GET/api/user/export

GDPR data export. Returns all user data including workflows, runs, credential metadata, billing transactions, and all visibility tables.

Health

GET/healthz

Health check endpoint. No authentication required. Returns 200 when healthy, 503 when the database is unreachable.

Response (200)
{
  "status": "ok",
  "timestamp": "2026-01-15T10:30:00Z",
  "version": "0.1.0"
}

Error Format

All errors follow a consistent format. Error codes are machine-readable — designed for agents to parse and self-correct.

{
  "ok": false,
  "error": "Human-readable message",
  "errors": [
    {
      "code": "UNKNOWN_STEP_REF",
      "message": "Step 'notfy_slack' not found",
      "suggestion": "Did you mean 'notify_slack'?",
      "path": ["flow", 1]
    }
  ]
}
FieldDescription
codeMachine-readable error code (e.g. UNKNOWN_STEP_REF, CREDENTIAL_MISSING)
messageHuman-readable description of the error
suggestionActionable fix hint (optional)
pathJSON path to the problematic field (optional)

Rate Limits

EndpointLimitScope
V1 API (read)120 req/minPer user + path
V1 API (mutate)30 req/minPer user + path
/api/webhooks/:path60 req/minPer IP + path
/api/v1/workflows/deploy30 req/minPer IP

When a rate limit is exceeded, the API returns 429 Too Many Requests with a Retry-After header indicating when to retry.

Ready to integrate?

Grab an API key and deploy your first workflow in seconds.