Skip to main content
A context is user-defined metadata you attach when triggering a workflow. Contexts let you scope, personalize, and filter notifications without duplicating subscribers, workflows, or templates. Common context types include tenant, app, region, or any key that matches your product model. Each context entry is either a simple identifier or a rich object with an id and optional data fields. Novu contexts feature showing tenant-scoped notification isolation in the dashboard

How contexts fit into Novu’s model

When you trigger a workflow, you pass:
  • A subscriber (who receives the notification)
  • A payload (event-specific data for this run)
  • An optional context (shared metadata that scopes and personalizes the notification)
Contexts are persistent. Unlike a payload, which exists only for a single workflow execution, context data is stored in Novu and reused across triggers, templates, the Inbox, and the Activity Feed.
You can pass up to five context keys per trigger. Each context data object is limited to 64KB. See Manage contexts for schema details.

Context vs payload

PayloadContext
ScopeSingle workflow executionPersistent across triggers
Typical useOrder ID, message text, action URLTenant name, app branding, region
In templates{{payload.field}}{{context.tenant.data.name}}
Inbox filteringNot used for scopingExact-match filtering
Auto-createdNoYes, on first reference
Use the payload for data that changes on every event. Use context for metadata that defines where or for whom a notification belongs.

Context structure

Each key in the context object is a context type. Novu supports three formats per key:
context: {
  // Simple string — type and id only
  tenant: "acme-corp",

  // Object with id
  app: { id: "billing" },

  // Object with id and metadata
  region: {
    id: "us-east",
    data: {
      name: "US East",
      timezone: "America/New_York",
    },
  },
}
Contexts are auto-created the first time Novu sees them (via a trigger or the Inbox). Existing context data is not auto-updated, which prevents accidental overwrites. Update context data through the Contexts API or the Novu dashboard.

What you can use contexts for

Multi-tenancy

Isolate notifications per organization, workspace, or customer using a tenant context—without prefixing subscriber IDs or duplicating workflows.

App or feature scoping

Route notifications to the right Inbox by scoping with an app or feature key when one subscriber uses multiple products.

Dynamic branding

Store logos, colors, and plan names in context data and reference them in templates with {{context}}.

Conditional workflow logic

Branch workflow steps based on context values, such as sending enterprise-only emails when context.tenant.data.plan is enterprise.

How context scoping works

In workflows and templates

Context data is available in every template editor through the {{context}} helper:
Welcome to {{context.tenant.data.name}}! Your {{context.tenant.data.plan}} plan is active.
You can also use context in step conditions to control which steps run.

In the Inbox

The Inbox uses exact-match filtering. The context prop on <Inbox /> must match the context used at trigger time, key for key and value for value. Notifications triggered with a tenant context only appear in an Inbox initialized with the same tenant context.
Workflow contextInbox contextDisplayed?
{ tenant: "acme" }{ tenant: "acme" }Yes
{ tenant: "acme" }{ tenant: "globex" }No
{ tenant: "acme" }{}No
When a subscriber switches tenants in your app, re-render the Inbox with the new context. Novu refetches notifications and reconnects the WebSocket scope automatically.
Because context is set on the client, secure it with contextHash in production. See Inbox with context.

Trigger a workflow with context

import { Novu } from "@novu/api";

const novu = new Novu({ secretKey: "<YOUR_SECRET_KEY_HERE>" });

await novu.trigger({
  workflowId: "invoice-paid",
  to: { subscriberId: "user-123" },
  payload: { amount: "$250" },
  context: {
    tenant: {
      id: "acme-corp",
      data: { name: "Acme Corporation", plan: "enterprise" },
    },
  },
});

Next steps

Multi-tenancy

Implement tenant isolation with contexts end to end.

Manage contexts

Create, update, and delete contexts through the API or dashboard.

Contexts in workflows

Personalize templates and add conditional logic with context data.

Inbox with context

Filter the Inbox by context and secure it with contextHash.