# Audience Segmentation AI - REST API Documentation ## Base Information **Base URL**: `http://localhost:7860` **API Documentation**: `/api/docs` (Swagger UI) **Content-Type**: `application/json` --- ## Health & System ### GET `/health` Check API and database connection status. **Response:** ```json { "status": "healthy", "timestamp": "2025-11-24T00:00:00", "database": "connected" } ``` --- ## Event Analysis ### POST `/api/events/{event_code}/analyze` Trigger full AI analysis pipeline for an event (Segmentation + Sentiment + GenAI). **Path Parameters:** - `event_code` (string, required): Event identifier **Response:** ```json { "status": "started", "message": "Analysis pipeline started for event {event_code}", "job_id": "analysis_abc123" } ``` ### GET `/api/events/{event_code}/dashboard` Get comprehensive analytics dashboard for Event Owner. **Path Parameters:** - `event_code` (string, required): Event identifier **Response:** ```json { "event_code": "event_123", "segments": [ { "id": "507f1f77bcf86cd799439011", "segment_name": "VIP Khách Hàng Trung Thành", "user_count": 150, "criteria": { "avg_spend": 1500000, "avg_tickets": 5.2, "avg_recency": 15 }, "marketing_content": { "email_subject": "Ưu đãi đặc biệt cho bạn!", "email_body": "...", "status": "Draft", "generated_at": "2025-11-24T00:00:00" } } ], "sentiment_summary": { "total_comments": 200, "sentiment_distribution": { "Positive": 150, "Negative": 30, "Neutral": 20 }, "avg_confidence": 0.87, "top_keywords": ["tuyệt vời", "âm thanh", "tổ chức"], "ai_insights": { "summary": "Sự kiện được đánh giá tích cực...", "top_issues": ["Check-in chậm", "Âm thanh yếu"], "improvement_suggestions": ["Tăng quầy check-in", "Nâng cấp loa"], "predicted_nps": 65.5 } } } ``` --- ## Audience Segmentation ### POST `/api/events/{event_code}/segmentation/run` Run segmentation analysis for an event. **Path Parameters:** - `event_code` (string, required): Event identifier **Query Parameters:** - `n_clusters` (integer, optional): Number of segments (default: 5) **Response:** ```json { "status": "started", "message": "Segmentation started", "event_code": "event_123" } ``` ### GET `/api/events/{event_code}/segments` Get all audience segments for an event. **Path Parameters:** - `event_code` (string, required): Event identifier **Query Parameters:** - `status` (string, optional): Filter by status (`Draft`, `Approved`, `Sent`) **Response:** ```json [ { "id": "507f1f77bcf86cd799439011", "event_code": "event_123", "segment_name": "VIP Khách Hàng Trung Thành", "segment_type": "High Value", "user_count": 150, "user_ids": ["user_1", "user_2", "..."], "criteria": { "avg_spend": 1500000, "avg_tickets": 5.2, "avg_recency": 15, "avg_follow_count": 3 }, "marketing_content": { "email_subject": "Ưu đãi VIP đặc biệt", "email_body": "Kính gửi Quý khách...", "status": "Draft", "generated_at": "2025-11-24T00:00:00" }, "created_at": "2025-11-24T00:00:00", "last_updated": "2025-11-24T00:00:00" } ] ``` ### GET `/api/events/{event_code}/segments/{segment_id}` Get specific segment details. **Path Parameters:** - `event_code` (string, required) - `segment_id` (string, required): Segment ObjectId **Response:** ```json { "id": "507f1f77bcf86cd799439011", "event_code": "event_123", "segment_name": "VIP Khách Hàng Trung Thành", "user_count": 150, "user_ids": ["user_1", "user_2"], "criteria": {...}, "marketing_content": {...} } ``` ### GET `/api/events/{event_code}/segments/{segment_id}/users` Get user list in a segment. **Path Parameters:** - `event_code` (string, required) - `segment_id` (string, required) **Query Parameters:** - `skip` (integer): Offset (default: 0) - `limit` (integer): Max results (default: 100) **Response:** ```json { "segment_id": "507f1f77bcf86cd799439011", "total_users": 150, "users": [ { "user_id": "user_1", "email": "user@example.com", "full_name": "Nguyễn Văn A", "stats": { "total_spend": 2000000, "tickets_bought": 6, "last_purchase": "2025-11-20" } } ] } ``` --- ## Approval Workflow ### POST `/api/events/{event_code}/segments/{segment_id}/approve` Event Owner approves marketing content. **Path Parameters:** - `event_code` (string, required) - `segment_id` (string, required) **Request Body (optional):** ```json { "approved_by": "owner_user_id", "modified_content": { "email_subject": "Modified subject", "email_body": "Modified body" } } ``` **Response:** ```json { "status": "success", "message": "Segment approved", "segment_id": "507f1f77bcf86cd799439011", "marketing_content": { "status": "Approved", "approved_at": "2025-11-24T00:00:00", "approved_by": "owner_user_id" } } ``` ### POST `/api/events/{event_code}/segments/{segment_id}/send-email` Send approved marketing email to segment users. **Path Parameters:** - `event_code` (string, required) - `segment_id` (string, required) **Request Body:** ```json { "send_immediately": true, "schedule_at": "2025-11-25T10:00:00" } ``` **Response:** ```json { "status": "success", "message": "Email sent to 150 users", "segment_id": "507f1f77bcf86cd799439011", "emails_sent": 150, "emails_failed": 0, "marketing_content": { "status": "Sent" } } ``` --- ## Sentiment Analysis ### POST `/api/events/{event_code}/sentiment/analyze` Analyze sentiment for event comments. **Path Parameters:** - `event_code` (string, required) **Response:** ```json { "status": "started", "message": "Sentiment analysis started for event {event_code}" } ``` ### GET `/api/events/{event_code}/sentiment/summary` Get sentiment summary for an event. **Path Parameters:** - `event_code` (string, required) **Response:** ```json { "event_code": "event_123", "total_comments": 200, "sentiment_distribution": { "Positive": 150, "Negative": 30, "Neutral": 20 }, "avg_confidence": 0.87, "top_keywords": ["tuyệt vời", "âm thanh", "tổ chức"], "ai_insights": { "summary": "Sự kiện được đánh giá tích cực với 75% feedback tích cực...", "top_issues": [ "Check-in quá chậm (15 mentions)", "Âm thanh yếu ở khu vực sau (10 mentions)" ], "improvement_suggestions": [ "Tăng số quầy check-in lên 5 quầy", "Bổ sung loa phụ khu vực sau" ], "predicted_nps": 65.5 }, "last_updated": "2025-11-24T00:00:00" } ``` ### GET `/api/events/{event_code}/sentiment/results` Get detailed sentiment results. **Path Parameters:** - `event_code` (string, required) **Query Parameters:** - `sentiment_label` (string, optional): Filter by `Positive`, `Negative`, `Neutral` - `skip` (integer): Offset - `limit` (integer): Max results **Response:** ```json { "total": 200, "results": [ { "id": "507f...", "event_code": "event_123", "source_id": "comment_abc", "sentiment_label": "Positive", "confidence_score": 0.92, "key_phrases": ["tuyệt vời", "hài lòng"], "analyzed_at": "2025-11-24T00:00:00" } ] } ``` --- ## Generative AI ### POST `/api/events/{event_code}/genai/generate-emails` Generate marketing emails for all segments. **Path Parameters:** - `event_code` (string, required) **Response:** ```json { "status": "started", "message": "Email generation started for {n} segments" } ``` ### POST `/api/events/{event_code}/genai/generate-insights` Generate AI insights from negative feedback. **Path Parameters:** - `event_code` (string, required) **Response:** ```json { "status": "success", "insights": { "summary": "...", "top_issues": ["..."], "improvement_suggestions": ["..."], "predicted_nps": 62.5 } } ``` --- ## Monitoring & Analytics ### GET `/api/monitoring/pipelines/{pipeline}/metrics` Get performance metrics for a pipeline. **Path Parameters:** - `pipeline` (string): `segmentation`, `sentiment`, `genai` **Query Parameters:** - `event_code` (string, optional): Filter by event - `days` (integer): Date range (default: 7) **Response:** ```json { "pipeline": "segmentation", "event_code": "event_123", "total_runs": 5, "avg_execution_time": 4.2, "last_run": "2025-11-24T00:00:00", "metrics": { "avg_users_processed": 850, "avg_segments_created": 5, "avg_inertia": 1250.5 } } ``` ### GET `/api/monitoring/pipelines/{pipeline}/drift` Check for model drift. **Path Parameters:** - `pipeline` (string): `segmentation`, `sentiment` **Query Parameters:** - `event_code` (string, optional) **Response:** ```json { "pipeline": "segmentation", "drift_detected": true, "avg_drift": 0.65, "max_drift": 1.2, "threshold": 0.5, "recommendation": "Consider retraining model" } ``` --- ## Feedback & Performance ### POST `/api/feedback/email-engagement` Record email engagement metrics. **Request Body:** ```json { "segment_id": "507f...", "user_id": "user_1", "event_code": "event_123", "opened": true, "clicked": true, "converted": false, "unsubscribed": false } ``` **Response:** ```json { "status": "recorded", "feedback_id": "feedback_xyz" } ``` ### GET `/api/feedback/email-performance/{segment_id}` Get email campaign performance. **Path Parameters:** - `segment_id` (string, required) **Response:** ```json { "segment_id": "507f...", "total_sent": 150, "open_rate": 0.65, "click_rate": 0.32, "conversion_rate": 0.12, "unsubscribe_rate": 0.02 } ``` --- ## Administration ### POST `/api/admin/indexes/create` Create all MongoDB indexes (run once during setup). **Response:** ```json { "status": "success", "indexes_created": [ "idx_payment_event_status_user", "idx_follow_event_user", "idx_comment_event_date", "..." ] } ``` ### POST `/api/admin/models/retrain` Trigger model retraining based on feedback. **Request Body:** ```json { "model_type": "segmentation", "event_code": "event_123" } ``` **Response:** ```json { "status": "started", "job_id": "retrain_abc123" } ``` --- ## Error Responses All endpoints may return error responses in the following format: ```json { "detail": "Error message description", "status_code": 400 } ```