Quick start
Get an API token, send a one-off request, schedule a recurring one and check the results. You need an endpoint Delay can reach from the internet: replace the https://api.yourapp.com/... URLs below with your own.
Create an account
Sign up at app.delay.run/register. Delay creates a personal team named after you (for example “Ada’s Team”) and selects it. Everything you create belongs to a team, and you can add teams or invite people later: see teams and roles.
Get your API token
Open Settings > API token. It is also in the account menu (your avatar, top right) as API token. Delay creates your token the first time you open this page, so there is nothing to generate: click Copy token, or Show token to see it. You can come back and copy it again at any time. The Jobs and Cron jobs pages show the same token as “API key”. If it leaks, click Regenerate token on the same page: the old token stops working immediately.
Save it in your shell for the commands below:
export DELAY_TOKEN="paste-your-token-here"Send your first job
A job is one HTTP request. This one runs right away:
curl -X POST https://app.delay.run/api/jobs \ -H "Authorization: Bearer $DELAY_TOKEN" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "queue": "emails", "url": "https://api.yourapp.com/emails/welcome", "payload": {"user_id": 4821} }'Delay replies with 201 Created:
{ "success": true, "queue_id": "01a14e58-e96c-7a4c-9123-b1612dd272d1", "job_id": "01a14e58-e987-71c1-b714-9d439536b321", "scheduled_at": "2026-10-18T09:30:12+00:00", "message": "Scheduled successfully"}What happened:
- Jobs use
POSTunless you setmethod, andpayloadis sent as the JSON body. - The
emailsqueue didn’t exist, so Delay created it with default settings, including retries. You change queue settings in the dashboard. scheduled_atis the earliest time the job runs. Add"delay": 900to run it 15 minutes later (the maximum is 86400, which is 24 hours).
Keep the Accept: application/json header: without it, a validation error comes back as a redirect instead of a JSON error.
Create your first cron
A cron sends the same request on a schedule. This one checks /health every 5 minutes:
curl -X POST https://app.delay.run/api/crons \ -H "Authorization: Bearer $DELAY_TOKEN" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "name": "Health check", "url": "https://api.yourapp.com/health", "cron_expression": "*/5 * * * *" }'Delay replies with 201 Created:
{ "id": "01a14e5a-4265-7dae-aeb9-75729fae923d", "name": "Health check", "cron_expression": "*/5 * * * *", "next_run_at": "2026-10-18T09:35:00+00:00", "is_active": true}Crons use GET unless you set method. The cron is active straight away and first runs at next_run_at, the next time that matches the expression. Schedules are always in UTC.
To do the same in the dashboard:
- Go to Cron jobs and click New cron job.
- Fill in Cron job name and URL, then pick a schedule from Quick presets… or type a Cron expression.
- Click Create cron job.
See the run
- Jobs: open the Jobs tab. The list refreshes itself while jobs are pending or processing. The row shows the status, HTTP code and duration. Click the eye icon to open the job: Request shows what Delay sent and Response shows the status code, headers and body.
- Crons: open the Cron jobs tab and click your cron. Recent executions lists the last 10 runs, and View all opens the full Execution history, where each row expands to show the request and response. To test without waiting, click Run now (it counts toward your monthly requests like any other run).
A run succeeds when your endpoint returns a 2xx status. Delay doesn’t follow redirects, so a 301 or 302 counts as a failure. When a run fails, debug a failed run explains where to look.
Turn on alerts
- Cron alerts are off until you set them. Open the cron, click Edit, set Failure alerting to After 2 consecutive failures and click Update cron job. For crons you create with the API, pass
"alert_threshold": 2(1, 2 or 3). - Queue alerts are on by default. You get a warning when a job’s first attempt fails and a failure alert when it runs out of retries. These are emailed to every team member.
- Choose where alerts go. Open Settings > Notifications and pick a Notification channel: Email, Slack or Discord. For Slack or Discord, paste the Webhook URL, click Save Preferences, then Send Test Notification.
Only team admins can change the channel. You are an admin of your personal team. Channel setup, thresholds and maintenance windows are covered in set up alerts.
Next steps
- Examples: copy-paste recipes for health checks, backups, reminders and callbacks.
- Verify requests from Delay: sign requests so your endpoints can reject anything that didn’t come from Delay.
- API overview: headers, error responses and the rate limit.
- Cron schedules: the syntax Delay accepts, UTC and timing.