Skip to content

Send a one-off or delayed request

A job sends one HTTP request, now or up to 24 hours later, using the timeout and retries of its queue. Use it for work that something in your app triggers: a welcome email after signup, a reminder tomorrow, a webhook to a partner.

Create a job in the dashboard

  1. Go to Jobs and click Create job.
  2. Under Queue, pick a queue. To make a new one, choose + Create new queue and fill in Queue name. A new queue gets the default settings. Paused queues aren’t listed.
  3. Pick the Method (POST by default) and enter the Target URL.
  4. Fill in the optional fields you need:
    • Headers (optional): click Add for each header.
    • Delay (seconds): 0 to 86,400. Leave it at 0 to run the job now.
    • Payload (optional): the body, as valid JSON.
    • Callback URL (optional): Delay POSTs the result here when the job ends (callbacks).
  5. Click Create Job.

The job appears in the list as Pending and runs at its scheduled time. There’s no bulk create: each job takes one dialog or one API call.

Create a job with the API

Terminal window
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/send-welcome", "payload": {"user_id": 42}, "delay": 900}'

This runs the request 15 minutes from now. Every field, the response, the errors and examples in PHP, Node.js and Python: POST /api/jobs. The Schedule job API card at the top of the Jobs page shows your endpoint and API key.

Follow a job

The Jobs list has the tabs All, Pending, Processing, Retrying, Completed and Failed, a queue filter (All queues) and a Search URL box. It refreshes every 10 seconds while any job is pending or processing.

Each row shows the status, HTTP code, failure reason, attempt dots (for example 2/4), queue, URL and timing. Click the eye icon to open the job’s page with the request, the response and any error. Duration and failure reason appear only on the list row. To work out why a job failed, see Debug a failed run.

Run a pending job now

Click Fire now: the play icon on the row (confirm with Fire) or the button on the job’s page. It only works on pending jobs.

Cancel a pending job

There’s no Cancel button. Delete the job instead: click the trash icon on the row and confirm with Delete, or click Delete on the job’s page. A deleted job is never sent. Deleting can’t be undone.

Act on many jobs at once

Tick the checkboxes and use the bar at the bottom of the page: Fire (N), Retry (N) or Delete (N). Or use the buttons on a tab:

TabButtonWhat it does
PendingFire all pendingRuns every pending job now.
FailedRetry all failedCreates a new job (attempt 1, runs now) for every failed job.
FailedDelete all failedDeletes every failed job.

Retry copies the URL, method, headers, payload and callback URL into a new job with a new id, and leaves the failed job as it is. Fire only acts on pending jobs, and Retry only on failed ones.

Next steps