# Limits and errors (/en/docs/developers/automation/limits-and-errors)



These defaults bound a run and its descendants. A shorter caller deadline also limits child execution. Concurrency limits queue work; they do not increase execution capacity.

## Execution and data [#execution-and-data]

| Limit                                                | Value                    |
| ---------------------------------------------------- | ------------------------ |
| Nesting depth                                        | 10                       |
| Children per run / simultaneously active children    | 100 / 20                 |
| Nodes per run tree                                   | 1,000                    |
| Concurrent runs per owner / definition               | 100 / 20                 |
| Action / sandbox action timeout                      | 30 s / 10 min            |
| Script wall-clock timeout                            | 5 min                    |
| Workflow default / maximum timeout                   | 24 h / 7 days            |
| Maximum create-run wait                              | 60 s                     |
| Payload soft threshold / hard limit                  | 256 KiB / 1 MiB          |
| Call payload / checkpoint inline threshold           | 32 KiB / 256 KiB         |
| Task executions per run, including loops and retries | 4,000                    |
| Durable execution step budget per run                | 9,000                    |
| Branches per fork / nested concurrent effects        | 10 / 25                  |
| Idempotency retention                                | 24 h                     |
| Run log retention                                    | 30 days                  |
| Records per page                                     | 100                      |
| Label count / key length / value length              | 50 / 40 / 500 characters |
| Description length                                   | 1,000 characters         |
| SSE heartbeat interval                               | 20 s                     |

{/* Sources: services/automation/src/api/contract.ts:42-70; services/automation/src/runs/workflow/primitives.ts:7-12. */}

The payload soft threshold is not the rejection boundary. The hard limit is 1 MiB, measured as encoded UTF-8 JSON bytes. Inline thresholds determine storage handling; they do not permit oversized script output.

## Script runtime [#script-runtime]

| Limit                           | Value                                                         |
| ------------------------------- | ------------------------------------------------------------- |
| CPU time                        | At most 30 seconds, further bounded by the remaining deadline |
| Connector requests per script   | 1,000, including logs and progress                            |
| Concurrent connector operations | 20                                                            |
| One log message                 | 4,096 UTF-8 bytes; longer messages are truncated              |
| Call preview                    | 512 characters                                                |
| Script error detail             | 1,000 characters                                              |
| User stack frames retained      | Up to 5                                                       |

{/* Sources: services/automation/src/script-runtime/core.ts:8-91; index.ts CPU limit; connectors.ts Gate(20). */}

Script output must be JSON-serializable. Failed output encoding faults the run. Scripts have no checkpoints or transactional rollback. See [Write a script](/en/docs/developers/automation/guides/write-script) for tested error messages and fixes.

## Triggers [#triggers]

| Limit                                              | Value                         |
| -------------------------------------------------- | ----------------------------- |
| Enabled triggers per owner                         | 100                           |
| Minimum every interval                             | 1 minute                      |
| cron precision                                     | 5 fields, one minute          |
| One-shot at window                                 | Now through one year from now |
| Default catchup window                             | 300 seconds                   |
| Future occurrences in a preview                    | Up to 5                       |
| Consecutive firing failures before pause           | 5                             |
| Consecutive firing failures before automatic pause | 5                             |
| Webhook body                                       | 1 MiB                         |
| webhook-id deduplication                           | 24 hours                      |
| Firing history                                     | 30 days                       |

{/* Sources: services/automation/TRIGGERS.md sections 2-3; services/automation/src/triggers/core.ts; webhook.ts:4. */}

## Find the right error [#find-the-right-error]

An HTTP error rejects the request. A `faulted` run records an execution error in `error`, even when retrieving that run returns HTTP 200. Keep the run ID and `X-Request-Id` when investigating.

* [Create-run errors](/en/docs/api/native/automation/createRun): input, target resolution, idempotency and quota failures.
* [Publication errors](/en/docs/api/native/automation/publishScriptVersion): stale drafts, version conflicts and invalid definitions.
* [Trigger errors](/en/docs/api/native/automation/createTrigger) and [schedule errors](/en/docs/api/native/automation/previewTriggerSchedule).
* [Webhook errors](/en/docs/api/native/automation/receiveWebhook): body size, input and unavailable URLs.
* [Authentication and common errors](/en/docs/api/errors).

For a concrete schedule failure, `INTERVAL_TOO_SHORT` reports `every must be at least one minute`; use `PT1M` or longer. Do not retry the unchanged invalid schedule.

[API reference →](/en/docs/api/native/automation) · [Cookbook →](/en/docs/cookbook)
