Skip to main content
context.notify() notifies workflows that are waiting for a specific event, passing along an optional payload. It is typically used in combination with context.waitForEvent.

Arguments

stepName
string
A unique identifier for the step.
eventId
string
The identifier of the event to notify. Must match the eventId used in context.waitForEvent.
eventData
any
Data to deliver to the waiting workflow(s). This value will be returned in eventData from the corresponding waitForEvent call.
workflowRunId
string
The workflow run ID to notify. When provided, enables lookback functionality - the notification will be stored and delivered even if notify is called before waitForEvent.This solves race conditions where notifications might be sent before a workflow reaches its wait step.

Response

context.notify() returns a list of waiters describing the workflows that were notified.
notifyResponse
NotifyResponse[]
A list of NotifyResponse objects describing each workflow that was waiting on the event.

Usage

Basic Notification

import { serve } from "@upstash/workflow/nextjs";

export const { POST } = serve<{ topic: string }>(async (context) => {
  const payload = context.requestPayload;

  const {
    notifyResponse, // result of notify, which is a list of notified waiters
  } = await context.notify("notify step", "my-event-Id", payload);
});

Notification with Lookback

To prevent race conditions, you can provide a workflowRunId. This enables lookback - the notification will be stored and delivered even if sent before the target workflow reaches waitForEvent:
import { serve } from "@upstash/workflow/nextjs";

export const { POST } = serve<{ orderId: string }>(async (context) => {
  const { orderId } = context.requestPayload;

  // Process payment
  await context.run("process-payment", async () => {
    return processPayment(orderId);
  });

  // Notify a specific workflow run with lookback support
  const {
    notifyResponse,
  } = await context.notify(
    "notify payment complete",
    "payment-processed",
    { orderId, status: "success" },
    "wfr_order_processor_123" // Enables lookback for this workflow run
  );
});