Personal Stats Service
API Contract
REST
/api/v1/personal-stats
4 endpoints
GET
/api/v1/personal-stats/api/v1/personal-stats/:mentor_id
Get personal stats summary for a peer mentor
Public
Response Example
{
"mentor_id": "mentor_b2c91a",
"mentor_name": "James Park",
"period": "last_30_days",
"start_date": "2026-02-24",
"end_date": "2026-03-25",
"total_activities": 12,
"completed_activities": 11,
"cancelled_activities": 1,
"completion_rate": 0.917,
"avg_session_duration_minutes": 52,
"total_hours_logged": 10.4,
"most_common_activity_type": "one_on_one_session",
"most_active_weekday": "Wednesday",
"peer_rank_percentile": 78,
"streak_days": 14
}
GET
/api/v1/personal-stats/api/v1/personal-stats/:mentor_id/monthly-series
Get monthly activity series for a mentor's personal trend chart
Public
Response Example
{
"data": [
{
"year": 2026,
"month": 1,
"month_label": "Jan 2026",
"total_activities": 8,
"completed_activities": 8,
"total_hours": 6.5
},
{
"year": 2026,
"month": 2,
"month_label": "Feb 2026",
"total_activities": 10,
"completed_activities": 9,
"total_hours": 7.8
},
{
"year": 2026,
"month": 3,
"month_label": "Mar 2026",
"total_activities": 12,
"completed_activities": 11,
"total_hours": 10.4
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 3
}
}
GET
/api/v1/personal-stats/api/v1/personal-stats/:mentor_id/activity-breakdown
Get activity type breakdown for a mentor's own activities
Public
Response Example
{
"data": [
{
"activity_type_id": "act_type_001",
"activity_type_name": "One-on-One Session",
"count": 7,
"percentage": 58.3,
"avg_duration_minutes": 55,
"total_hours": 6.4
},
{
"activity_type_id": "act_type_003",
"activity_type_name": "Check-in",
"count": 5,
"percentage": 41.7,
"avg_duration_minutes": 20,
"total_hours": 1.7
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 2
}
}
GET
/api/v1/personal-stats/api/v1/personal-stats/:mentor_id/contribution-history
Get multi-year contribution history heatmap data for a mentor
Public
Response Example
{
"data": [
{
"year": 2025,
"total_activities": 89,
"total_hours": 74.2,
"monthly_breakdown": [
{
"month": 1,
"count": 4
},
{
"month": 2,
"count": 6
},
{
"month": 3,
"count": 9
},
{
"month": 4,
"count": 7
},
{
"month": 5,
"count": 8
},
{
"month": 6,
"count": 5
},
{
"month": 7,
"count": 3
},
{
"month": 8,
"count": 6
},
{
"month": 9,
"count": 8
},
{
"month": 10,
"count": 9
},
{
"month": 11,
"count": 10
},
{
"month": 12,
"count": 14
}
],
"peak_month": 12,
"zero_activity_months": 0
},
{
"year": 2026,
"total_activities": 30,
"total_hours": 24.7,
"monthly_breakdown": [
{
"month": 1,
"count": 8
},
{
"month": 2,
"count": 10
},
{
"month": 3,
"count": 12
}
],
"peak_month": 3,
"zero_activity_months": 0
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 2
}
}