Skip to main content

Step Conditions

Generate a JSONLogic condition for step execution in the Dashboard / Novu MCP.

When to Use

  • The step executes when the condition evaluates to true.
  • Use null to remove the condition (the step always executes).

Merge vs Replace vs Remove

When editing an existing condition via the Novu MCP, decide based on the user’s intent:
IntentBehavior
ADD / EXTEND — “add”, “also”, “and”, “in addition”Combine existing condition with new using AND: { "and": [existing, new] }
REPLACE — “change to”, “update to”, “set to”, “replace with”Return the new condition entirely; ignore existing
REMOVE — “remove”, “delete”, “clear”Return null

Variable Reference Format

Use var for variable references: { "var": "path.to.value" }.
NamespaceSource
payload.*Trigger payload (e.g. payload.amount, payload.priority)
subscriber.*Subscriber data (e.g. subscriber.firstName, subscriber.isOnline)
steps.*Previous step state (e.g. steps.welcome-in-app.read, steps.welcome-in-app.seen)
steps.<http-step-id>.*HTTP step response properties defined in its responseBodySchema (e.g. steps.fetch-user.role)

Common Patterns

Subscriber offline

{ "==": [{ "var": "subscriber.isOnline" }, "false"] }

In-App not read

{ "==": [{ "var": "steps.<stepId>.read" }, "false"] }

In-App not seen

{ "==": [{ "var": "steps.<stepId>.seen" }, "false"] }

HTTP response value equals

{ "==": [{ "var": "steps.<http-step-id>.status" }, "active"] }
Only when the property is declared in the HTTP step’s responseBodySchema. See http-request-step.md.

Payload value equals

{ "==": [{ "var": "payload.priority" }, "high"] }

Payload value not equals

{ "!=": [{ "var": "payload.priority" }, "low"] }

AND / OR / NOT

{ "and": [condition1, condition2] }
{ "or": [condition1, condition2] }
{ "!": [condition] }

Output

Return only the skip field: a JSONLogic object or null.

See Also