Limits
Timeouts, rate limits, tier quotas, and other caps enforced by Triggo.
Limits
Every cap Triggo enforces at runtime, in one place. Values below are pulled directly from the executor and billing code — not aspirational.
Execution timeouts
Both timeouts abort the in-flight work and record a step_timed_out event in the journal. Pipeline-level timeout is a hard global cap — you cannot raise it per workflow.
| Scope | Value | Source constant |
|---|---|---|
| Step (single node) | 30 s (30 000 ms) | DEFAULT_STEP_TIMEOUT_MS |
| Pipeline (whole run) | 300 s / 5 min (300 000 ms) | DEFAULT_PIPELINE_TIMEOUT_MS |
| Maximum global timeout | 300 s (300 000 ms) | MAX_GLOBAL_TIMEOUT_MS |
A step that exceeds the step timeout fails with a TIMEOUT error. A run that exceeds the pipeline timeout is aborted regardless of which step is currently executing.
Run rate limits (per user)
| Limit | Value |
|---|---|
| Runs per user per hour | 100 |
| Window | 3 600 000 ms (1 h) |
| Atomicity | Redis Lua EVAL (atomic check-and-increment) |
When a user exceeds the cap, the execution is rejected without incrementing the counter, and a Russian-language system message is posted once per pipeline per window to the associated chat thread: Превышен лимит запусков (100 в час). Выполнение возобновится через N мин.
The Lua script guarantees concurrent webhook workers cannot overshoot the cap.
Workflow structural limits
Enforced at deploy time and at runtime.
| Limit | Value | Source constant |
|---|---|---|
| Max nodes per workflow | 500 | MAX_WORKFLOW_NODES |
| Max edges per workflow | 1000 | MAX_WORKFLOW_EDGES |
| Max loop nesting depth | 3 (0-indexed; 0 = top-level loop) | MAX_LOOP_NESTING_DEPTH |
Workflows that breach these caps are rejected on save/deploy.
Circuit breaker (per integration)
Protects a third-party API from further requests after repeated failures. State is Redis-backed and shared across all workflows touching the same integration.
| Parameter | Value |
|---|---|
| Failure threshold | 5 failures |
| Failure window | 300 s (5 min) |
| Cooldown (open state) | 60 s |
See Error handling for recovery semantics and how half-open probes work.
Auto-pause (per pipeline)
After 3 consecutive failed runs, the pipeline is stopped. Tracked via Redis key autopause:{pipelineId}:failures. A successful run resets the counter.
See Error handling for how to re-enable a paused pipeline.
Tier quotas
Runtime API and MCP calls authenticated by Bearer API key are rate-limited per key using a Redis ZSET sliding window. API key quotas (active keys per account) are enforced at key-creation time.
| Tier | Runtime API (req/min) | Active API keys |
|---|---|---|
free | 60 | 1 |
starter | 300 | 3 |
pro | 1 000 | 10 |
business | 1 000 | unlimited |
Unknown or missing tier falls back to 60 req/min. Window size is 60 s, exact — there is no burst allowance beyond the steady-state rate.
Every runtime response carries rate-limit headers (x-ratelimit-limit, x-ratelimit-remaining, x-ratelimit-reset as epoch seconds); 429 responses also include retry-after (seconds).
See Agent rate limits for the exact header contract. Raise your tier from the Billing section of workspace settings.
Related
- Error handling — retry, continue-on-failure, circuit breaker, auto-pause behavior
- Debugging runs — inspecting timed-out or rate-limited runs in the journal
- Agent rate limits — runtime API and MCP headers