Returns the authenticated user's local record, profiles (if any), and simple dashboard counts. 404 if no local user exists yet for this Auth account.
Response
{
"user": {
"id": 1,
"userType": "student",
"email": "sam@example.com",
"displayName": "Sam Student",
"status": "active"
},
"studentProfile": null,
"mentorProfile": null,
"counts": {
"pendingRequests": 0,
"activeConnections": 0,
"unreadMessages": 0
}
}
Creates the local mentoring user linked to the JWT sub. Auth accounts are created by the Auth service, not here - this only creates the local profile row. 409 if one already exists.
Request fields
| Field | Notes |
|---|---|
userType | Required. One of student, mentor, admin. |
email | Required. |
displayName | Required. |
mobileNumber | Optional. Doubles as the WhatsApp contact number once a connection is accepted. |
profileImageCode | Optional. Code returned by Imaginary after uploading the photo. |
Updates basic account fields. Every field is optional; only supplied fields change. Audited to audit_log.
Request fields
| Field | Notes |
|---|---|
email | Optional. |
mobileNumber | Optional. |
displayName | Optional. |
profileImageCode | Optional. |
404 if the current user has not created one yet.
Creates the student profile if missing. If one already exists, the supplied fields are applied as an update and profileStatus is recomputed.
Request fields
| Field | Notes |
|---|---|
fieldOfStudy | Required for the profile to become complete. |
careerInterests | Required for the profile to become complete. |
discussionTopics | Required for the profile to become complete. |
locationArea, currentStudies, qualification, shortIntroduction, cvFileCode | Optional. |
tags | Optional array of matching keywords, e.g. ["Accounting", "Audit"]. See GET /tags. |
Why profileStatus matters
Only a complete student profile is eligible for GET /mentor-suggestions. profileStatus is computed by the server - it is never accepted from the client.
Partial update; only supplied fields change. Recomputes profileStatus after the update. 404 if no profile exists yet.
Includes counts.activeMentees and counts.remainingCapacity alongside the profile. 404 if not created yet.
A user has at most one mentor profile. 409 if one already exists.
Request fields
| Field | Notes |
|---|---|
occupation, industry, discussionTopics | Required for the profile to become complete. |
locationArea, educationBackground, professionalExperience, interests, shortProfileSummary, cvFileCode | Optional. |
maxActiveMentees | Optional, defaults to 1. Maximum active mentees at one time. |
isAvailable | Optional, defaults to true. |
profileVisibility | Optional, defaults to anonymous. One of anonymous, semi_anonymous, visible_after_acceptance - controls what students see before accepting, see the Discovery docs. |
tags | Optional array of matching keywords. |
Partial update, including changing profileVisibility or maxActiveMentees at any time. 404 if no profile exists yet.
A lighter-weight endpoint for the common case of toggling availability or adjusting the mentee limit without resending the whole profile. Reducing the limit does not end existing connections.
Request fields
| Field | Notes |
|---|---|
isAvailable | Required. |
maxActiveMentees | Optional. |
Returns the active tag keywords used for student/mentor matching, e.g. Accounting, Audit, Software Development.
Response
{
"tags": [
"Accounting",
"Audit",
"Auditing",
"Auditor",
"Software Development",
"Career Advice"
]
}
Looks up known keywords and simple synonyms for text the user typed, so they can confirm tags rather than free-typing them onto their profile.
Query
| Field | Notes |
|---|---|
text | Required. Example: ?text=Audit. |
Response
{
"tags": [
"Audit",
"Auditor",
"Auditing",
"Accounting"
]
}