Overview
Upstash Workflow operates on top of QStash, which is available in two distinct regions: EU region and US region. Each region is completely independent with its own infrastructure, pricing, resources, and workflow runs.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 region maintains:- Separate pricing and billing: Usage in each region is tracked and billed independently
- Separate resources: Workflow runs, events, and configurations 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 workflow runs, 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 Workflow resources from one region to another using the Upstash Console:- Navigate to the Workflow 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
Workflow 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 workflow triggers are sent through the configured region
- Incoming workflow requests are verified using default signing keys
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 for the primary region
- Automatically handles region detection for incoming workflow requests
- Supports receiving workflow calls 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/workflow>= 1.1.0@upstash/qstash>= 2.9.0
Outgoing Requests (Triggering Workflows)
How the SDK Selects a Region
For outgoing requests (triggering workflows using the client), 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 workflow triggers are sent 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 workflow triggers are sent through the specified region
- Falls back to default credentials if region-specific ones are missing
Incoming Requests (Workflow Execution)
Understanding the Region Header
QStash includes anupstash-region header with every workflow request to indicate the source region:
How the SDK Verifies and Routes Incoming Requests
The Workflow SDK has a sophisticated routing mechanism for incoming requests: Single-Region Mode:- Uses default signing keys:
QSTASH_CURRENT_SIGNING_KEYandQSTASH_NEXT_SIGNING_KEY - All workflow context operations use the default client
- Ignores the
upstash-regionheader
upstash-region header:
- Checks the
upstash-regionheader from the incoming request - Uses the region-specific client based on the header value
- Falls back to the
QSTASH_REGIONif noupstash-regionheader is present