How preferences are evaluated
When a workflow triggers, SuprSend evaluates preferences for each recipient before each delivery node.Evaluating Recipient preferences
If user preferences aren’t set, the system picks the default preference setting. Once a user sets a preference for a category, future changes to default preferences do not override the user’s choice.
Factoring in tenant preferences
If you are triggering notifications for a tenant, tenant default preferences override category-level default preferences.
Resolving preference conflicts
The order of precedence is always
user > tenant > category default. However, if you turn off notifications in a category from the tenant page, users will not receive notifications in that category, even if they previously opted in.Debugging preference evaluation in workflow runs
User preferences may change over time. When debugging a workflow run, you can inspect the exact preferences that were active at that moment. You can view this using the step-by-step debugger in workflow executions.
You can also track when a user updated their preference by filtering on

Use the “Preference Evaluation” panel in each workflow step to see what preference blocked or allowed the notification.
Subscriber preference update in request logs.Preference precedence order
The system evaluates preferences in this order:- User preference - Individual user’s explicit preference setting
- Tenant default preference - Default preference set at tenant level
- Category default preference - Default preference set at the category level
Channel-level opt-outs (for example, email unsubscribe, SMS STOP, mobile OS push opt-out) override all category and tenant preferences.
Resolving digest schedule and condition values
When a workflow references a category’s digest schedule or a condition property, SuprSend resolves the value at trigger time using the same precedence as preferences:- User value — the option or value the recipient selected.
- Tenant default — the tenant-level override, if the user hasn’t set one.
- Category default — the default configured on the sub-category.
- Digest schedule: a Digest node with schedule type
category_digest_schedulebatches each recipient’s notifications on their resolved cadence, in the recipient’s timezone. If the category has no digest schedule enabled, the notification is sent immediately without batching. - Condition properties: referenced in branch conditions as
$category.properties.<key>, the resolved value is used to decide which branch a recipient takes. If a dynamic condition has no value at runtime, it resolves tonull— handle that case in your branch logic.