Skip to main content
QStash is a serverless messaging and scheduling solution. It fits easily into your existing workflow and allows you to build reliable systems without managing infrastructure. Instead of calling an endpoint directly, QStash acts as a middleman between you and an API to guarantee delivery, perform automatic retries on failure, and more.
We have a new SDK called Upstash Workflow.Upstash Workflow SDK is QStash simplified for your complex applications
  • Skip the details of preparing a complex dependent endpoints.
  • Focus on the essential parts.
  • Enjoy automatic retries and delivery guarantees.
  • Avoid platform-specific timeouts.
Check out Upstash Workflow Getting Started for more.

Quick Start

Check out these Quick Start guides to get started with QStash in your application.

Next.js

Build a Next application that uses QStash to start a long-running job on your platform

Python

Build a Python application that uses QStash to schedule a daily job that clean up a database
Or continue reading to learn how to send your first message!

Send your first message

PrerequisiteYou need an Upstash account before publishing messages, create one here.

Public API

Make sure you have a publicly available HTTP API that you want to send your messages to. If you don’t, you can use something like requestcatcher.com, webhook.site or webhook-test.com to try it out. For example, you can use this URL to test your messages: https://firstqstashmessage.requestcatcher.com

Get your token

Go to the Upstash Console and copy the QSTASH_TOKEN.

Publish a message

A message can be any shape or form: json, xml, binary, anything, that can be transmitted in the http request body. We do not impose any restrictions other than a size limit of 1 MB (which can be customized at your request). In addition to the request body itself, you can also send HTTP headers. Learn more about this in the message publishing section.
curl -XPOST \
    -H 'Authorization: Bearer <QSTASH_TOKEN>' \
    -H "Content-type: application/json" \
    -d '{ "hello": "world" }' \
    'https://qstash.upstash.io/v2/publish/https://<your-api-url>'
Don’t worry, we have SDKs for different languages so you don’t have to make these requests manually.

Check Response

You should receive a response with a unique message ID.

Check Message Status

Head over to Upstash Console and go to the Logs tab where you can see your message activities.
Learn more about different states here.

Features and Use Cases

Background Jobs

Run long-running tasks in the background, without blocking your application

Schedules

Schedule messages to be delivered at a time in the future

Fan out

Publish messages to multiple endpoints, in parallel, using URL Groups

FIFO

Enqueue messages to be delivered one by one in the order they have enqueued.

Flow Control

Custom rate per second and parallelism limits to avoid overflowing your endpoint.

Callbacks

Get a response delivered to your API when a message is delivered

Retry Failed Jobs

Use a Dead Letter Queue to have full control over failed messages

Deduplication

Prevent duplicate messages from being delivered

LLM Integrations

Publish, enqueue, or batch chat completion requests using large language models with QStash features.