API: Engagement
Controller: admin-engagement.controllers.ts (multiple @Controller classes).
Segments
Section titled “Segments”Mount admin/segments.
| Method | Path | Perm |
|---|---|---|
| GET | /admin/segments | users:read + push:read |
| GET | /admin/segments/:id | users:read + push:read |
| POST | /admin/segments | users:read + push:write |
| PUT | /admin/segments/:id | users:read + push:write |
| DELETE | /admin/segments/:id | users:read + push:write |
| POST | /admin/segments/:id/estimate | users:read + push:read |
| POST | /admin/segments/estimate | users:read + push:read |
Create
Section titled “Create”{ "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] } ] }}Estimate (ad-hoc)
Section titled “Estimate (ad-hoc)”{ "query": { /* filter DSL */ }}Push campaigns
Section titled “Push campaigns”Mount admin/push/campaigns.
| Method | Path | Perm |
|---|---|---|
| GET | /admin/push/campaigns | push:read |
| GET | /admin/push/campaigns/:id | push:read |
| POST | /admin/push/campaigns | push:write |
| PUT | /admin/push/campaigns/:id | push:write |
| DELETE | /admin/push/campaigns/:id | push:write |
| POST | /admin/push/campaigns/:id/estimate | push:write |
| POST | /admin/push/campaigns/:id/send | push:write |
| POST | /admin/push/campaigns/:id/schedule | push:write |
| POST | /admin/push/campaigns/:id/unschedule | push:write |
Create
Section titled “Create”{ "name": "EG launch: winback", "segmentId": "...", "titleI18n": { "en": "We miss you", "ar": "افتقدناك" }, "bodyI18n": { "en": "New episode drops today.", "ar": "..." }, "deepLink": "twistcue://series/0193...", "category": "drops"}Estimate response
Section titled “Estimate response”{ "targeted": 21340, "capped": 1213, "categoryOptedOut": 2041, "deliverable": 18086}Moderation
Section titled “Moderation”Mount admin/moderation.
| Method | Path | Perm |
|---|---|---|
| GET | /admin/moderation/comments | moderation:read |
| POST | /admin/moderation/comments/:id/action | moderation:write |
| POST | /admin/moderation/comments/bulk | moderation:write |
| GET | /admin/moderation/reports | moderation:read |
| POST | /admin/moderation/reports/:id/resolve | moderation:write |
Comment action
Section titled “Comment action”{ "action": "delete", "reason": "hate_speech", "alsoStrikeAuthor": true}Actions: approve, hide, delete.
{ "commentIds": ["...", "..."], "action": "hide"}Resolve report
Section titled “Resolve report”{ "resolution": "hide_target", "strikeTarget": true, "note": "Spam bot ring"}Resolutions: dismiss, hide_target, delete_target, strike_target, suspend_target, ban_target.
Feature flags
Section titled “Feature flags”Mount admin/flags.
| Method | Path | Perm |
|---|---|---|
| GET | /admin/flags | system:read |
| PUT | /admin/flags | system:write |
| DELETE | /admin/flags/:key | system:write |
{ "key": "public_vas_enabled_eg", "value": true}Rewards config
Section titled “Rewards config”Mount admin/rewards-config.
| Method | Path | Perm |
|---|---|---|
| GET | /admin/rewards-config | system:read |
| PUT | /admin/rewards-config | system:write |
Body: full config JSON (see Streaks & rewards guide).
Settings
Section titled “Settings”Mount admin/settings.
| Method | Path | Perm |
|---|---|---|
| GET | /admin/settings/health | system:read |
Returns live health for API, Postgres, Redis, CF Stream, and cron statuses.
Public flags (mobile-facing, no auth)
Section titled “Public flags (mobile-facing, no auth)”Mount flags (no admin/ prefix).
| Method | Path | Perm |
|---|---|---|
| GET | /flags | none: public |
Returns only keys starting with public_. Used by the mobile app at startup.