Triggers & Webhooks
Configure Manual, Webhook, and Schedule triggers. Call workflows from external systems via authenticated webhooks.
What you'll be able to do after this module
- Choose the right trigger type for your use case
- Set up a Webhook trigger with schema validation and mock requests
- Create Orchestrator API keys and authenticate webhook calls
- Call a workflow from cURL, JavaScript, and Python
- Configure a Schedule trigger with cron expressions
The Three Trigger Types
Every workflow starts with exactly one trigger. The trigger type determines how the workflow fires.
| Type | When to use | Output |
|---|---|---|
| Manual | Development, testing, ad-hoc runs | {} (empty unless input provided) |
| Webhook | External integrations, production automation | The full JSON request body |
| Schedule | Recurring tasks (daily reports, hourly checks) | Execution timestamp |
To change the trigger type, click the trigger node → select a new type from the dropdown in the config panel.
Manual Trigger
Manual is the default. Click Run in the toolbar and the workflow executes immediately.
Best used for:
- Building and testing workflows during development
- One-off tasks (e.g., "run this report now")
- QA testing before switching to Webhook
Start every new workflow with a Manual trigger. Switch to Webhook or Schedule only when you're confident the workflow runs correctly.
Webhook Trigger
A Webhook trigger gives your workflow a public HTTP endpoint that external systems can call.
Webhook URL format
POST https://orchestrator.skytells.ai/api/workflows/{workflowId}/webhookThe workflowId is visible in your browser's address bar when editing the workflow.
Authentication
Webhook calls require an Orchestrator API key in the Authorization header:
Authorization: Bearer wfb_aB3cD4eF5gH6iJ7kL8mN9oP0qOrchestrator API keys (wfb_ prefix) are NOT the same as Skytells API keys. Orchestrator keys authorize webhook execution. Skytells keys authenticate against Skytells AI models. They are not interchangeable. See API Keys for the full distinction.
Creating an API Key
Open API Keys panel
Click your user avatar → API Keys.
Create a new key
Click Create API Key, give it a name (e.g., production-webhook), and click Create.
Copy and store immediately
The full key is shown only once. Copy it and store it in a secure location (e.g., environment variable, secrets manager). It cannot be retrieved again.
Calling the Webhook
curl -X POST \
https://orchestrator.skytells.ai/api/workflows/YOUR_WORKFLOW_ID/webhook \
-H "Content-Type: application/json" \
-H "Authorization: Bearer wfb_YOUR_API_KEY" \
-d '{
"customer_id": "cust_123",
"action": "onboard"
}'Response
{
"executionId": "exec_abc123",
"status": "running"
}Webhook execution is asynchronous. The response returns immediately with a running status. Poll the execution status endpoint to track progress:
GET /api/workflows/executions/{executionId}/statusError Codes
| Status | Meaning |
|---|---|
200 | Workflow execution started |
400 | Trigger type mismatch (workflow doesn't use Webhook trigger) |
401 | Missing or invalid API key |
403 | Key owner doesn't match workflow owner |
404 | Workflow not found |
500 | Runtime error during execution |
Webhook Schema (Optional)
You can define an expected payload schema in the trigger config using the Schema Builder. This is for documentation purposes — it helps you and your team understand the expected structure, and you can use it with the mock request feature.
Mock Requests
For testing without an actual HTTP call:
- Enter test JSON in the Mock Request field on the Webhook trigger
- Click Run — the workflow executes with the mock payload as trigger output
- Inspect results in the Runs panel
This lets you iterate on webhook workflows without needing an external caller.
CORS
The webhook endpoint returns the following CORS headers, enabling direct calls from browser-based applications:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, OPTIONS
Access-Control-Allow-Headers: Content-Type, AuthorizationSchedule Trigger
A Schedule trigger fires on a cron-based timer.
Configuration
| Field | Description | Example |
|---|---|---|
| Cron Expression | Standard 5-field cron | 0 9 * * * (9am daily) |
| Timezone | IANA timezone name | America/New_York |
Cron syntax reference
┌─────── minute (0-59)
│ ┌───── hour (0-23)
│ │ ┌─── day of month (1-31)
│ │ │ ┌─ month (1-12)
│ │ │ │ ┌ day of week (0-6, 0=Sunday)
│ │ │ │ │
* * * * *| Expression | Meaning |
|---|---|
0 9 * * * | Every day at 9:00 AM |
0 */2 * * * | Every 2 hours |
30 8 * * 1-5 | Weekdays at 8:30 AM |
0 0 1 * * | First day of every month at midnight |
*/15 * * * * | Every 15 minutes |
The Schedule trigger UI is fully functional, but actual scheduled execution depends on your deployment's cron scheduler runtime. Verify scheduled execution behavior in your specific deployment.
Choosing a Trigger Type
| Scenario | Recommended Trigger |
|---|---|
| Building and testing a new workflow | Manual |
| Reacting to events from another service (Stripe payment, GitHub push, form submission) | Webhook |
| Daily report, hourly data sync, periodic cleanup | Schedule |
| API endpoint for your frontend or backend to call | Webhook |
| One-time data migration or batch job | Manual |
What you now understand
| Concept | What it means |
|---|---|
| Manual trigger | Click Run — for development and ad-hoc use |
| Webhook trigger | HTTP POST endpoint for external callers |
| Schedule trigger | Cron-based timer for periodic execution |
| Orchestrator API key | wfb_ prefixed key for webhook authentication |
| Mock request | Test webhook payloads without an actual HTTP call |
| Asynchronous execution | Webhook returns immediately; poll for status |
Up next: API & Automation — use the REST API, export code, and generate workflows with AI.