What you can build
with jobqueue

One HTTP POST enqueues a job in any language. These are the most common patterns developers use it for.

Queue in action

enqueue processed
processed: 0 retried: 0
source code
carsontkempf/jobqueue
Full Go source — API server, River worker, Lambda handler, Caddy config, and deploy scripts.
View on GitHub
open source equivalent
riverqueue/river
The Go-native, Postgres-backed job queue engine this system is built on. Self-host the full stack yourself.
riverqueue/river
01
Welcome emails on signup
Any language · Any email provider

Your signup endpoint returns a 200 immediately. Sending an email in-process blocks the response and risks timing out. Instead, enqueue an email job and let jobqueue deliver the callback to your email worker.

fire and forget auto-retry on failure any email provider
Enqueue from your signup handler
curl -X POST https://api.jobqueue.app/v1/jobs \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "queue": "emails",
    "callback_url": "https://yourapp.com/workers/send-welcome",
    "payload": { "email": "user@example.com", "name": "Ada" }
  }'
User signs up
→
POST /v1/jobs
→
Your signup returns 200
jobqueue fires callback
→
Your worker sends email
→
Retried if it fails
02
Webhook delivery to customers
SaaS products · Event-driven APIs

If your product sends webhooks to customer URLs, you need reliable delivery with retries — customer servers go down, return 500s, time out. Enqueue each delivery as a job. jobqueue handles exponential backoff and stores delivery history so you can see what was delivered and when.

exponential backoff delivery history per-customer queues
Enqueue webhook delivery (one job per customer endpoint)
curl -X POST https://api.jobqueue.app/v1/jobs \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "queue": "webhooks-customer-7",
    "callback_url": "https://yourapp.com/workers/deliver-webhook",
    "payload": {
      "destination": "https://customer.com/hooks",
      "event": "payment.completed",
      "data": { "amount": 4200 }
    }
  }'

Your callback worker POSTs to the customer URL and returns 200. If the customer's server times out, jobqueue retries automatically.

03
Nightly reports and scheduled jobs
Analytics products · Internal tools

Schedule jobs to run at a specific time — daily digests, billing summaries, data exports. No cron daemon to manage, no missed runs when your server restarts. Enqueue with a run_at timestamp and jobqueue fires the callback at that time.

scheduled execution no cron infrastructure 90-day history
Schedule a report for tomorrow at 08:00 UTC
curl -X POST https://api.jobqueue.app/v1/jobs \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "queue": "reports",
    "callback_url": "https://yourapp.com/workers/daily-report",
    "run_at": "2026-08-15T08:00:00Z",
    "payload": { "report_type": "daily-digest", "org_id": "org_123" }
  }'

For recurring daily runs, re-enqueue the next job from your callback handler after each run completes.

04
Background file and image processing
Media apps · Document tools · Data pipelines

User uploads a file. Processing it — resizing, transcoding, parsing, indexing — takes seconds or minutes. Do it in the background. Enqueue a job with the file reference, let your worker process it, and update your database when done.

long-running tasks decoupled upload / process any storage provider
After upload, enqueue processing job
curl -X POST https://api.jobqueue.app/v1/jobs \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "queue": "media-processing",
    "callback_url": "https://yourapp.com/workers/process-image",
    "payload": {
      "file_key": "uploads/user-42/avatar-raw.png",
      "sizes": [64, 128, 512]
    }
  }'
Upload completes
→
Enqueue job
→
Return 200 to user
Worker resizes image
→
Saves to storage
→
Updates DB & returns 200
05
Async payment event processing
E-commerce · SaaS billing · Marketplaces

Stripe webhooks must return 200 within 30 seconds or Stripe retries — sometimes triggering duplicate processing. The safe pattern: your webhook endpoint acknowledges immediately, then enqueues the real processing work. Your worker handles provisioning, activation, emailing, and ledger updates without racing against Stripe's timeout.

idempotent processing no duplicate side-effects payment-critical reliability
From your Stripe webhook endpoint
curl -X POST https://api.jobqueue.app/v1/jobs \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "queue": "billing",
    "callback_url": "https://yourapp.com/workers/handle-payment",
    "payload": {
      "event_type": "invoice.paid",
      "stripe_event_id": "evt_1abc...",
      "customer_id": "cus_xyz"
    }
  }'

Your Stripe endpoint returns 200 in milliseconds. Your worker has as long as it needs to provision access, update your database, and send receipts.

Get your API key

Any language. No SDK to install. Start in 60 seconds.