Upstash QStash through Squiid
HTTP message queue with retries, delays and schedules for serverless. Upstash QStash is live on Squiid today.
What Upstash QStash is
QStash is a queue whose consumers are HTTP endpoints. You publish a message to QStash with a destination URL and it calls that URL for you, retrying with backoff on failure, delaying delivery, fanning out to multiple endpoints, running on a cron schedule, and parking anything that keeps failing in a dead letter queue. Messages are signed so your endpoint can verify they came from QStash, and there is a flow control option to cap how fast a destination is hit. Callbacks report the result back to another endpoint, so a long job can notify your app when it finishes without your process waiting on it.
This solves a specific problem in serverless apps built by agents: the work is longer than the request. Sending a welcome email sequence, generating a report, calling a slow model, processing an upload, or retrying a webhook that failed all need to happen after the response is returned, and a serverless function has nowhere to put them. QStash lets a route publish a job and return immediately, with delivery and retries handled outside your process. Retry counts and backoff are configured per message, which means a flaky third-party webhook does not need custom retry code in your app.
Why connect it through Squiid
Squiid provisions QStash alongside your other Upstash resources and holds the token and signing keys. Publishing goes to https://api.squiid.io/v1/upstash-qstash/... with Authorization: Bearer $SQUIID_API_KEY, and the QStash SDK works by pointing its base URL at the gateway (gateway convention). Messages are metered against prepaid credits at Upstash's list price and appear on the same invoice as the rest of your stack, so a scheduled job that starts firing every minute is visible next to the model spend it triggers.
- One account, one key, one bill, one dashboard. Upstash QStash sits beside every other service your project uses, on the same invoice and the same credit balance.
- Key custody. Squiid holds the Upstash QStash credentials. Your code carries
SQUIID_API_KEY, so QSTASH_TOKEN, QSTASH_URL, QSTASH_CURRENT_SIGNING_KEY, QSTASH_NEXT_SIGNING_KEY never land in a repository, a preview deployment or an agent’s context. - Metering you can see. Every call is counted per service and per day, so you know what Upstash QStash costs before the month ends.
- Pause on zero. When prepaid credits run out the gateway stops authorizing usage instead of running up a bill you did not fund.
- One rotation. Rotating the Squiid key cuts off every agent, worker and deployment at once, with no provider key to hunt down.
What you get
- HTTP queue with retries and exponential backoff
- Delays, cron schedules and fan-out to multiple URLs
- Dead letter queue for repeated failures
- Signed messages your endpoint can verify
- Per-message pricing at Upstash list rates
How to connect Upstash QStash
One variable replaces the provider credentials this service would normally need. Requests go to the gateway and the official SDKs work by pointing their base URL at it (gateway convention).
# .env
# replaces QSTASH_TOKEN, QSTASH_URL, QSTASH_CURRENT_SIGNING_KEY, QSTASH_NEXT_SIGNING_KEY
SQUIID_API_KEY=sq_live_xxxxxxxxxxxxxxxxxxxxxxxx
# every request: https://api.squiid.io/v1/upstash-qstash/...
# header: Authorization: Bearer $SQUIID_API_KEY
Add it in your dashboard
Open the Squiid catalog, add Upstash QStash and fund credits. Squiid provisions the project and keeps the provider keys.
Put the one key in your env
Add SQUIID_API_KEY to .env and delete QSTASH_TOKEN, QSTASH_URL, QSTASH_CURRENT_SIGNING_KEY, QSTASH_NEXT_SIGNING_KEY. Nothing else from Upstash QStash needs to exist in your project.
Point your agent at it
Claude Code, Cursor and Codex read the same variable and call https://api.squiid.io/v1/upstash-qstash/. Agents publish to QStash from an API route so slow model calls and email sends finish after the HTTP response has already returned.
Pricing through Squiid
Upstash charges per message published and delivered, with pay-as-you-go pricing, at the provider's listed price. Squiid passes that through at par: one dollar of prepaid credit is one dollar of Upstash QStash usage, with no markup and no per-request margin.
Upstash QStash is used on the pay as you go basis, so there is no fixed monthly plan cost to pass through. You pay for what you use at the provider’s listed price.
Squiid adds no markup to provider prices. There is a free plan at $0 a month with a 15% fee when you top up credits, Solo at $19.97 a month with a top-up fee that starts at 8% and falls to 3.5% as your spend grows, Team from $29.97 a seat a month with the same ladder one point lower, and Custom with a rate of 3% or less. Credits are prepaid, so Upstash QStash usage stops when the balance reaches zero rather than producing an invoice you did not fund. Auto top-up with a cap keeps production running without handing anyone an open-ended card.
If you leave
Export: queues, topics and schedules are re-created in your own Upstash account from the documented configuration. Squiid never owns your code, your schema or your domain, and the gateway speaks Upstash QStash's own API, so the client change is a base URL. The handover page lists what happens for every provider in the catalogue.
Works with every coding agent
Upstash QStash through Squiid is just an HTTP call with a bearer token, so every agentic coding tool can use it with the single key already in your environment:
- Claude Code
- Cursor
- ChatGPT
- Codex
- Grok
- Gemini CLI
- GitHub Copilot
- Windsurf
- Perplexity
- Devin
- Replit
- v0
- Lovable
- Cline
Vibe coding a feature on Upstash QStash usually means asking for it in plain language and letting the agent write the integration. Because the key is Squiid’s rather than the provider’s, it can do that without ever holding a credential that could be leaked, logged or committed.
Related services
Upstash Redis
DatabasesServerless Redis over HTTP, priced per request with no idle cost
LiveProvisioned INInngest
Observability and workflowsDurable functions with steps, retries and flow control for AI workflows
Next upProvisioned TDTrigger.dev
Observability and workflowsLong-running background jobs in TypeScript with no timeouts
RoadmapProvisionedVercel
HostingFrontend hosting with git-based deploys and preview URLs per branch
Next upProvisionedResend
EmailTransactional email for developers, with React Email templates
LiveInstantQuestions people ask
Why do I need a queue in a serverless app?
Because a serverless function has to return quickly. QStash holds the job and calls your endpoint later, with retries if it fails.
Can QStash replace a cron server?
Yes. Schedules call your URL on a cron expression, which covers most nightly and hourly jobs without a machine to maintain.
Does signature verification still work through Squiid?
Yes. Signing keys are provisioned with the service and your endpoint verifies messages as documented.
How is QStash billed through Squiid?
Per message at Upstash's listed price, drawn from prepaid credits, on the same invoice as everything else.
QStash or Inngest?
QStash is a simple HTTP queue and scheduler. Inngest adds durable multi-step workflows and state. Both are in the Squiid catalog on one key.
Connect Upstash QStash with one key.
QStash is a serverless message queue that delivers HTTP requests with retries, delays, schedules and dead letter handling, without a worker process to run. Provisioned by Squiid.