Creating a Queue
This guide walks you through creating a queue — a named container for one-off HTTP jobs with shared retry, timeout, and assertion settings.
When to use queues vs. crons
| Use a cron when… | Use a queue when… |
|---|---|
| You need recurring execution on a schedule | You need to fire a one-off HTTP request |
| The schedule is the same every time | The timing depends on an event in your app |
| Examples: health checks, nightly syncs, hourly reports | Examples: webhook delivery, delayed emails, post-signup tasks |
Via the dashboard
- Navigate to Queues in the sidebar
- Click New Queue
- Fill in the form:
- Name: A descriptive name (e.g., “webhooks”, “notifications”, “email-delivery”)
- Optionally configure:
- Timeout: HTTP request timeout in seconds (1-300, default: 30)
- Retries Enabled: Whether to retry failed jobs (default: on)
- Retry Delays: Array of wait times in seconds between retries (default: 60, 1800, 10800)
- Success Assertions: Response conditions all jobs must satisfy
- Alerts Enabled: Whether to send notifications on failures
- Max Parallelism: Limit concurrent processing (leave empty for unlimited)
- DLQ Retention: Days to keep dead-lettered jobs (3, 7, 14, or 30)
- Click Create
Via the API (auto-creation)
Queues are created automatically when you push a job with a new queue name:
curl -X POST https://app.recurohq.com/api/jobs \ -H "Authorization: Bearer YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "queue": "webhooks", "url": "https://partner.example.com/webhook", "method": "POST", "payload": { "event": "order.completed" } }'If the queue webhooks does not exist, it is created with default settings. You can then customize it from the dashboard.
Configuring retries
The default retry delays are [60, 1800, 10800] — 1 minute, 30 minutes, 3 hours. To customize:
- Go to Queues > [queue] > Edit
- Enable Retries
- Set the retry delays — each value is the number of seconds to wait before the next attempt
- Save
The number of retry attempts equals the number of delay values. For example, [30, 300, 3600] means 3 retries: after 30 seconds, after 5 minutes, and after 1 hour.
You can configure up to 10 retry delays, with each value between 1 and 86,400 seconds (24 hours).
Configuring parallelism
If your target endpoint is rate-limited, set Max Parallelism to prevent overwhelming it:
- Go to Queues > [queue] > Edit
- Set Max Parallelism (e.g., 5 for an endpoint that allows 5 concurrent requests)
- Save
When the limit is reached, additional ready jobs wait until a processing slot opens.
Configuring success assertions
Assertions apply to every job in the queue. To add them:
- Go to Queues > [queue] > Edit
- Click Add Assertion
- Choose a type and enter a value:
| Type | Example | Effect |
|---|---|---|
status_code_equals | 200 | Job fails if your endpoint returns anything other than 200 |
body_contains | "success" | Job fails if the response body does not contain “success” |
response_time_under_ms | 3000 | Job fails if the endpoint takes more than 3 seconds |
See Cron Schedules > Success assertions for all assertion types.
Viewing queue details
Navigate to Queues > [queue] to see:
- Queue configuration — Timeout, retry delays, parallelism, DLQ retention, assertions
- Job stats — Total jobs, completed, failed, pending, dead-lettered
- Response time stats — Average and percentile response times
Filtering queues
On the Queues page, use the controls to filter:
- Status filter — All, Active, or Inactive
- Search — Find queues by name
Editing a queue
Navigate to Queues > [queue] > Edit to change any setting. Changes apply to new jobs — jobs already in-flight continue with their original settings.
Pausing a queue
Set Active to off on the edit page, or toggle it from the queue list. Paused queues stop processing new jobs but jobs already in-flight complete normally.
Deleting a queue
Navigate to Queues > [queue] and click Delete. This permanently removes the queue and all its jobs.
Next steps
- Creating a Job — Push jobs to your queue
- Queues — Full concept reference
- Structuring Queues and Jobs — Naming conventions and organization