> ## Documentation Index
> Fetch the complete documentation index at: https://docs.agentruntime.io/llms.txt
> Use this file to discover all available pages before exploring further.

# External triggers and Run setup

> How cron and inbound webhooks start workflows — explicit start params, not saved default merge.

External systems start workflows **without** Workflow Studio. They use **explicit start params** on the trigger or request — the same shape as Manual Run.

## Current model (2026-06-28)

**Saved defaults (`run_setup_json`) pre-fill Studio forms only.** They are **not** merged at fire time.

At runtime the engine resolves:

1. **Canvas step config** (graph)
2. **Start params** sent with the command or stored on the trigger (`trigger_payload`, `trigger_steps`, `excluded_step_ids`)

```text theme={null}
Studio Cron tab  →  prefill from canvas + saved defaults (UI only)
Save schedule    →  store start params on workflow_triggers.config
Cron fire        →  engine uses trigger.config + graph only
```

See [Run setup](/workflows/run-setup) for Save defaults, Manual Run, and field overrides.

## ~~Legacy merge rule (deprecated)~~

~~External triggers previously used:~~

```text theme={null}
~~effective params = merge(saved run_setup_json, caller override)~~
```

~~Default: merge **on** unless `use_run_setup_defaults: false`.~~

**Deprecated 2026-06-28.** New schedules and integrations should send **full start params** explicitly. Existing deployments may still merge until migrated — contact [support](mailto:support@agentruntime.io) if you're unsure whether your integration is affected.

## Inbound webhooks

1. Sender POSTs to `/v1/inbound-webhooks/{subscription_id}` with HMAC + idempotency key.
2. BFF maps JSON body → `trigger_payload` and applies subscription `extras`.
3. Engine starts with **POST body + extras + graph** — ~~not merged from saved `run_setup_json`~~.

**Subscription `extras` (start params at fire time):**

```json theme={null}
{
  "trigger_payload": { "source": "shopify" },
  "trigger_steps": { "uuid-root": { "limit": 10 } },
  "excluded_step_ids": []
}
```

Studio pre-fills the Inbound editor from saved defaults; **fire time** uses what is stored on the subscription and in the POST body.

## Cron (`workflow_triggers`)

AgentRuntime runs the schedule and dispatches the trigger automatically. REST: `GET/POST/PATCH/DELETE /workflows/{id}/triggers`.

**Target schedule config** (same Start steps model as Manual):

```json theme={null}
{
  "cron": "0 9 * * *",
  "timezone": "UTC",
  "trigger_steps": {
    "uuid-mcp-root": { "limit": 30, "rss_feed_url": "https://hnrss.org/frontpage" }
  },
  "excluded_step_ids": ["uuid-agent-root"]
}
```

~~Legacy shape (do not use for new schedules):~~

```json theme={null}
{
  "use_run_setup_defaults": true,
  "body": { "topic": "weekly-digest" }
}
```

Studio Cron tab exposes schedule wiring and start inputs prefilled from workflow saved defaults.

## API / command start

Send complete start params — no reliance on saved defaults at runtime:

```json theme={null}
{
  "command": "start",
  "params": {
    "trigger_type": "api",
    "trigger_payload": { "topic": "api-only" },
    "trigger_steps": { "uuid-root": { "limit": 5 } },
    "excluded_step_ids": []
  }
}
```

## Related

* [Run setup](/workflows/run-setup)
* [Inbound webhooks](/integrations/inbound-webhooks)
* [API reference — workflows](/api/reference)
