Group
A static list. You add people by hand, and it only changes when you change it.
Good for “Event attendees — June” or any fixed list.
Segment
A dynamic audience. You define rules, and anyone who matches is in —
automatically, forever. Good for “Engaged US leads” or “Clicked pricing, never
replied.”
Groups
Find them under People → Groups.1
Create a group
Press Create group, give it a name and an optional description.
2
Add people
Open the group and use Add people. You can pick people by hand (search and
check them off) or copy a segment to snapshot everyone who currently matches it.
Copying a segment into a group is a one-time snapshot — people who match the segment
later are not added automatically. If you want an audience that keeps updating, use a
segment directly.
Segments
Find them under People → Segments. Create a segment with a name and description, then define its rules.Building rules
You can match all of your conditions or any of them. Each condition is a Field · Operator · Value row, and fields are grouped into Attributes, Activity, Membership, and your Custom fields. There are two kinds of rules:- Attribute rules — match on who a person is: their name, company, custom-field values, and so on. Operators read in plain words: is, is not, contains, starts with, is any of, greater than, is set, before, after, in the last N days, and more.
- Activity rules — match on what a person did: sent, opened, clicked, replied, bounced, unsubscribed, or marked spam — optionally within a campaign, a time window, a specific step or version, or (for clicks) a specific link.
Activity rules for opens and clicks count human engagement only, so “clicked the
pricing link” means a real person clicked, not a scanner.
Build a form from the API
Do not hardcode Norbelys fields or operator compatibility in your client. Read the tenant-aware builder contract first:GET /v1/segments/catalog returns:
- every system field and active, filterable custom field in the workspace;
- the valid operators for each field;
- the input control for each operator (
date,days,number,text,option, ornone); - enum choices and the
groupsorprogramsoption source for membership fields; - every supported activity action and its capabilities.
AudienceFilter, and
passes that filter to the people list for a live preview or to the segments API to save
it. segments.create and segments.update validate saved definitions against the
current tenant catalog and return 400 Bad Request for an unknown field, incompatible
operator, invalid enum choice, or incomplete value:
GET /v1/fields manages custom-field resources. Use
GET /v1/segments/catalog to build a filter form because it merges those custom fields
with immutable system fields and the operators each one actually supports.Contact-history recipes
Use the system date fieldlast_sent_at when the audience depends on whether someone
was actually contacted. It is derived live from durable outbound activity: sent,
delivered, and bounced count, while queued, failed, and cancelled do not.
Campaign membership alone is not enough because a person can be enrolled without the
first message ever leaving.
last_sent_at always evaluates the person’s complete contact history across the
workspace. When the question is narrower — for example, “not contacted in campaign A”
or “clicked version B after July 1” — use an activity condition and add campaignIds,
stepIds, variantIds, a date window, or a link.