Files
Zumri-Backend/Documentation/API_NEWSLETTER.md
T
Sathira Sri Sathara f920ca8920
CI / test (push) Successful in 10m22s
CI / test (pull_request) Successful in 10m53s
feat: Implement Phase 10 support and recommendations features
- Added models for support messages, SLA policies, tickets, ticket events, and ticket links.
- Created routes for help, help admin, newsletter, recommendations, and support for both customer and admin.
- Developed services for help, marketing (newsletter), and recommendations.
- Introduced support service for ticket management, including creation, replies, transitions, and attachments.
- Added validation schemas for support recommendations and ticket management.
- Implemented a cron job for support reconciliation and recommendation cleanup.
- Created migration for new support and recommendation database tables.
- Added unit tests for validation and policy checks related to Phase 10 features.
2026-09-09 16:07:31 +05:30

1.1 KiB

Newsletter Consent API

POST /api/v1/newsletter/subscribe accepts email, locale, and an allowlisted source (HOME_FOOTER, CHECKOUT, or ACCOUNT). Email is trimmed, lowercased, and uniquely stored. Repeated subscription is idempotent and enumeration-safe.

The current product policy uses immediate single opt-in. Each subscription receives a cryptographically random unsubscribe token, while only its SHA-256 hash is stored. POST /api/v1/newsletter/unsubscribe/:token always returns a neutral success response. Resubscription records fresh consent and rotates the token.

Authenticated users may inspect their linked consent at GET /api/v1/newsletter/me. Admin listing is GET /api/v1/admin/newsletter/subscribers and requires newsletter.subscribers.read; token hashes are never returned. Export/manage permissions are reserved, and Phase 10 does not implement campaign sending.

Newsletter consent is legally distinct from Phase 3 profile marketing preferences. An email preference does not create newsletter consent, and an explicit newsletter unsubscribe takes precedence until a new explicit subscribe action occurs.