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
/api/v1/workflows/deployThe 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"
}| Field | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | Workflow display name |
| trigger | object | Recipe | { type, config } |
| steps | array | Recipe | Step definitions with ref, action, config |
| flow | array | Recipe | Execution order. Sub-arrays for parallel steps. |
| nodes | array | IR | Node definitions |
| edges | array | IR | Edge connections |
| slug | string | No | URL-safe identifier (auto-generated from name) |
| autoRun | boolean | No | Set to false to deploy without executing. Default: true |
| callback_url | string | No | URL 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"
}/api/v1/workflowsReturns all workflows with their latest version info.
{
"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"
}
]
}/api/v1/workflows/:workflowIdReturns workflow details including the latest version JSON.
/api/v1/workflows/:workflowIdUpdate a workflow's name or enabled status.
{
"name": "Updated Name",
"enabled": false
}/api/v1/workflows/:workflowIdSoft-deletes a workflow. Active runs are cancelled.
/api/v1/workflows/:workflowId/validatePre-flight check. Validates structure, trigger, schedule, credentials, and node config without executing.
{
"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 }
]
}| Status | Meaning |
|---|---|
| ready | All checks passed. Safe to run. |
| warnings | Some checks have warnings but no blockers. |
| blocked | At least one check failed. Fix before running. |
/api/v1/workflows/:workflowId/runManually trigger a run for a deployed workflow.
{
"runId": "uuid",
"workflowId": "uuid",
"versionId": "uuid",
"version": 1,
"status": "running"
}Runs
/api/v1/runsReturns a paginated list of recent runs. Supports optional query parameters.
| Parameter | Type | Description |
|---|---|---|
| status | string | Filter by status: running, succeeded, failed, cancelled |
| limit | number | Max results to return (default: 20) |
/api/v1/runs/:runIdReturns run details including summary, step summaries, and full step results.
{
"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
}| Field | Description |
|---|---|
| summary | Human-readable one-liner (e.g. "3/4 steps succeeded. Step 'send_tg' failed: CREDENTIAL_MISSING") |
| stepSummaries | Condensed per-step array with nodeId, nodeType, status, durationMs, errorCode |
| failureReason | Additional context for the failure (string or null) |
| errorCode | Top-level error from first failed step (string or null) |
Status values
| Status | Meaning |
|---|---|
| running | The workflow is currently executing. |
| succeeded | All steps completed without errors. |
| failed | One or more steps failed. |
| cancelled | The run was cancelled by the user or via API. |
/api/v1/runs/:runId/cancelCancels an active run. Returns the updated run status.
/api/v1/runs/:runId/retryRetries a failed or cancelled run. Creates a new run from the same workflow version.
{
"runId": "new-uuid",
"workflowId": "uuid",
"status": "running"
}Discovery
/api/v1/catalogReturns all available node types with their schemas. Useful for building agent system prompts and for auto-generating workflow UIs.
/api/v1/integrationsReturns all learned integrations (provider, actions, auth type, setup instructions).
/api/v1/integrations/:idReturns full details for a specific integration. S6S auto-learns integration details as providers are used.
/api/v1/activityPaginated activity log of deployments, runs, errors, and other events.
Credentials
/api/v1/credentialsReturns all credential bindings for the current user. Secrets are never exposed.
{
"credentials": [
{
"bindingId": "uuid",
"provider": "slack",
"capability": "oauth",
"accountLabel": "My Slack",
"status": "ready",
"expiresAt": null
}
]
}Webhooks
/api/webhooks/:pathTriggers 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.
/api/visibility/discoverCrawl a website and auto-extract brand info (name, products, keywords, competitors). Accepts optional targetLocations for location-aware discovery.
/api/visibility/brandsList or create brands to track. POST accepts name, domain, keywords, competitors, engines (array of perplexity/chatgpt/gemini/claude/grok).
/api/visibility/brands/:brandIdSingle brand CRUD operations.
/api/visibility/brands/:brandId/checkRun an AI visibility check across selected engines. Uses multi-run frequency scoring (3-5 parallel runs per keyword per engine).
/api/visibility/brands/:brandId/scores?days=30Score time-series (up to 365 days). Returns daily aggregates with overall, per-engine, and component breakdowns (frequency, sentiment, position, cross-engine, coverage, consistency).
/api/visibility/brands/:brandId/auditDeterministic site audit: robots.txt, schema markup, Wikipedia/Reddit presence. Runs in 3-5 seconds, costs zero credits.
/api/visibility/brands/:brandId/recommendationsReturns prioritized actionable recommendations (15+ types) and accuracy/hallucination report.
/api/visibility/brands/:brandId/fixPOST deploys fix workflows (schema gen, FAQ, content recs, YouTube scripts, X threads, Reddit monitor). GET returns persisted fix results.
/api/visibility/brands/:brandId/reportGenerates print-ready HTML report with HMAC-signed share links (valid 30 days, no login required).
/api/visibility/dashboardAggregated dashboard: 7-day score delta, average score, top/lowest brand, total counts.
/api/audit?domain=example.comNo authentication required. Free public site audit for any domain.
User Management
/api/user/deletePermanently deletes user account and all associated data (workflows, runs, credentials, visibility brands, billing).
/api/user/exportGDPR data export. Returns all user data including workflows, runs, credential metadata, billing transactions, and all visibility tables.
Health
/healthzHealth check endpoint. No authentication required. Returns 200 when healthy, 503 when the database is unreachable.
{
"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]
}
]
}| Field | Description |
|---|---|
| code | Machine-readable error code (e.g. UNKNOWN_STEP_REF, CREDENTIAL_MISSING) |
| message | Human-readable description of the error |
| suggestion | Actionable fix hint (optional) |
| path | JSON path to the problematic field (optional) |
Rate Limits
| Endpoint | Limit | Scope |
|---|---|---|
| V1 API (read) | 120 req/min | Per user + path |
| V1 API (mutate) | 30 req/min | Per user + path |
| /api/webhooks/:path | 60 req/min | Per IP + path |
| /api/v1/workflows/deploy | 30 req/min | Per 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.