Settings API
Base path: /api/settings
All settings endpoints require JWT authentication via the Authorization: Bearer <token> header.
GET /api/settings/profile
Get the current user's profile.
Auth: Required (JWT) Feature gate: None
Response:
{
"success": true,
"data": {
"id": "user-uuid",
"email": "teacher@example.com",
"name": "Jane Doe",
"language": "en",
"plan": "pro",
"createdAt": "2026-01-15T10:00:00.000Z"
}
}
| Field | Type | Description |
|---|---|---|
id | string | User UUID |
email | string | User email address |
name | string | Display name |
language | "en" | "tr" | "fr" | "es" | "ar" | Preferred UI language |
plan | string | Current subscription plan |
createdAt | string | ISO 8601 account creation timestamp |
Errors:
| Status | Body | Condition |
|---|---|---|
| 404 | { "success": false, "error": "User not found" } | No user matches the JWT subject |
| 500 | { "success": false, "error": "Failed to fetch profile" } | Database error |
PUT /api/settings/profile
Update the current user's display name.
Auth: Required (JWT) Feature gate: None
Request body:
{
"name": "Jane Doe"
}
| Field | Type | Required | Constraints |
|---|---|---|---|
name | string | Yes | Min 1, max 255 characters |
Response:
{
"success": true,
"message": "Profile updated"
}
Errors:
| Status | Body | Condition |
|---|---|---|
| 400 | { "success": false, "error": "Validation error: ..." } | Zod validation failure |
| 500 | { "success": false, "error": "Failed to update profile" } | Database error or user not found |
GET /api/settings/notifications
Get the current user's notification preferences.
Auth: Required (JWT) Feature gate: None
Response:
{
"success": true,
"data": {
"emailDigest": true,
"emailNewFeatures": true
}
}
| Field | Type | Description |
|---|---|---|
emailDigest | boolean | Whether the user receives email digest notifications |
emailNewFeatures | boolean | Whether the user receives new feature announcement emails |
Errors:
| Status | Body | Condition |
|---|---|---|
| 404 | { "success": false, "error": "User not found" } | No user matches the JWT subject |
| 500 | { "success": false, "error": "Failed to fetch notification preferences" } | Database error |
PUT /api/settings/notifications
Update the current user's notification preferences.
Auth: Required (JWT) Feature gate: None
Request body:
{
"emailDigest": true,
"emailNewFeatures": false
}
| Field | Type | Required | Constraints |
|---|---|---|---|
emailDigest | boolean | Yes | - |
emailNewFeatures | boolean | Yes | - |
Response:
{
"success": true,
"message": "Notification preferences updated"
}
Errors:
| Status | Body | Condition |
|---|---|---|
| 400 | { "success": false, "error": "Validation error: ..." } | Zod validation failure |
| 500 | { "success": false, "error": "Failed to update notification preferences" } | Database error or user not found |
PUT /api/settings/language
Update the current user's preferred UI language.
Auth: Required (JWT) Feature gate: None
Request body:
{
"language": "tr"
}
| Field | Type | Required | Constraints |
|---|---|---|---|
language | string | Yes | One of: en, tr, fr, es, ar |
Response:
{
"success": true,
"message": "Language updated"
}
Errors:
| Status | Body | Condition |
|---|---|---|
| 400 | { "success": false, "error": "Validation error: ..." } | Invalid language value |
| 500 | { "success": false, "error": "Failed to update language" } | Database error or user not found |