Mentor
List all scope grants for a mentor.
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/{mentor_id}/grants/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": [
{
"id": "text",
"scope_type": "COMPANY_MENTOR",
"scope_id": "text",
"is_active": true,
"granted_by_name": "text",
"granted_at": "2026-01-01T00:00:00.000Z",
"revoked_by_name": "text",
"revoked_at": "2026-01-01T00:00:00.000Z"
}
]
}Revoke a single mentor scope grant.
No response body
No content
DELETE /api/v1/dashboard/mentor/{mentor_id}/grants/{grant_id}/ HTTP/1.1
Accept: */*
No response body
No content
Get recent activity of the currently logged-in mentor (sessions created, tasks appraised).
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/activity/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": [
{
"id": "text",
"activity_type": "text",
"title": "text",
"description": "text",
"date": "2026-01-01T00:00:00.000Z",
"status": "text"
}
]
}Admin-only endpoint for bulk assigning / revoking mentor status.
POST /api/v1/mentor/admin/assign/ Body: { user_muids, mentor_tier, [org_id], [ig_ids], [about], [expertise], [hours] } Assigns all listed users as mentors atomically.
DELETE /api/v1/mentor/admin/assign/<user_muid>/ Revokes mentor assignment for the given user. Optional query param ?mentor_tier= scopes revocation to a single tier.
No response body
No content
POST /api/v1/dashboard/mentor/admin/assign/ HTTP/1.1
Accept: */*
No response body
No content
Admin-only endpoint for bulk assigning / revoking mentor status.
POST /api/v1/mentor/admin/assign/ Body: { user_muids, mentor_tier, [org_id], [ig_ids], [about], [expertise], [hours] } Assigns all listed users as mentors atomically.
DELETE /api/v1/mentor/admin/assign/<user_muid>/ Revokes mentor assignment for the given user. Optional query param ?mentor_tier= scopes revocation to a single tier.
No response body
No content
DELETE /api/v1/dashboard/mentor/admin/assign/ HTTP/1.1
Accept: */*
No response body
No content
Admin-only endpoint for bulk assigning / revoking mentor status.
POST /api/v1/mentor/admin/assign/ Body: { user_muids, mentor_tier, [org_id], [ig_ids], [about], [expertise], [hours] } Assigns all listed users as mentors atomically.
DELETE /api/v1/mentor/admin/assign/<user_muid>/ Revokes mentor assignment for the given user. Optional query param ?mentor_tier= scopes revocation to a single tier.
No response body
No content
POST /api/v1/dashboard/mentor/admin/assign/{user_muid}/ HTTP/1.1
Accept: */*
No response body
No content
Admin-only endpoint for bulk assigning / revoking mentor status.
POST /api/v1/mentor/admin/assign/ Body: { user_muids, mentor_tier, [org_id], [ig_ids], [about], [expertise], [hours] } Assigns all listed users as mentors atomically.
DELETE /api/v1/mentor/admin/assign/<user_muid>/ Revokes mentor assignment for the given user. Optional query param ?mentor_tier= scopes revocation to a single tier.
No response body
No content
DELETE /api/v1/dashboard/mentor/admin/assign/{user_muid}/ HTTP/1.1
Accept: */*
No response body
No content
List all availability slots for the logged-in mentor.
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/availability/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": [
{
"id": "text",
"mentor_user_id": "text",
"ig_id": "text",
"ig_name": "text",
"weekday": 1,
"start_time": "00:00:00",
"end_time": "00:00:00",
"timezone": "text",
"is_active": true,
"valid_from": "2026-01-01",
"valid_to": "2026-01-01",
"created_at": "2026-01-01T00:00:00.000Z",
"updated_at": "2026-01-01T00:00:00.000Z"
}
]
}Create a new mentor availability slot.
falseExample: false200Example: 200POST /api/v1/dashboard/mentor/availability/ HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 156
{
"ig": "text",
"weekday": 1,
"start_time": "00:00:00",
"end_time": "00:00:00",
"timezone": "text",
"is_active": true,
"valid_from": "2026-01-01",
"valid_to": "2026-01-01"
}{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"ig": "text",
"weekday": 1,
"start_time": "00:00:00",
"end_time": "00:00:00",
"timezone": "text",
"is_active": true,
"valid_from": "2026-01-01",
"valid_to": "2026-01-01"
}
}Delete a mentor availability slot.
No response body
No content
DELETE /api/v1/dashboard/mentor/availability/ HTTP/1.1
Accept: */*
No response body
No content
Update an existing mentor availability slot.
falseExample: false200Example: 200PATCH /api/v1/dashboard/mentor/availability/ HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 156
{
"ig": "text",
"weekday": 1,
"start_time": "00:00:00",
"end_time": "00:00:00",
"timezone": "text",
"is_active": true,
"valid_from": "2026-01-01",
"valid_to": "2026-01-01"
}{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"ig": "text",
"weekday": 1,
"start_time": "00:00:00",
"end_time": "00:00:00",
"timezone": "text",
"is_active": true,
"valid_from": "2026-01-01",
"valid_to": "2026-01-01"
}
}List all availability slots for the logged-in mentor.
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/availability/{slot_id}/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": [
{
"id": "text",
"mentor_user_id": "text",
"ig_id": "text",
"ig_name": "text",
"weekday": 1,
"start_time": "00:00:00",
"end_time": "00:00:00",
"timezone": "text",
"is_active": true,
"valid_from": "2026-01-01",
"valid_to": "2026-01-01",
"created_at": "2026-01-01T00:00:00.000Z",
"updated_at": "2026-01-01T00:00:00.000Z"
}
]
}Create a new mentor availability slot.
falseExample: false200Example: 200POST /api/v1/dashboard/mentor/availability/{slot_id}/ HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 156
{
"ig": "text",
"weekday": 1,
"start_time": "00:00:00",
"end_time": "00:00:00",
"timezone": "text",
"is_active": true,
"valid_from": "2026-01-01",
"valid_to": "2026-01-01"
}{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"ig": "text",
"weekday": 1,
"start_time": "00:00:00",
"end_time": "00:00:00",
"timezone": "text",
"is_active": true,
"valid_from": "2026-01-01",
"valid_to": "2026-01-01"
}
}Delete a mentor availability slot.
No response body
No content
DELETE /api/v1/dashboard/mentor/availability/{slot_id}/ HTTP/1.1
Accept: */*
No response body
No content
Update an existing mentor availability slot.
falseExample: false200Example: 200PATCH /api/v1/dashboard/mentor/availability/{slot_id}/ HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 156
{
"ig": "text",
"weekday": 1,
"start_time": "00:00:00",
"end_time": "00:00:00",
"timezone": "text",
"is_active": true,
"valid_from": "2026-01-01",
"valid_to": "2026-01-01"
}{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"ig": "text",
"weekday": 1,
"start_time": "00:00:00",
"end_time": "00:00:00",
"timezone": "text",
"is_active": true,
"valid_from": "2026-01-01",
"valid_to": "2026-01-01"
}
}Get details of a specific mentor by ID.
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/detail/{mentor_id}/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"id": "text",
"user": "text",
"user_full_name": "text",
"user_email": "text",
"about": "text",
"expertise": "text",
"reason": "text",
"hours": 1,
"mentor_tier": "IG_MENTOR",
"status": "PENDING",
"preferred_ig_ids": null,
"org": "text",
"verified_by": "text",
"verified_at": "2026-01-01T00:00:00.000Z",
"company": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"updated_at": "2026-01-01T00:00:00.000Z"
}
}List all mentor applications with filtering.
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/list/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": [
{
"id": "text",
"user_id": "text",
"user_full_name": "text",
"user_email": "text",
"muid": "text",
"about": "text",
"expertise": "text",
"verification_note": "text",
"verified_at": "2026-01-01T00:00:00.000Z",
"mentor_tier": "IG_MENTOR",
"status": "PENDING",
"created_at": "2026-01-01T00:00:00.000Z",
"updated_at": "2026-01-01T00:00:00.000Z"
}
]
}Retrieve an overview dashboard of metrics aggregated dynamically based on the authenticated mentor's active scopes (Campus, Company, IG).
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/overview/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"scopes": [
{
"scope_type": "text",
"scope_id": "text",
"scope_name": "text",
"metrics": {
"ANY_ADDITIONAL_PROPERTY": "anything"
}
}
]
}
}Retrieve the profile of a verified mentor.
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/profile/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"id": "text",
"user": "text",
"user_full_name": "text",
"user_email": "text",
"about": "text",
"expertise": "text",
"reason": "text",
"hours": 1,
"mentor_tier": "IG_MENTOR",
"status": "PENDING",
"preferred_ig_ids": null,
"org": "text",
"verified_by": "text",
"verified_at": "2026-01-01T00:00:00.000Z",
"company": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"updated_at": "2026-01-01T00:00:00.000Z"
}
}Update the profile of a verified mentor.
falseExample: false200Example: 200PATCH /api/v1/dashboard/mentor/profile/ HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 85
{
"about": "text",
"expertise": "text",
"reason": "text",
"hours": 1,
"preferred_ig_ids": null
}{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"about": "text",
"expertise": "text",
"reason": "text",
"hours": 1,
"preferred_ig_ids": null
}
}List active availability slots for a specific mentor.
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/public/availability/{mentor_id}/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": [
{
"id": "text",
"mentor_user_id": "text",
"ig_id": "text",
"ig_name": "text",
"weekday": 1,
"start_time": "00:00:00",
"end_time": "00:00:00",
"timezone": "text",
"is_active": true,
"valid_from": "2026-01-01",
"valid_to": "2026-01-01",
"created_at": "2026-01-01T00:00:00.000Z",
"updated_at": "2026-01-01T00:00:00.000Z"
}
]
}View a mentor's profile publicly.
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/public/profile/{mentor_id}/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"id": "text",
"user": "text",
"user_full_name": "text",
"user_email": "text",
"about": "text",
"expertise": "text",
"reason": "text",
"hours": 1,
"mentor_tier": "IG_MENTOR",
"status": "PENDING",
"preferred_ig_ids": null,
"org": "text",
"verified_by": "text",
"verified_at": "2026-01-01T00:00:00.000Z",
"company": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"updated_at": "2026-01-01T00:00:00.000Z"
}
}Submit a new mentor registration.
falseExample: false200Example: 200POST /api/v1/dashboard/mentor/register/ HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 85
{
"about": "text",
"expertise": "text",
"reason": "text",
"hours": 1,
"preferred_ig_ids": null
}{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"about": "text",
"expertise": "text",
"reason": "text",
"hours": 1,
"preferred_ig_ids": null
}
}Update a pending mentor application or resubmit a rejected one.
falseExample: false200Example: 200PATCH /api/v1/dashboard/mentor/register/ HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 85
{
"about": "text",
"expertise": "text",
"reason": "text",
"hours": 1,
"preferred_ig_ids": null
}{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"about": "text",
"expertise": "text",
"reason": "text",
"hours": 1,
"preferred_ig_ids": null
}
}Admin view to list all mentorship sessions.
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/session/admin/list/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": [
{
"id": "text",
"entity_id": "text",
"entity_name": "text",
"session_type": "ig_session",
"title": "text",
"description": "text",
"mode": "ONLINE",
"starts_at": "2026-01-01T00:00:00.000Z",
"ends_at": "2026-01-01T00:00:00.000Z",
"status": "REQUESTED",
"created_by_id": "text",
"created_by_name": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"max_participants": 1,
"meeting_link": "text",
"venue": "text",
"is_recurring": true,
"parent_session_id": "text",
"recurrence_type": "DAILY",
"recurrence_interval": 1,
"recurrence_end_date": "2026-01-01"
}
]
}Verify or reject a mentorship session.
SCHEDULED- SCHEDULEDREJECTED- REJECTEDCANCELLED- CANCELLED
falseNo response body
No content
PATCH /api/v1/dashboard/mentor/session/admin/verify/{session_id}/ HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 46
{
"status": "SCHEDULED",
"apply_to_series": false
}No response body
No content
List all scheduled sessions available to the user — includes IG sessions for their groups and company sessions for linked company orgs.
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/session/available/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": [
{
"id": "text",
"entity_id": "text",
"entity_name": "text",
"session_type": "ig_session",
"title": "text",
"description": "text",
"mode": "ONLINE",
"starts_at": "2026-01-01T00:00:00.000Z",
"ends_at": "2026-01-01T00:00:00.000Z",
"status": "REQUESTED",
"created_by_id": "text",
"created_by_name": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"max_participants": 1,
"meeting_link": "text",
"venue": "text",
"is_recurring": true,
"parent_session_id": "text",
"recurrence_type": "DAILY",
"recurrence_interval": 1,
"recurrence_end_date": "2026-01-01"
}
]
}Create a new mentorship session. For IG mentors, provide an 'ig' field. For company mentors, entity_id and session_type are auto-resolved from the mentor's company org. To create a recurring session, set is_recurring=true, recurrence_type ('DAILY', 'WEEKLY', 'MONTHLY'), recurrence_interval, and recurrence_end_date. This returns the parent session while auto-spawning children.
ig_session- IG Sessioncampus_session- Campus Sessioncompany_session- Company Session
ONLINE- OnlineOFFLINE- OfflineHYBRID- Hybrid
DAILY- DailyWEEKLY- WeeklyMONTHLY- Monthly
falseExample: false200Example: 200POST /api/v1/dashboard/mentor/session/create/ HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 351
{
"id": "text",
"entity_id": "text",
"session_type": "ig_session",
"title": "text",
"description": "text",
"mode": "ONLINE",
"starts_at": "2026-01-01T00:00:00.000Z",
"ends_at": "2026-01-01T00:00:00.000Z",
"meeting_link": "text",
"venue": "text",
"max_participants": 1,
"is_recurring": true,
"recurrence_type": "DAILY",
"recurrence_interval": 1,
"recurrence_end_date": "2026-01-01"
}{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"id": "text",
"entity_id": "text",
"session_type": "ig_session",
"title": "text",
"description": "text",
"mode": "ONLINE",
"starts_at": "2026-01-01T00:00:00.000Z",
"ends_at": "2026-01-01T00:00:00.000Z",
"meeting_link": "text",
"venue": "text",
"max_participants": 1,
"is_recurring": true,
"recurrence_type": "DAILY",
"recurrence_interval": 1,
"recurrence_end_date": "2026-01-01",
"child_session_ids": "text"
}
}List all sessions created by the logged-in mentor, or get details of a specific session.
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/session/list/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": [
{
"id": "text",
"entity_id": "text",
"entity_name": "text",
"session_type": "ig_session",
"title": "text",
"description": "text",
"mode": "ONLINE",
"starts_at": "2026-01-01T00:00:00.000Z",
"ends_at": "2026-01-01T00:00:00.000Z",
"status": "REQUESTED",
"created_by_id": "text",
"created_by_name": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"max_participants": 1,
"meeting_link": "text",
"venue": "text",
"is_recurring": true,
"parent_session_id": "text",
"recurrence_type": "DAILY",
"recurrence_interval": 1,
"recurrence_end_date": "2026-01-01"
}
]
}List all sessions created by the logged-in mentor, or get details of a specific session.
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/session/list/{session_id}/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": [
{
"id": "text",
"entity_id": "text",
"entity_name": "text",
"session_type": "ig_session",
"title": "text",
"description": "text",
"mode": "ONLINE",
"starts_at": "2026-01-01T00:00:00.000Z",
"ends_at": "2026-01-01T00:00:00.000Z",
"status": "REQUESTED",
"created_by_id": "text",
"created_by_name": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"max_participants": 1,
"meeting_link": "text",
"venue": "text",
"is_recurring": true,
"parent_session_id": "text",
"recurrence_type": "DAILY",
"recurrence_interval": 1,
"recurrence_end_date": "2026-01-01"
}
]
}Mentor view to manually add a participant to a specific session using muid.
falseExample: false200Example: 200POST /api/v1/dashboard/mentor/session/participant/add/{session_id}/ HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 15
{
"muid": "text"
}{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"id": "text",
"session_id": "text",
"user_id": "text",
"user_full_name": "text",
"mu_id": "text",
"participant_role": "MENTOR",
"attendance_status": "INVITED",
"progress_note": "text",
"feedback": "text",
"contributed_minutes": 1,
"created_at": "2026-01-01T00:00:00.000Z",
"session_title": "text",
"session_starts_at": "2026-01-01T00:00:00.000Z",
"session_ends_at": "2026-01-01T00:00:00.000Z",
"session_mode": "text",
"session_meeting_link": "text",
"session_venue": "text",
"session_status": "text",
"session_entity_id": "text",
"session_entity_name": "text"
}
}Allows a user to submit feedback for a session they attended.
falseExample: false200Example: 200PATCH /api/v1/dashboard/mentor/session/participant/feedback/{session_id}/ HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 19
{
"feedback": "text"
}{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"id": "text",
"session_id": "text",
"user_id": "text",
"user_full_name": "text",
"mu_id": "text",
"participant_role": "MENTOR",
"attendance_status": "INVITED",
"progress_note": "text",
"feedback": "text",
"contributed_minutes": 1,
"created_at": "2026-01-01T00:00:00.000Z",
"session_title": "text",
"session_starts_at": "2026-01-01T00:00:00.000Z",
"session_ends_at": "2026-01-01T00:00:00.000Z",
"session_mode": "text",
"session_meeting_link": "text",
"session_venue": "text",
"session_status": "text",
"session_entity_id": "text",
"session_entity_name": "text"
}
}List all mentorship sessions the logged-in user has joined.
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/session/participant/history/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": [
{
"id": "text",
"session_id": "text",
"user_id": "text",
"user_full_name": "text",
"mu_id": "text",
"participant_role": "MENTOR",
"attendance_status": "INVITED",
"progress_note": "text",
"feedback": "text",
"contributed_minutes": 1,
"created_at": "2026-01-01T00:00:00.000Z",
"session_title": "text",
"session_starts_at": "2026-01-01T00:00:00.000Z",
"session_ends_at": "2026-01-01T00:00:00.000Z",
"session_mode": "text",
"session_meeting_link": "text",
"session_venue": "text",
"session_status": "text",
"session_entity_id": "text",
"session_entity_name": "text"
}
]
}Mentor view to list all participants in a specific session.
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/session/participant/list/{session_id}/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": [
{
"id": "text",
"session_id": "text",
"user_id": "text",
"user_full_name": "text",
"mu_id": "text",
"participant_role": "MENTOR",
"attendance_status": "INVITED",
"progress_note": "text",
"feedback": "text",
"contributed_minutes": 1,
"created_at": "2026-01-01T00:00:00.000Z",
"session_title": "text",
"session_starts_at": "2026-01-01T00:00:00.000Z",
"session_ends_at": "2026-01-01T00:00:00.000Z",
"session_mode": "text",
"session_meeting_link": "text",
"session_venue": "text",
"session_status": "text",
"session_entity_id": "text",
"session_entity_name": "text"
}
]
}Mentor view to update participant's attendance and progress.
INVITED- InvitedATTENDED- AttendedABSENT- Absent
falseExample: false200Example: 200PATCH /api/v1/dashboard/mentor/session/participant/update/{link_id}/ HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 78
{
"attendance_status": "INVITED",
"progress_note": "text",
"contributed_minutes": 1
}{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"attendance_status": "INVITED",
"progress_note": "text",
"contributed_minutes": 1
}
}Allows a MuLearn user to join a scheduled mentorship session.
falseExample: false200Example: 200POST /api/v1/dashboard/mentor/session/participation/join/{session_id}/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"id": "text",
"session_id": "text",
"user_id": "text",
"user_full_name": "text",
"mu_id": "text",
"participant_role": "MENTOR",
"attendance_status": "INVITED",
"progress_note": "text",
"feedback": "text",
"contributed_minutes": 1,
"created_at": "2026-01-01T00:00:00.000Z",
"session_title": "text",
"session_starts_at": "2026-01-01T00:00:00.000Z",
"session_ends_at": "2026-01-01T00:00:00.000Z",
"session_mode": "text",
"session_meeting_link": "text",
"session_venue": "text",
"session_status": "text",
"session_entity_id": "text",
"session_entity_name": "text"
}
}List all pending student session requests that are within the logged-in mentor's scope (their assigned IGs, campus, or company).
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/session/student-requests/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": [
{
"id": "text",
"session_type": "ig_session",
"entity_id": "text",
"entity_name": "text",
"title": "text",
"description": "text",
"mode": "ONLINE",
"starts_at": "2026-01-01T00:00:00.000Z",
"ends_at": "2026-01-01T00:00:00.000Z",
"meeting_link": "text",
"venue": "text",
"max_participants": 1,
"status": "REQUESTED",
"requested_by_id": "text",
"requested_by_name": "text",
"requested_by_muid": "text",
"created_at": "2026-01-01T00:00:00.000Z"
}
]
}Approve or reject a student's session request. Only mentors whose scope covers the session's entity may act on it. When approving, optional overrides for starts_at, ends_at, mode, meeting_link, and venue allow the mentor to adjust logistics.
Allows a mentor to approve or reject a student's session request.
On APPROVE:
- Optional overrides (starts_at, ends_at, mode, meeting_link, venue) are applied so the mentor can adjust the proposed time / logistics.
- The session transitions from REQUESTED → PENDING_APPROVAL.
- created_by is updated to the approving mentor so the session appears in their dashboard and they can edit/cancel it using existing APIs.
- requested_by is left untouched — permanent audit trail.
On REJECT:
- The session transitions from REQUESTED → REJECTED.
- requested_by remains set; the student can view their rejected requests.
APPROVED- APPROVEDREJECTED- REJECTED
ONLINE- OnlineOFFLINE- OfflineHYBRID- Hybrid
No response body
No content
PATCH /api/v1/dashboard/mentor/session/student-requests/{session_id}/verify/ HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 150
{
"status": "APPROVED",
"starts_at": "2026-01-01T00:00:00.000Z",
"ends_at": "2026-01-01T00:00:00.000Z",
"mode": "ONLINE",
"meeting_link": "text",
"venue": "text"
}No response body
No content
List all session requests made by the logged-in student.
Filter by status: REQUESTED, PENDING_APPROVAL, REJECTED, etc.
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/session/student/my-requests/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": [
{
"id": "text",
"session_type": "ig_session",
"entity_id": "text",
"entity_name": "text",
"title": "text",
"description": "text",
"mode": "ONLINE",
"starts_at": "2026-01-01T00:00:00.000Z",
"ends_at": "2026-01-01T00:00:00.000Z",
"meeting_link": "text",
"venue": "text",
"max_participants": 1,
"status": "REQUESTED",
"requested_by_id": "text",
"requested_by_name": "text",
"requested_by_muid": "text",
"created_at": "2026-01-01T00:00:00.000Z"
}
]
}Request a mentorship session from the mentor(s) of a campus, company, or IG. The student must be a verified member of the target entity. The session starts in REQUESTED status and waits for a mentor to approve or reject it.
Used by students to create a session request.
All sessions are Interest-Group scoped, so only ig_session requests are
accepted; company/campus session types are rejected.
Validates:
- The session_type is ig_session and the student is a member of the target Interest Group (entity_id).
- Time constraints (starts_at < ends_at, starts_at in future).
- Mode / venue / meeting-link consistency (same rules as SessionCreateSerializer).
- No duplicate pending request (same student + entity + title + starts_at).
ig_session- IG Sessioncampus_session- Campus Sessioncompany_session- Company Session
ONLINE- OnlineOFFLINE- OfflineHYBRID- Hybrid
falseExample: false200Example: 200POST /api/v1/dashboard/mentor/session/student/request/ HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 246
{
"id": "text",
"session_type": "ig_session",
"entity_id": "text",
"title": "text",
"description": "text",
"mode": "ONLINE",
"starts_at": "2026-01-01T00:00:00.000Z",
"ends_at": "2026-01-01T00:00:00.000Z",
"meeting_link": "text",
"venue": "text",
"max_participants": 1
}{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"id": "text",
"session_type": "ig_session",
"entity_id": "text",
"title": "text",
"description": "text",
"mode": "ONLINE",
"starts_at": "2026-01-01T00:00:00.000Z",
"ends_at": "2026-01-01T00:00:00.000Z",
"meeting_link": "text",
"venue": "text",
"max_participants": 1
}
}Delete a mentorship session.
No response body
No content
DELETE /api/v1/dashboard/mentor/session/update/{session_id}/ HTTP/1.1
Accept: */*
No response body
No content
Update or cancel a mentorship session.
ONLINE- OnlineOFFLINE- OfflineHYBRID- Hybrid
falseExample: false200Example: 200PATCH /api/v1/dashboard/mentor/session/update/{session_id}/ HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 187
{
"title": "text",
"description": "text",
"mode": "ONLINE",
"starts_at": "2026-01-01T00:00:00.000Z",
"ends_at": "2026-01-01T00:00:00.000Z",
"meeting_link": "text",
"venue": "text",
"max_participants": 1
}{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"title": "text",
"description": "text",
"mode": "ONLINE",
"starts_at": "2026-01-01T00:00:00.000Z",
"ends_at": "2026-01-01T00:00:00.000Z",
"meeting_link": "text",
"venue": "text",
"max_participants": 1
}
}Check the status of a mentor registration.
No response body
No content
GET /api/v1/dashboard/mentor/status/ HTTP/1.1
Accept: */*
No response body
No content
List all tasks submitted by the authenticated mentor (filtered by requested_by). Supports pagination, search, and sort.
Filter by approval_status: pending | approved | rejected
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/tasks/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"data": [
{
"ANY_ADDITIONAL_PROPERTY": "anything"
}
],
"pagination": {
"ANY_ADDITIONAL_PROPERTY": "anything"
}
}
}Create a new task for an IG the mentor belongs to. The task is saved with approval_status='pending' and active=False until an admin approves it. Accepts an optional skill_ids list (array of active skill UUIDs) alongside the task fields — mirrors admin task creation behaviour.
Mirrors admin TaskModifySerializer field-for-field. Locked fields (active, approval_status, requested_by, requested_at) are injected by the view via serializer.save(**overrides).
Task submitted for approval.
No content
POST /api/v1/dashboard/mentor/tasks/ HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 161
{
"hashtag": "text",
"title": "text",
"karma": 1,
"usage_count": 1,
"description": "text",
"type": "text",
"level": "text",
"ig": "text",
"created_by": "text",
"updated_by": "text"
}Task submitted for approval.
No content
Retrieve the detail of a specific task submitted by the mentor.
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/tasks/{task_id}/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": {
"id": "text",
"hashtag": "text",
"discord_link": "text",
"title": "text",
"description": "text",
"karma": 1,
"channel": "text",
"type": "text",
"active": true,
"variable_karma": true,
"usage_count": 1,
"level": "text",
"org": "text",
"ig": "text",
"event": "text",
"bonus_karma": 1,
"bonus_time": "2026-01-01T00:00:00.000Z",
"approval_status": "approved",
"rejection_reason": "text",
"reviewed_at": "2026-01-01T00:00:00.000Z",
"requested_by_name": "text",
"requested_at": "2026-01-01T00:00:00.000Z",
"skills": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"updated_at": "2026-01-01T00:00:00.000Z"
}
}Update a task submitted by the mentor. Regardless of the current approval_status, the task reverts to 'pending' and active=False after editing (triggering re-approval). If the task was previously approved, it is deactivated until re-approved. Accepts optional skill_ids to replace the current skill links.
Partial update serializer — same writable fields as create. The view injects approval_status / active / review-reset fields via save().
Task updated and re-submitted for approval.
No content
PUT /api/v1/dashboard/mentor/tasks/{task_id}/ HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 141
{
"hashtag": "text",
"title": "text",
"karma": 1,
"usage_count": 1,
"description": "text",
"type": "text",
"level": "text",
"ig": "text",
"updated_by": "text"
}Task updated and re-submitted for approval.
No content
Delete a task submitted by the mentor. Only allowed when approval_status is 'pending'. Approved or rejected tasks cannot be deleted.
Task deleted successfully.
No content
DELETE /api/v1/dashboard/mentor/tasks/{task_id}/ HTTP/1.1
Accept: */*
Task deleted successfully.
No content
Returns only the Interest Groups the authenticated mentor belongs to (active MENTOR assignment). Use this list to populate the IG selector when creating a task.
falseExample: false200Example: 200GET /api/v1/dashboard/mentor/tasks/ig-dropdown/ HTTP/1.1
Accept: */*
{
"hasError": false,
"statusCode": 200,
"message": {
"general": [
"text"
]
},
"response": [
{
"id": "text",
"name": "text"
}
]
}Verify or reject a mentor application. Platform admins can verify any application; a Company's owner can verify COMPANY_MENTOR applications scoped to their own company.
APPROVED- APPROVEDREJECTED- REJECTED
No response body
No content
PATCH /api/v1/dashboard/mentor/verify/{mentor_id}/ HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 48
{
"status": "APPROVED",
"verification_note": "text"
}No response body
No content
Last updated
Was this helpful?

