Adding a job
A job is a name, a path in your app, a schedule, and a timezone. The screen shows the exact URL it will call (your environment’s base URL plus the path) before you save. Schedules come as presets (every 10 minutes, hourly, daily) or a custom cron expression. Each job can be paused and resumed without deleting it, and the list shows when it last ran and how that run ended.How your handler is called
Meridian sends aPOST to the job’s path. Two things prove the request came from Meridian:
- An OIDC token issued for your environment’s invoker service account, audienced to your app’s base URL. This is the primary proof of origin, and it is what Cloud Run checks.
- An
X-Meridian-Cron-Secretheader, whose value matches theCRON_SECRETenvironment variable injected into your app. Compare the two in your handler if you want a check inside your own code.
CRON_SECRET is stored in Secret Manager and injected at deploy time. You never set it yourself, and its value is never shown back to you.
Write the handler to be idempotent. A schedule can fire while a previous run is still going, and a retried delivery is a normal thing to receive.
Job limits
The number of scheduler jobs is a plan limit, counted per app and raised by the scheduler pack. When you are at the limit, adding a job is refused with the limit and your current usage. Delete a job or add capacity from Billing.Scheduler can only be enabled once your production environment exists, and jobs call the environment’s own URL, so a job added before your first successful deployment will call an app that isn’t serving yet.