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.
Triggers
Every workflow needs exactly one trigger that determines how it starts. S6S supports three trigger types: webhook, schedule, and manual.
Webhook
Start workflows from HTTP requests
Schedule
Run workflows on a cron schedule
Manual
Trigger via UI or API call
Webhook Triggers
Webhook triggers start a workflow when an HTTP request hits a specific URL path. This is ideal for integrating with third-party services that send webhooks (Stripe, GitHub, Shopify, etc.) or for building custom API endpoints.
Recipe configuration
{
"name": "Handle New Lead",
"trigger": {
"type": "webhook",
"config": {
"path": "/new-lead",
"method": "POST"
}
},
"steps": [ ... ],
"flow": [ ... ]
}| Field | Type | Default | Description |
|---|---|---|---|
| path | string | /my-webhook | URL path for the webhook endpoint |
| method | string | POST | HTTP method to accept (GET, POST, PUT, etc.) |
Deploy response
When you deploy a workflow with a webhook trigger, the response includes the invoke URL and a secret token for authentication:
{
"workflowId": "wf_abc123",
"versionId": "v_xyz789",
"webhookTrigger": {
"path": "/new-lead",
"invokeUrl": "https://s6s.ai/api/webhooks/new-lead?token=whsec_...",
"secret": "whsec_..."
}
}Invoke URL format
https://s6s.ai/api/webhooks/{path}?token={secret}The token query parameter authenticates the request. Keep your webhook secret safe — anyone with the token can trigger your workflow.
Example: triggering a webhook
curl -X POST "https://s6s.ai/api/webhooks/new-lead?token=whsec_abc123" \
-H "Content-Type: application/json" \
-d '{
"name": "Jane Smith",
"email": "[email protected]",
"source": "landing_page"
}'Accessing webhook data
Use expressions to access the incoming request data in your workflow steps:
| Expression | Description |
|---|---|
| {{trigger.output.body}} | The full parsed JSON body |
| {{trigger.output.body.name}} | A specific field from the body |
| {{trigger.output.headers}} | All request headers |
| {{trigger.output.query}} | Query string parameters |
| {{trigger.output.method}} | HTTP method (GET, POST, etc.) |
Authentication
Webhook endpoints are authenticated via the secret token in the token query parameter. S6S validates the token before starting the workflow. Requests with an invalid or missing token receive a 401 Unauthorized response.
Schedule Triggers
Schedule triggers run a workflow automatically on a recurring basis using standard cron expressions. Use these for periodic data syncs, report generation, monitoring, cleanup jobs, and more.
Recipe configuration
{
"name": "Daily Report",
"trigger": {
"type": "schedule",
"config": {
"cron": "0 9 * * *",
"timezone": "America/New_York"
}
},
"steps": [ ... ],
"flow": [ ... ]
}| Field | Type | Default | Description |
|---|---|---|---|
| cron | string | 0 * * * * | Cron expression: minute hour day month weekday |
| timezone | string | UTC | IANA timezone name (e.g. America/New_York, Europe/London) |
Common cron patterns
| Pattern | Description |
|---|---|
| */5 * * * * | Every 5 minutes |
| 0 * * * * | Every hour (on the hour) |
| 0 9 * * * | Daily at 9:00 AM |
| 0 9 * * 1-5 | Weekdays at 9:00 AM |
| 0 0 * * * | Daily at midnight |
| 0 0 1 * * | First day of every month at midnight |
| 0 */4 * * * | Every 4 hours |
| 30 8 * * 1 | Every Monday at 8:30 AM |
Cron expressions use 5 fields: minute hour day-of-month month day-of-week
Timezone handling
Schedules use IANA timezone names. If no timezone is specified, the schedule runs in UTC. Common timezones:
UTCAmerica/New_YorkAmerica/ChicagoAmerica/DenverAmerica/Los_AngelesEurope/LondonEurope/BerlinAsia/TokyoAsia/ShanghaiAustralia/SydneyAccessing schedule data
The trigger output includes information about when the schedule fired:
| Expression | Description |
|---|---|
| {{trigger.output.fired_at}} | ISO timestamp of when the schedule fired |
| {{trigger.output.timezone}} | The configured timezone |
Rate limits
The minimum schedule interval depends on your plan. Schedules are checked every 60 seconds by the worker daemon and are minute-aligned for consistency.
Manual Triggers
Manual triggers start a workflow on demand — either from the S6S UI "Run" button or via the API. This is the simplest trigger type and requires no configuration.
Recipe configuration
{
"name": "Process Data",
"trigger": { "type": "manual" },
"steps": [ ... ],
"flow": [ ... ]
}How to trigger
Via the UI
Open your workflow in the S6S dashboard and click the "Run" button in the toolbar.
Via the API
Send a POST request to the run endpoint with optional input data.
Triggering via API
curl -X POST https://s6s.ai/api/v1/workflows/wf_abc123/run \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": {
"name": "test",
"count": 42,
"items": ["a", "b", "c"]
}
}'The input field is optional. If provided, it becomes available as {{trigger.output.payload}} in your workflow steps.
Accessing trigger data
| Expression | Description |
|---|---|
| {{trigger.output.payload}} | The full input object passed in the run request |
| {{trigger.output.payload.name}} | A specific field from the input |
| {{trigger.output.triggeredAt}} | ISO timestamp of when the run was created |
| {{trigger.output.triggeredBy}} | "api" or "ui" |
Full example
{
"name": "Greet User",
"trigger": { "type": "manual" },
"steps": [
{
"ref": "greet",
"action": "transform",
"config": {
"template": {
"message": "Hello, {{trigger.output.payload.name}}!",
"time": "{{trigger.output.triggeredAt}}"
}
}
}
],
"flow": ["greet"]
}curl -X POST https://s6s.ai/api/v1/workflows/wf_abc123/run \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "input": { "name": "Ahmad" } }'
# Output: { "message": "Hello, Ahmad!", "time": "2026-03-08T..." }Trigger Comparison
| Feature | Webhook | Schedule | Manual |
|---|---|---|---|
| Starts when | HTTP request received | Cron schedule fires | UI click or API call |
| Config needed | path, method | cron, timezone | None |
| Input data | HTTP body, headers, query | scheduledTime, timezone | Optional input object |
| Use case | External integrations, APIs | Periodic jobs, reports | Testing, ad-hoc runs |
Ready to trigger your first workflow?
Deploy a workflow with any trigger type in under a minute.