Background jobs without the background noise.

Enqueue via API. Deliver via webhook. See everything. No Redis, no workers, no complexity.

terminal
# Enqueue a job
curl -X POST https://api.dispatchq.dev/v1/jobs \
  -H "Authorization: Bearer dq_live_..." \
  -d '{"url": "https://myapp.com/process", "payload": {"file": "data.csv"}}'

# Response
{"id": "job_7f3k9...", "status": "pending", "created_at": "2026-03-15T22:00:00Z"}

One API call to enqueue

POST a webhook URL, a payload, and an optional delay. DispatchQ handles delivery, retries, and stores the result. No queues to configure, no workers to deploy.

Results you can actually find

Every job's response is stored and retrievable. No callback endpoints to build, no base64 decoding, no log diving. Just GET /v1/jobs/:id.

Built for AI agents

MCP server included. Human approval for consequential actions. Your agent enqueues work, checks results later. The async backbone agents need.

How it works

Three steps. Five minutes. No infrastructure.

1 Enqueue a job

POST your job, get an ID back instantly

Send a target URL and payload. Optionally add a delay, dedup key, or require human approval. DispatchQ stores it and returns immediately.

curl -X POST https://api.dispatchq.dev/v1/jobs \
  -H "Authorization: Bearer dq_live_..." \
  -d '{"url": "https://myapp.com/process", "delay": "5m", "payload": {"file": "report.csv"}}'
2 Webhook delivered

DispatchQ POSTs to your endpoint with HMAC signature

Your webhook receives the payload with a cryptographic signature for verification. If it fails, DispatchQ retries with exponential backoff.

POST /process HTTP/1.1
X-DispatchQ-Signature: sha256=a1b2c3...
X-DispatchQ-Job-Id: job_7f3k9...

{"file": "report.csv"}
3 Check the result

Every response stored and retrievable

No callback endpoints to set up. GET the job and see the full response - status code, body, duration. Done when you're ready.

curl https://api.dispatchq.dev/v1/jobs/job_7f3k9

{"status": "completed", "response_code": 200, "response_body": {"rows": 15000}, "duration_ms": 4230}

Built for real workflows

From background processing to AI agents — DispatchQ handles async work so you don't have to.

Process uploads in the background

User uploads a file, your API enqueues a job to process it async. DispatchQ delivers the webhook, retries on failure, and stores the result. Check it whenever you're ready.

POST /v1/jobs
{
  "url": "https://myapp.com/transcode",
  "payload": { "video_id": "abc123" }
}

Schedule recurring reports

Set up a cron schedule to hit your reporting endpoint every morning. DispatchQ creates the job on schedule, delivers it reliably, and stores every result for you to query later.

POST /v1/schedules
{
  "url": "https://myapp.com/reports",
  "cron_expr": "0 9 * * *",
  "timezone": "America/Los_Angeles"
}

AI agent task execution

Your agent needs to call an API, wait for results, and decide what to do next. With the MCP server, agents enqueue work, require human approval for sensitive actions, and poll for results — all in natural conversation.

// MCP tool call from your agent
queue_job({
  url: "https://api.openai.com/v1/embeddings",
  payload: { input: "..." },
  requires_approval: true
})

Reliable third-party API calls

Call flaky external APIs with automatic retries and exponential backoff. Set max attempts, and DispatchQ handles the rest. Never miss a webhook delivery, even when the target is unreliable.

POST /v1/jobs
{
  "url": "https://flaky-api.com/webhook",
  "payload": { "user_id": 789 },
  "max_attempts": 5
}

Everything you need

A complete job queue in 10 endpoints. Nothing more, nothing less.

🔄

Retries & backoff

Exponential backoff from 20s to 1h. Configurable max attempts per job.

Cron schedules

Standard cron expressions with IANA timezones. Create, update, pause, delete.

Human approval

Pause jobs for sign-off before execution. Built for agents doing consequential work.

🔑

Deduplication

Dedupe keys prevent duplicate jobs. Idempotency headers for safe retries.

🤖

MCP server

9 tools for AI agents. Enqueue, check, approve, schedule - all via MCP.

🔐

HMAC signatures

Every webhook signed with SHA-256 HMAC. Verify requests are from DispatchQ.

Delayed jobs

Schedule delivery in 30s, 5m, 1h, or 1d. Simple string format, no cron needed.

📡

Callback URLs

Optionally get POSTed when a job completes. Simple JSON, not base64-encoded.

Why DispatchQ over QStash?

QStash is a good product. DispatchQ is simpler.

DispatchQ QStash
API complexity 1 endpoint: POST /v1/jobs Publish vs Enqueue vs Workflow
Results Stored, retrievable via GET Callbacks only (base64 encoded)
Pricing model Per job - pipeline = 1 job Per message - steps multiply cost
Human approval ✅ Built-in -
MCP server ✅ Included -
Dashboard Standalone, purpose-built Inside Upstash Console
Time to learn 5-minute quickstart 50+ pages of docs

Simple, predictable pricing

Per job, not per message. No surprise bills.

Free

$0 /mo

Perfect for prototypes & hobbies

Get started
  • 500 jobs/month
  • 3 cron schedules
  • 24-hour history
  • 1 API key
  • All core features
  • MCP server
Most popular

Pro

$29 /mo

For production apps & startups

Get started
  • 25,000 jobs/month
  • 50 cron schedules
  • 30-day history
  • 5 API keys
  • Email support
  • + $1 per 1,000 extra jobs

Team

$79 /mo

For growing teams & high volume

Get started
  • 100,000 jobs/month
  • Unlimited schedules
  • 90-day history
  • Unlimited API keys
  • 99.9% uptime SLA
  • Priority support
  • + $0.75 per 1,000 extra jobs

All plans include webhook delivery, stored results, retries, delayed jobs, deduplication, human approval, and MCP server.

Start dispatching in 5 minutes

Free tier. No credit card. Ship your first job today.

Get your API key