# Schedule

> Run a flow on a recurring schedule.

- ID: `cron_schedule`
- Type: Event trigger
- Category: [Scheduling](https://inventor.bot/docs/reference/triggers/scheduling.md)

**Options**

| Name | Required | Description | Value |
| --- | --- | --- | --- |
| `cron_config` | yes | Choose when this flow should run. | JSON text, format below |

**`cron_config` format**: JSON text of type `CronScheduleConfig`. Fields marked `?` are optional.

```ts
type CronScheduleConfig = {
	timezone: string // IANA timezone, e.g. America/New_York
	frequency: string // "hourly", "daily" or "monthly"
	minute_mode?: string // hourly: "every" (default) or "specific"
	minute_interval?: number // hourly every: 5-59
	minutes?: number[] // 0-59; hourly specific: at least 5 apart; daily and monthly: the first is used
	hours?: number[] // daily and monthly: 0-23
	weekdays?: number[] // daily: 0-6 (Sunday is 0), default every day
	month_days?: number[] // monthly: 1-31
	months?: number[] // monthly: 1-12, default every month
}
```

**Outputs**

| Name | Description | Value |
| --- | --- | --- |
| `timezone` | The IANA timezone this schedule runs in. | e.g. `"America/Los_Angeles"` |
| `frequency` | The configured schedule frequency. | e.g. `"daily"` |
| `summary` | A human-readable summary of the schedule. | e.g. `"Every week on Monday at 09:00"` |
| `scheduled_for` | The UTC time this run was scheduled for. | e.g. `"2026-03-29T17:00:00Z"` |
| `scheduled_for_unix` | The Unix timestamp this run was scheduled for. | e.g. `"1774803600"` |
| `scheduled_for_local` | The scheduled local time in the selected timezone. | e.g. `"2026-03-29T10:00:00-07:00"` |
| `scheduled_for_local_unix` | The scheduled local time as a Unix timestamp. | e.g. `"1774803600"` |
| `triggered_at` | The UTC time the scheduler dispatched this run. | e.g. `"2026-03-29T17:00:01Z"` |
| `triggered_at_unix` | The Unix timestamp when the scheduler dispatched this run. | e.g. `"1774803601"` |

**Example**

```go
var trigger = cron_schedule(Args{cron_config: `...`})

func main() {
	send_text_message(Args{channel_id: "CHANNEL_ID", message_content: "Timezone: " + trigger.timezone})
}
```