Overview
QStash is available in two regions: EU region and US region. Each region is completely independent with its own infrastructure, pricing, resources, logs, and messages.Regional URLs
- EU Region:
https://qstash-eu-central-1.upstash.io, orhttps://qstash.upstash.io - US Region:
https://qstash-us-east-1.upstash.io
Key Concepts
Separate Regions
Each QStash region maintains:- Separate pricing and billing: Usage in each region is tracked and billed independently
- Separate resources: Messages, queues, schedules, URL groups and DLQ are region-specific
- Separate credentials: Each region has its own API tokens and signing keys
Migration Between Regions
If you don’t have any active resources (active messages, schedules, url groups etc), you can simply update your environment variables with the new region to migrate. If you have active resources, you will need to migrate more gracefully, as described below. You can migrate your QStash resources from one region to another using the Upstash Console:- Navigate to the QStash tab on Upstash Console
- Click the Migrate button
- Follow the guided migration process

- Help you set up multi-region environment variables
- Copy and update your QStash resources (schedules, url groups, queues)
After migration, your app will be able to handle requests from both regions simultaneously to ensure a smooth transition.
Operating Modes
QStash SDK supports two modes of operation:Single-Region Mode (Default)
WhenQSTASH_REGION environment variable is not set, the SDK operates in single-region mode:
- Uses
QSTASH_TOKENandQSTASH_URL(or defaults to EU region) - All outgoing messages are sent through the configured region
- Incoming messages are verified using default signing keys if signing keys are defined
Multi-Region Mode
WhenQSTASH_REGION is set to US_EAST_1 or EU_CENTRAL_1, the SDK enables multi-region mode:
- Uses region-specific credentials (e.g.,
US_EAST_1_QSTASH_TOKEN) - Automatically handles region detection for incoming requests
- Supports receiving messages from multiple regions simultaneously
Multi-region mode relies on environment variables being available via
process.env. It won’t work on platforms where process.env is not available, such as Cloudflare Workers.SDK Requirements
Multi-region support requires:@upstash/qstash>= 2.9.0
Outgoing Messages
How the SDK Selects a Region
For outgoing messages (publishing messages, managing queues, schedules, etc.), the SDK determines which region to use based on theQSTASH_REGION environment variable:
Single-Region Mode (QSTASH_REGION not set):
- SDK reads
QSTASH_TOKENandQSTASH_URL - If
QSTASH_URLis not set, defaults to EU region - All messages are published through this region
QSTASH_REGION set):
- SDK reads the
QSTASH_REGIONvalue (e.g.,US_EAST_1) - Uses region-specific credentials:
{QSTASH_REGION}_QSTASH_TOKENand{QSTASH_REGION}_QSTASH_URL - All messages are published through the specified region
- Falls back to default credentials if region-specific ones are missing
Incoming Messages
Understanding the Region Header
QStash includes anupstash-region header with every request to indicate the source region:
How the SDK Verifies Incoming Requests
The SDK uses different approaches depending on the operating mode: Single-Region Mode:- Uses default signing keys:
QSTASH_CURRENT_SIGNING_KEYandQSTASH_NEXT_SIGNING_KEY - Ignores the
upstash-regionheader
- Checks the
upstash-regionheader from the incoming request - Normalizes the region name (e.g.,
US-EAST-1→US_EAST_1) - Looks for region-specific signing keys:
{REGION}_QSTASH_CURRENT_SIGNING_KEY - Falls back to default signing keys if region-specific ones are missing