Steps

context.sleep

context.sleep() pauses workflow execution for a specified duration.

When a workflow is paused, the current request completes and a new one is automatically scheduled to resume after the delay. This ensures no compute resources are consumed during the sleep period.

Always await a sleep step to properly pause execution.

Arguments

stepNamebodystring

A unique identifier for the step.

durationbodynumber|string

The duration to pause workflow execution.

  • Human-readable string format:
InputDuration
"10s"10 seconds
"1m"1 minute
"30m"30 minutes
"2h"2 hours
"1d"1 day
"1w"1 week
"1mo"1 month
"1y"1 year
  • Numeric format (seconds):
InputDuration
6060 seconds (1 minute)
36003600 seconds (1 hour)
8640086400 seconds (1 day)

Usage

TypeScript
import { serve } from "@upstash/workflow/nextjs";import { signIn, sendEmail } from "@/utils/onboarding-utils";export const { POST } = serve<User>(async (context) => {  const userData = context.requestPayload;  const user = await context.run("sign-in", async () => {    const signedInUser = await signIn(userData);    return signedInUser;  });  // πŸ‘‡ Wait for one day (in seconds)  await context.sleep("wait-until-welcome-email", "1d");  await context.run("send-welcome-email", async () => {    return sendEmail(user.name, user.email);  });});
Python
from fastapi import FastAPIfrom upstash_workflow.fastapi import Servefrom upstash_workflow import AsyncWorkflowContextfrom onboarding_utils import sign_in, send_emailapp = FastAPI()serve = Serve(app)@serve.post("/api/onboarding")async def onboarding(context: AsyncWorkflowContext[User]) -> None:    user_data = context.request_payload    async def _sign_in():        return await sign_in(user_data)    user = await context.run("sign-in", _sign_in)    # πŸ‘‡ Wait for one day (in seconds)    await context.sleep("wait-until-welcome-email", "1d")    async def _send_email():        return await send_email(user.name, user.email)    await context.run("send-welcome-email", _send_email)
Loading search…