# Upstash Workflow Pricing

> **Source:** https://upstash.com/pricing/workflow
> **Format:** text/markdown — machine-readable pricing for agents and LLMs
> **Contact:** sales@upstash.com (Enterprise) · support@upstash.com (Support)

Upstash Workflow enables durable, serverless workflow execution built on top of QStash.
A **step** is a single call from the QStash server to the Workflow URL or an external URL.
Retries count as extra steps. Parallel steps count as two steps.

---

## Plan Overview

| Plan | Price | Steps/Day | Max Message Size | Max Parallelism |
|------|-------|-----------|-----------------|-----------------|
| Free | $0/month | 1,000 | 1 MB | 10 |
| Pay as You Go | $1 per 100K steps | Unlimited | 10 MB | 100 |
| Fixed 1M | $180/month | 1M | 50 MB | 200 |
| Fixed 10M | $420/month | 10M | 50 MB | 1000 |
| Enterprise | Custom | Unlimited | Custom | Custom |

---

## Fixed Plans

| Tier | Monthly | Steps/Day | Bandwidth | DLQ Retention | Max HTTP Duration |
|------|---------|-----------|-----------|---------------|-----------------|
| Fixed 1M | $180/month | 1M | 1 TB | 30 days | 6 hours |
| Fixed 10M | $420/month | 10M | 5 TB | 3 months | 12 hours |

---

## Pay as You Go — Pricing Details

- **Step price:** $1 per 100K steps
- **Steps per day:** Unlimited
- **Bandwidth:** Free up to 50 GB/month. Beyond that, $0.05 per GB.
- **Max message size:** 10 MB
- **Max delay:** 1 year
- **Max HTTP response duration:** 2 hours
- **DLQ retention:** 7 days
- **Active schedules:** 1000 (Free up to 1,000. Beyond that, $0.01 per active schedule.)
- **Parallelism:** 100

---

## Security & Observability

| Feature | Free | Pay as You Go | Fixed 1M | Fixed 10M | Enterprise |
|---------|---|---|---|---|---|
| Uptime SLA | No | Yes (Prod Pack add-on required) | Yes (Prod Pack add-on required) | Yes (Prod Pack add-on required) | Yes |
| Encryption at rest | No | Yes (Prod Pack add-on required) | Yes (Prod Pack add-on required) | Yes (Prod Pack add-on required) | Yes |
| SOC-2 compliance | No | Yes (Prod Pack add-on required) | Yes (Prod Pack add-on required) | Yes (Prod Pack add-on required) | Yes |
| Prometheus | No | Yes (Prod Pack add-on required) | Yes (Prod Pack add-on required) | Yes (Prod Pack add-on required) | Yes |
| Datadog | No | Yes (Prod Pack add-on required) | Yes (Prod Pack add-on required) | Yes (Prod Pack add-on required) | Yes |
| Dedicated support | No | No | No | No | Yes |

---

## Enterprise

Custom plans for high-volume and compliance-sensitive workloads.

**Contact:** sales@upstash.com | https://upstash.com/enterprise

---

## Frequently Asked Questions

### What is a step?

A step is the execution of a single workflow step in your workflow. From a billing perspective, each executed step is counted as one billed step. If a step execution fails and is retried, each retry is counted as an additional billed step. Different step types consume a different number of billed steps: context.run, context.sleep, context.sleepUntil, and context.waitForEvent generate ONE billed step. context.call and context.invoke generate TWO billed steps. When steps are executed in parallel, each step generates ONE extra billed step.

### What happens when we hit "Steps per Day" or "Monthly Bandwidth" limit?

These are soft limits and apply only if you consistently exceed your quota. Short or occasional spikes will not immediately block step executions. If usage continues to exceed the limit, we will contact you to discuss an upgrade (Fixed 1M to Fixed 10M, or Fixed 10M to a custom Enterprise plan). If we are unable to reach you and limits are still exceeded over time, workflow runs may start failing with quota errors.

### What happens when we hit daily max steps limit?

Workflow is built on top of QStash. When the daily steps limit is reached, QStash starts returning errors for step execution. The Workflow SDK throttles execution and retries after a short delay. If the retry limit is reached, the workflow run fails. Failed runs are recorded in the DLQ (Dead Letter Queue).

### Is there a rate limit?

There is no requests-per-second (RPS) limit for Workflow execution APIs. APIs used for logs, messages, and other management features do have RPS limits, and exceeding them returns a 429 Too Many Requests error. Since Workflow execution does not have an RPS limit, QStash enforces a Max Concurrent Steps limit: Workflow accepts all step executions, but if usage is too high, execution is slowed down by limiting how many steps run in parallel. Additional steps are queued and executed later. See "Max Concurrent Steps" in the pricing table for details.

### How is the Max Message Size Limit applied?

When a workflow run is triggered, if the request body exceeds the size limit, the API returns an HTTP 412 error. The Workflow SDK logs the error, marks the workflow run as failed, and records it in the DLQ (Dead Letter Queue). Between steps, the Workflow SDK makes calls to QStash. Responses from context.run, context.call, and context.invoke are also subject to the max message size limit. If these responses exceed the limit, the workflow run fails and is recorded in the DLQ.
