Upstash Documentation

Security

2 min read

Request Authorization#

When interacting with the QStash API, you will need an authorization token. To get your token, go to the QStash tab in the Console, pick a region, and copy the QSTASH_TOKEN from the Quickstart section.

Send this token along with every request made to QStash inside the Authorization header like this:

Request Signing (optional)#

Because your endpoint needs to be publicly available, we recommend you verify the authenticity of each incoming request.

The Upstash-Signature header#

With each request we are sending a JWT inside the Upstash-Signature header. You can learn more about them here.

An example token would be:

Header

Payload

The JWT is signed using HMAC SHA256 algorithm with your current signing key and includes the following claims:

Claims#

iss

The issuer field is always Upstash.

sub

The url of your endpoint, where this request is sent to.

For example when you are using a nextjs app on vercel, this would look something like https://my-app.vercel.app/api/endpoint

exp

A unix timestamp in seconds after which you should no longer accept this request. Our JWTs have a lifetime of 5 minutes by default.

iat

A unix timestamp in seconds when this JWT was created.

nbf

A unix timestamp in seconds before which you should not accept this request.

jti

A unique id for this token.

body

The body field is a base64 encoded sha256 hash of the request body. We use url encoding as specified in RFC 4648.

Verifying the signature#

See how to verify the signature.