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
A unique identifier for the step.
 
The duration to pause workflow execution.
- Human-readable string format:
 
| Input | Duration | 
|---|
"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):
 
| Input | Duration | 
|---|
60 | 60 seconds (1 minute) | 
3600 | 3600 seconds (1 hour) | 
86400 | 86400 seconds (1 day) | 
  
Usage
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);
  });
});