Template variables
Inject {{variables}} into job URLs, headers, and body — resolved server-side at run time, never stored in git.
Template variables let you embed dynamic values into a job’s URL, request headers, or request body using {{double_braces}} syntax. The variable is resolved server-side at run time — the raw value is never written to your manifest, never committed to git, and never visible in the CLI diff output.
Syntax
Wrap the variable name in {{ }}:
jobs:
- id: notify-slack
kind: http
method: POST
url: https://hooks.slack.com/services/{{slack_path}}
headers:
Authorization: "Bearer {{api_token}}"
body: '{"event": "nightly-backup-complete"}'
- id: stripe-reconcile
kind: http
method: POST
url: https://api.example.com/finance/reconcile
headers:
Authorization: "Bearer {{stripe_secret_key}}"
schedule: "0 6 * * *"
timezone: Europe/Berlin
Variable names must start with a letter and may contain letters, digits, and underscores (a–z, A–Z, 0–9, _).
Where variables can be used
| Job field | Supported |
|---|---|
url | ✓ |
| Header values | ✓ |
body | ✓ |
schedule | ✗ |
id / name | ✗ |
method | ✗ |
Defining variable values
Variable values are stored in the account-level variable store, accessible in the dashboard under Settings → Variables. Values are encrypted at rest and never returned in plain text by the API.
- Open Settings → Variables in the dashboard.
- Click Add variable.
- Enter the name (must match the
{{name}}used in your manifest exactly) and the secret value. - Save — the variable is immediately available to all jobs.
Template variables vs. ${ENV} placeholders
The YAML manifest supports two injection mechanisms that serve different purposes:
{{template}} | ${ENV} | |
|---|---|---|
| Resolved | Server-side at run time | CLI-side at apply time |
| Stored in manifest | Name only | Literal value after substitution |
| Visible in CLI diff | Name only | Resolved value |
| Use case | Third-party tokens the server holds | CI environment identifiers, build refs |
Use {{template}} when the value is a long-lived secret that should never appear in your shell history, CI logs, or git history. Use ${ENV} for values your CI environment already manages, such as deployment tags or environment names.
Heartbeat jobs
Template variables are not supported in heartbeat job fields — heartbeat jobs have no URL or body fields managed by SteadyCron. The ping URL assigned to a heartbeat check is stable and immutable.
Related
- Manifest reference — full list of job fields and their accepted values.
- YAML & CLI — how
validate,plan, andapplyhandle variable names in diffs.