Mentor privacy rules (profileVisibility)

Every MentorCard returned by the endpoints below hides direct contact details and applies the mentor's own profileVisibility choice:

FieldNotes
anonymousdisplayName and profileImageCode are always omitted.
semi_anonymousprofileImageCode omitted; displayName shown in partial form (first name + last initial).
visible_after_acceptancedisplayName and profileImageCode omitted until the student's request is accepted.
GET
/mentors
Browse mentors

Returns available, complete, non-full mentors as a paged list of MentorCard. Excludes mentors either side has blocked.

Query

FieldNotes
searchOptional. Matches occupation, industry, interests, discussion topics, summary.
locationArea, tagOptional filters.
page, pageSizeOptional, default 1 / 20.

Response

{
  "items": [
    {
      "mentorUserId": 2,
      "occupation": "Senior Auditor",
      "industry": "Accounting",
      "tags": [
        "Auditor",
        "Accounting"
      ],
      "isAvailable": true
    }
  ],
  "page": 1,
  "pageSize": 20,
  "totalItems": 1
}
GET
/mentor-suggestions
Suggested mentors

Scores available mentors against the student's tags, location, and mentor availability - exact tag matches score higher than related/synonym matches. Requires a complete student profile (400 otherwise).

Response

{
  "suggestions": [
    {
      "mentorUserId": 2,
      "occupation": "Senior Auditor",
      "tags": [
        "Auditor"
      ],
      "isAvailable": true,
      "matchScore": 15
    }
  ]
}
GET
/mentor/:id
Get one mentor

Returns the mentor card plus the current user's existing requestStatus/connectionStatus with them (if any) and simple action flags.

Response

{
  "mentor": {
    "mentorUserId": 2,
    "occupation": "Senior Auditor"
  },
  "canShowInterest": true,
  "canMessage": false
}
GET
/interest-requests
List interest requests

Students see requests they sent; mentors see requests they received. Each item is an InterestRequestDetail including both parties' user summary and profile.

Query

FieldNotes
status, page, pageSizeAll optional.
POST
/interest-requests
Show interest in a mentor

Student-only. Validates the mentor is available and not at capacity, that neither user has blocked the other, and that there is no existing open request, then creates a Messaging System conversation and emails the mentor.

Request fields

FieldNotes
mentorUserIdRequired.
introductionMessageOptional. Added as the conversation's first message.

Response

{
  "interestRequest": {
    "id": 10,
    "status": "pending"
  },
  "conversationId": 501
}
GET
/interest-request/:id
Get one interest request

Returns the full InterestRequestDetail. 403 unless the current user is the student, the mentor, or an admin.

POST
/interest-request/:id/accept
Mentor accepts a request

Only the mentor on the request. Re-checks capacity, then sets the request to accepted and creates an active MentorConnection. Notifies the student.

Request fields

FieldNotes
responseMessageOptional.

Response

{
  "interestRequest": {
    "id": 10,
    "status": "accepted"
  },
  "connection": {
    "id": 30,
    "status": "active"
  }
}
POST
/interest-request/:id/decline
Mentor declines a request

Only the mentor on the request, and only while it is not already accepted/declined/cancelled/expired. Notifies the student with a neutral message.

Request fields

FieldNotes
responseMessageOptional.
POST
/interest-request/:id/request-more-info
Mentor asks for more information

Sets the request to more_information_requested and posts the message into the linked conversation.

Request fields

FieldNotes
messageRequired.
POST
/interest-request/:id/cancel
Student cancels a request

Only the requesting student, and only before the request is accepted.

Request fields

FieldNotes
reasonOptional.