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);
  });
});