Triggers
What are triggers?
A trigger determines when a workflow starts. Every workflow execution begins with a trigger.
Triggers are attached to a published workflow version. The workflow must be published before any trigger can fire it. Triggers can be enabled or disabled independently without changing the workflow itself.
Trigger types
| Type | Use case | Initiated by |
|---|---|---|
| Manual | On-demand runs initiated by a person | User clicking Run in Studio or in the Hub dashboard |
| Schedule | Time-based recurring automation | The Hub, when a cron expression matches the current time |
| Webhook | External-system events and application integration | Any system that can send an authenticated HTTPS POST |
Choosing the right trigger
| Scenario | Trigger |
|---|---|
| Run a workflow every night at 02:00 | Schedule |
| Run a workflow when a CRM record is updated | Webhook |
| Run a workflow from your own internal application | Webhook |
| Run a workflow once to test a change | Manual |
| Run a workflow once for an ad-hoc task | Manual |
How a trigger reaches a Runner
Regardless of which trigger fires, the path from trigger to result is the same. The Hub queues the execution, a Runner is assigned, the workflow runs, and the result is reported back.
Trigger fires
A Manual, Schedule, or Webhook trigger requests an execution.
Execution created
The Hub records a new execution in the database with status QUEUED.
Queued
The execution enters the BullMQ queue, ready to be assigned.
Runner assigned
A queue worker selects an available Runner and the execution moves to ASSIGNED.
Workflow runs
The Runner picks up the execution and runs the workflow graph node by node.
Result reported
The Runner reports the final status (COMPLETED, FAILED, or STOPPED) back to the Hub.
Manual triggers
Manual triggers fire on demand. A user clicks Run in Exekra Studio (during workflow authoring) or in the Hub dashboard (against a published workflow). No additional configuration is required.
Manual triggers are useful for testing during authoring, for ad-hoc runs, and for processes that need a human checkpoint before they start.
Schedule triggers
How they work
Schedule triggers fire on a cron expression. The Hub evaluates all enabled schedule triggers in-process and creates a queued execution each time a schedule matches the current time. The execution then follows the same path as any other trigger.
The Hub re-reads each trigger from the database at fire time, so disabling a schedule from the dashboard or via the API stops it firing immediately on the next evaluation.
Cron examples
| Business requirement | Cron expression |
|---|---|
| Every weekday at 09:00 | 0 9 * * 1-5 |
| Every 15 minutes | */15 * * * * |
| Daily at midnight | 0 0 * * * |
| First day of every month at 00:00 | 0 0 1 * * |
| Every Sunday at 06:00 | 0 6 * * 0 |
| Top of every hour | 0 * * * * |
Timezone behavior
Tip
Schedule triggers fire in the Hub server's local timezone. Set the Hub server's timezone to the business timezone you want schedules to follow, or write cron expressions in the server's timezone.
If the Hub server runs in UTC and you want a workflow to fire at 09:00 in a different business timezone, convert the time to UTC when writing the cron expression. If the Hub runs in your business timezone, write the cron expression in that timezone directly.
Webhook triggers
How they work
A webhook trigger exposes an HTTPS endpoint on the Hub. External systems start the workflow by sending an authenticated POST request.
Create the trigger
Create a webhook trigger on the published workflow version.
Hub issues URL and secret
The Hub generates a unique webhook URL and a 32-byte random secret at creation. The secret is shown once; copy it into the external system.
External system sends a POST
The external system sends an HTTPS POST to the webhook URL with the X-Webhook-Secret header.
Workflow execution starts
The Hub verifies the secret, creates an execution, and returns the execution ID in the response.
Example request
POST https://hub.example.com/webhook/trg_8b91c3f4e2a04d7
Content-Type: application/json
X-Webhook-Secret: 0c9f4e7d3a8b2f5c1e6d4a9b7c3f8e2a5d1b6f4e9c2a8d3b7e5f1a4c6d9b2e8f
{
"customerId": 123
}
Successful response:
HTTP/1.1 200 OK
Content-Type: application/json
{ "success": true, "executionId": "exe_4d2e1a6b8c..." }
Authentication
Every webhook trigger has a secret. The Hub generates a fresh 32-byte cryptographically random secret at creation and stores it. Incoming requests must include the secret in the X-Webhook-Secret header.
| Condition | Response |
|---|---|
| Valid secret, enabled trigger | 200 with the new execution ID |
| Missing or invalid secret | 401 Unauthorized |
| Disabled trigger or unknown trigger ID | 400 Bad Request |
The Hub uses a timing-safe comparison to prevent secret discovery via response-time analysis.
Security guidance
Webhook hardening
- Treat the webhook secret as a credential. Store it in a secret manager on the calling side, not in source control.
- Use the Hub's HTTPS port. Webhook traffic must be encrypted in transit.
- Rotate the secret if it may have been exposed. Recreate the trigger to generate a fresh secret and update the caller.
- Restrict access at the network layer where you can. The Hub's HTTPS port should not be exposed to the public internet unless that is a deliberate architecture decision.
- Disable unused triggers. A disabled trigger rejects every request and does not consume execution capacity.
Starting workflows from your own applications
Applications that start workflows programmatically use a webhook trigger. The same POST /webhook/<id> endpoint with the secret header is the supported API path; this is how the platform exposes "API trigger" semantics.
For richer programmatic control (creating triggers, listing executions, fetching results), use the Hub REST API with a user JWT.
Trigger limits
Per-organization trigger count
Soft limit only. Practical limits come from Hub resources rather than a configured cap.
Webhook request size
Bounded by the Hub's HTTP body-size limit (default 1 MB). Larger payloads should be referenced (file ID, URL) rather than embedded.
Webhook request rate
Each webhook trigger creates one execution per accepted request. The configured per-cap execution license enforces the upstream limit on concurrent executions; bursty webhook traffic queues normally.
Trigger permissions
Only users with the Developer role (or higher) can create, edit, or delete triggers. Operators can fire enabled Manual triggers but cannot create new ones.
What to read next
- Execution lifecycle: what happens after a trigger fires, including queueing, assignment, retries, and stale-execution handling
- Security model: RBAC, credentials, and audit posture for everything the trigger fires
- Studio guide: authoring the workflows that triggers run
Was this page helpful?
A quick signal helps us prioritise improvements.