Segments
Target campaigns at specific groups of members. A campaign with targetSegmentIds set will only fire for members who belong to at least one of those segments.
Endpoints
/tenants/{tenantId}/segmentsList all segments (STATIC and DYNAMIC).
/tenants/{tenantId}/segmentsCreate a segment. type: STATIC or DYNAMIC. DYNAMIC requires a rules tree.
/tenants/{tenantId}/segments/previewDry-run rule evaluation — returns matchCount and sample member IDs without writing.
/tenants/{tenantId}/segments/refreshRefresh all DYNAMIC segments. Re-evaluates rules against current member stats.
/tenants/{tenantId}/segments/{segmentId}Get a segment by ID.
/tenants/{tenantId}/segments/{segmentId}Update segment name, description, or DYNAMIC rules.
/tenants/{tenantId}/segments/{segmentId}Delete a segment. Campaigns targeting this segment will skip the check.
/tenants/{tenantId}/segments/{segmentId}/membersList segment members with their stats. Keyset paginated.
/tenants/{tenantId}/segments/{segmentId}/membersManually add a member to a STATIC segment.
/tenants/{tenantId}/segments/{segmentId}/members/{id}Remove a member from a STATIC segment.
/tenants/{tenantId}/segments/{segmentId}/refreshRefresh a single DYNAMIC segment.
DYNAMIC Rule Fields
Condition operators: eq neq gt gte lt lte. Rules support AND / OR operator nodes for complex logic.
Create a dynamic segment
curl -X POST "https://loyalty-engine-production-e5cb.up.railway.app/v1/tenants/$TENANT_ID/segments" \
-H "X-API-Key: sk_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Active High-Spenders (30 days)",
"type": "DYNAMIC",
"rules": {
"operator": "AND",
"conditions": [
{ "field": "spend_cents_30d", "op": "gte", "value": 50000 },
{ "field": "txn_count_30d", "op": "gte", "value": 3 }
]
}
}'Target a campaign at the segment
curl -X PATCH "https://loyalty-engine-production-e5cb.up.railway.app/v1/tenants/$TENANT_ID/campaigns/$CAMPAIGN_ID" \
-H "X-API-Key: sk_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"targetSegmentIds": ["segment-uuid-1", "segment-uuid-2"]
}'