# Choose a trigger

> Decide what starts your workflow — a schedule, an incoming webhook, or nothing at all — and configure it.

A trigger is the reason a run exists. Every workflow that is not a subflow
needs at least one before it can be activated, and every run records which
trigger started it.

Triggers are created through the wizard that opens with a new workflow, never
from the step palette. To change one later, select the trigger node on the
canvas and edit it in the inspector.

## Outcome

Your workflow has the trigger that matches how its data actually arrives, and
you know what that trigger needs before it will work.

## Which one do I want?

| Choose | When | What it needs first |
|---|---|---|
| **Scheduled** | You go and fetch data on a rhythm — every 15 minutes, nightly, on the first of the month. | Nothing. |
| **Webhook** | Another system pushes data to you as it happens. | A service account holding the `webhooks` scope. |
| **No trigger (subflow)** | This workflow is a reusable piece other workflows call. | Nothing. It is invoked, not triggered. |

If you need to prepare a service account or connector first, see
[What you need before you build](/help/credentials-connections/prerequisites).

## Scheduled triggers

Pick **Scheduled** in the wizard. Step 2 offers three tabs.

**Interval** is three boxes — **Hours**, **Minutes**, **Seconds** — under
**Run every**. The minimum is one minute; anything shorter is refused with
*Interval must be at least 1 minute.* For sub-minute frequency, use a webhook
trigger and let the sender set the pace.

**Cron expression** takes the five-field form, `minute hour day month dow`. The
next fire time is shown beneath the box as you type, in your profile timezone,
so a typo is visible before you commit. An expression that does not parse shows
`invalid` and is refused.

**Builder** composes the same expression from plain choices: **Frequency**
(hourly, daily, weekly, monthly), the **Hour** and **Minute** to run at, and
days of the week or day of the month where those apply.

Afterwards, the trigger inspector shows the schedule in plain language with an
**Edit schedule** button.

Deactivating the workflow cancels its scheduled jobs. Reactivating recreates
them.

There is no **Run now**. A run exists because a trigger fired, which is what
lets the run history stand as a record of what actually happened.

## Webhook triggers

Pick **Webhook** in the wizard. Step 2 asks for a **Service account**, and it
is mandatory — Hodoflow does not accept unauthenticated ingestion. Only active
service accounts holding the `webhooks` scope are listed.

If the list is empty, the wizard says so and links you to create one in a new
tab; come back and reopen the wizard afterwards.

Getting the URL, calling it, redeliveries, rate limits, and sender
verification are all covered in [Receive
webhooks](/help/workflows/webhook-triggers).

## Subflows

Pick **No trigger (subflow)** for a workflow that exists to be called by
others. It has no trigger, so it is exempt from the trigger requirement at
activation, and it is invoked by a **Subflow** step in another workflow rather
than by anything external.

A subflow still has to be activated before another workflow can use it: only
active subflows appear in a Subflow step's list, and activating a workflow
re-checks every subflow it runs. Once an active workflow runs it, it stays
put — deactivating it is refused until those workflows are deactivated, and no
version of it can be deleted while any workflow still points at it. Publishing
a new version and activating that swaps it into every workflow that runs it,
with no step to repoint.

## Common problems

**The wizard will not let me finish a webhook trigger.** There is no active
service account with the `webhooks` scope. Create one at **Settings → Service
Accounts**, then reopen the wizard — see [Service
accounts](/help/credentials-connections/service-accounts).

**My interval was rejected.** Intervals below one minute are refused. Set at
least `0` hours, `1` minute, `0` seconds.

**My cron expression shows `invalid`.** Hodoflow expects five fields, not six —
`*/5 * * * *`, not `*/5 * * * * *`.

**Nothing fires after I saved.** Saving is not activating. See [Save, version,
and activate](/help/workflows/save-version-activate).

## Next step

[Add and connect steps](/help/workflows/add-and-connect-steps), or [Receive
webhooks](/help/workflows/webhook-triggers) if you picked a webhook.
