Skip to content

API: Engagement

Controller: admin-engagement.controllers.ts (multiple @Controller classes).

Mount admin/segments.

MethodPathPerm
GET/admin/segmentsusers:read + push:read
GET/admin/segments/:idusers:read + push:read
POST/admin/segmentsusers:read + push:write
PUT/admin/segments/:idusers:read + push:write
DELETE/admin/segments/:idusers:read + push:write
POST/admin/segments/:id/estimateusers:read + push:read
POST/admin/segments/estimateusers:read + push:read
{
"name": "Lapsed EG payers",
"description": "Registered users in EG who purchased 8–30 days ago, no purchase since.",
"query": {
"and": [
{ "field": "countryCode", "op": "eq", "value": "EG" },
{ "field": "purchasedInDays", "op": "between", "value": [8, 30] }
]
}
}
{
"query": { /* filter DSL */ }
}

Mount admin/push/campaigns.

MethodPathPerm
GET/admin/push/campaignspush:read
GET/admin/push/campaigns/:idpush:read
POST/admin/push/campaignspush:write
PUT/admin/push/campaigns/:idpush:write
DELETE/admin/push/campaigns/:idpush:write
POST/admin/push/campaigns/:id/estimatepush:write
POST/admin/push/campaigns/:id/sendpush:write
POST/admin/push/campaigns/:id/schedulepush:write
POST/admin/push/campaigns/:id/unschedulepush:write
{
"name": "EG launch: winback",
"segmentId": "...",
"titleI18n": { "en": "We miss you", "ar": "افتقدناك" },
"bodyI18n": { "en": "New episode drops today.", "ar": "..." },
"deepLink": "twistcue://series/0193...",
"category": "drops"
}
{
"targeted": 21340,
"capped": 1213,
"categoryOptedOut": 2041,
"deliverable": 18086
}

Mount admin/moderation.

MethodPathPerm
GET/admin/moderation/commentsmoderation:read
POST/admin/moderation/comments/:id/actionmoderation:write
POST/admin/moderation/comments/bulkmoderation:write
GET/admin/moderation/reportsmoderation:read
POST/admin/moderation/reports/:id/resolvemoderation:write
{
"action": "delete",
"reason": "hate_speech",
"alsoStrikeAuthor": true
}

Actions: approve, hide, delete.

{
"commentIds": ["...", "..."],
"action": "hide"
}
{
"resolution": "hide_target",
"strikeTarget": true,
"note": "Spam bot ring"
}

Resolutions: dismiss, hide_target, delete_target, strike_target, suspend_target, ban_target.

Mount admin/flags.

MethodPathPerm
GET/admin/flagssystem:read
PUT/admin/flagssystem:write
DELETE/admin/flags/:keysystem:write
{
"key": "public_vas_enabled_eg",
"value": true
}

Mount admin/rewards-config.

MethodPathPerm
GET/admin/rewards-configsystem:read
PUT/admin/rewards-configsystem:write

Body: full config JSON (see Streaks & rewards guide).

Mount admin/settings.

MethodPathPerm
GET/admin/settings/healthsystem:read

Returns live health for API, Postgres, Redis, CF Stream, and cron statuses.

Mount flags (no admin/ prefix).

MethodPathPerm
GET/flagsnone: public

Returns only keys starting with public_. Used by the mobile app at startup.