# Scheduled tasks

The scheduler inside `pelty-server` queues 9 built-in tasks (`pelty_api::routes::automation::TASKS`). No system cron is needed. Admin → System & settings → Jobs shows the last run and next run of each, can disable a task, pin a daily task to a start hour (UTC) and run one now (`jobs.manage`).

| Task | Shown as | Interval |
|---|---|---|
| `billing.recurring` | Recurring invoices | every 1 day(s) |
| `billing.overdue` | Overdue reminders & suspensions | every 1 day(s) |
| `billing.autopay` | Automatic card payments | every 1 day(s) |
| `domains.daily` | Domain renewals & expiry | every 1 day(s) |
| `domains.process` | Domain registrations | every 5 min |
| `tickets.escalate` | Ticket escalations | every 5 min |
| `usage.bill` | Usage billing | every 1 hour(s) |
| `uploads.purge_orphans` | Orphan upload cleanup | every 1 hour(s) |
| `support.pipe` | Ticket mail piping | every 5 min |

## Other job kinds

Queued on demand (by an action or another task) rather than on a timer:

| Job kind | Shown as | Declared in |
|---|---|---|
| `backup.pg_dump` |  | `crates/pelty-api/src/backup.rs` |
| `currency.update_rates` |  | `crates/pelty-api/src/exchange_rates.rs` |
| `notify.deliver` |  | `crates/pelty-api/src/notify.rs` |
| `system.update_check` |  | `crates/pelty-api/src/updates.rs` |
| `plugin.webhook` | Plugin webhook delivery | `crates/pelty-api/src/plugin_hooks.rs` |
| `addon.job` |  | `crates/pelty-api/src/addon_power.rs` |
| `email.send` | Send email | `crates/pelty-api/src/mail.rs` |
| `campaign.send` | Email campaign batch | `crates/pelty-api/src/routes/campaigns.rs` |

