# Upstash QStash (slim) > Upstash QStash is a hosted HTTP message queue and scheduler. A caller publishes a request to its REST API, and QStash sends it to a public URL with retries, delays, cron schedules, FIFO queues and signed requests. - Full: https://www.anchorterminal.com/tools/upstash-qstash.md (~6,850 tokens) · this version ~1,780 tokens · JSON https://www.anchorterminal.com/tools/upstash-qstash.json · canonical https://www.anchorterminal.com/tools/upstash-qstash - Index: https://www.anchorterminal.com/llms.txt · API: https://www.anchorterminal.com/api/v1/index.json · Updated: 2026-10-08 **BB · 72.3/100 · rank #90 of 629 · #4 in Event delivery & webhooks · agent-ready · confidence medium** Assessment: A public OpenAPI 3.1 file covers 43 operations, and publishing has no per-second limit, deduplication IDs and a dead letter queue with replay. Each region has one full-access token and one read-only token, and the token may travel in the URL. The Markdown pricing page contradicts itself on whether retries are billed. ## Facts - Kind: HTTP API · vendor: Upstash · category: Event delivery & webhooks · legal entity: Upstash, Inc. · provenance 100/100 - Endpoint: `https://qstash.upstash.io/v2` (HTTP, Streamable HTTP) - Auth: OAuth or key · pricing: Freemium · x402: no · licence: Proprietary hosted service under Upstash's terms of service. The TypeScript and Python SDKs and the MCP server are MIT - Probe metrics: not measured yet (probes haven't run) - Surface graded: The QStash REST API at qstash.upstash.io/v2 (EU) and qstash-us-east-1.upstash.io/v2 (US), 43 operations. The hosted Upstash MCP server is a second route - Free tier: 1,000 messages a day, 1 MB messages, 7-day maximum delay, 10 schedules, 10 queues, 3-day logs and dead letter queue, no card per the pricing page - Delivery: At least once. 3 retries by default with delay min(86400, e^(2.5n)) seconds, a custom `Upstash-Retry-Delay` expression, and the destination's `Retry-After` honoured up to one day - Ordering: FIFO within a named queue, where the next message waits for the current one to finish or fail. Plain publishes are unordered - Deduplication: `Upstash-Deduplication-Id` or content-based, 10-minute window, 202 with the first message ID for a duplicate - Schedules: Cron expressions in UTC or a named timezone on POST /v2/schedules, with pause and resume. 10 active on Free, 1,000 on pay as you go, then $0.01 each - Signatures: HS256 JWT in `Upstash-Signature` with a SHA-256 body hash and a 5-minute lifetime. Current and next signing keys, rotated at POST /v2/keys/rotate - Failed messages: Dead letter queue with single and bulk retry and delete, kept 3 days on Free, 7 on pay as you go, 30 days or 3 months on fixed plans. Failure callbacks to a URL - Rate limits: None per second on publish, enqueue and batch. Management endpoints such as logs have a one-second burst limit reported in `Burst-RateLimit-*` headers, with no number published. Daily message caps by plan - Logs: GET /v2/logs with a cursor, up to 100 entries a call and filters for state, URL, queue, schedule, label and date. Kept 3 to 14 days by plan - MCP server: Hosted at mcp.upstash.com/mcp with OAuth or email plus API key. 10 QStash and Workflow tools with `?features=qstash_workflow`, 55 without. A read-only grant refuses every write. The stdio package `@upstash/mcp-server` also covers QStash - Regions: EU (eu-central-1) and US (us-east-1), independent, with a console migration tool for schedules, URL groups and queues - SLA: 99.99% monthly uptime with service credits, only with the Prod Pack add-on or an Enterprise plan - SDKs: TypeScript `@upstash/qstash` 2.12.0 (29 September 2026) and Python `qstash` 3.4.0 (18 March 2026), both MIT - Self-hosted: Not available. The service is closed source, and the local development server is for testing only - Prices: Pay as you go message $0. per message; Bandwidth over 50 GB a month $0.05 per GB of traffic; Fixed 1M plan $180 per month (plan); Fixed 10M plan $420 per month (plan) - Scores: Reliability 83, Performance pending, Schema & documentation 78, Agent ergonomics 83, Security & auth 61, Payments & pricing 40, Task success pending, Maintenance & community 77, Transparency & trust 81 · total over the 7 assessed categories - Why: Reliability, Graded on the hosted REST API. · Schema & documentation, Public OpenAPI 3.1 file with 43 operations (25). · Agent ergonomics, Graded as an API. · Security & auth, One full-access token and one read-only token per region, revoked by a reset, with two signing keys that rotate by API. · Payments & pricing, No x402, MPP or L402 (0). · Maintenance & community, `@upstash/qstash` 2.12.0 reached npm on 29 September 2026 (30). · Transparency & trust, Closed service with published terms. - Sources: 33, open questions: 8, both in the full twin - Capabilities: events.queue, events.schedule, events.webhooks-send, events.webhooks-receive - JSON: https://www.anchorterminal.com/api/v1/tools/upstash-qstash.json - Verify (for the vendor): the badge `https://www.anchorterminal.com/badges/upstash-qstash.svg` or a link to https://www.anchorterminal.com/tools/upstash-qstash from a page on upstash.com or one of its subdomains, or the README of github.com/upstash/qstash-js, then `POST https://www.anchorterminal.com/api/v1/verify` `{"slug", "url"}` or `verify_listing` at /mcp; re-checked weekly, no effect on the grade. Snippets in the full twin. ## Before you call it 1. Use the regional host that matches the token. `qstash.upstash.io` is the EU region, and US tokens work only on `qstash-us-east-1.upstash.io` 2. Send `Upstash-Deduplication-Id` on every publish so a retried request isn't queued twice. The window is 10 minutes 3. Budget for retries. Per the pricing FAQ each delivery attempt is billed as a message, so set `Upstash-Retries` deliberately 4. Give monitoring agents the read-only token, and set `Upstash-Redact-Fields` on publish, because that token still reads message bodies and headers 5. Make the destination idempotent on `Upstash-Message-Id`. Delivery is at least once, and duplicates can follow a server restart ## Connect ```bash npm install @upstash/qstash ``` ```bash curl -XPOST \ -H 'Authorization: Bearer ' \ -H "Content-type: application/json" \ -d '{ "hello": "world" }' \ 'https://qstash.upstash.io/v2/publish/https://' ``` ```bash claude mcp add --scope user --transport http upstash https://mcp.upstash.com/mcp ``` Full config and headless snippets are in the full page. Through letme (picks today, calling later): https://letme.dev/upstash-qstash ## Similar tools | Tool | Grade | Score | Shared capabilities | Slim | | --- | --- | --- | --- | --- | | Hookdeck | BB | 76.9 | events.webhooks-receive, events.queue, events.webhooks-send | https://www.anchorterminal.com/tools/hookdeck.min.md | | Ably | BB | 75 | events.webhooks-send, events.webhooks-receive, events.queue | https://www.anchorterminal.com/tools/ably.min.md | | Svix | BB | 74 | events.webhooks-send, events.webhooks-receive | https://www.anchorterminal.com/tools/svix.min.md | | Convoy | B | 62.2 | events.webhooks-send, events.webhooks-receive | https://www.anchorterminal.com/tools/convoy.min.md | ## Panel reviews (0, desk reviews from public material, no calls made)