Skip to content

User

These endpoints manage the authenticated user’s own profile, display preferences, and account. For data export/import, see Import & Export. For API tokens, see API Tokens.

All endpoints require authentication and operate only on the authenticated user’s own account.

GET /api/user/profile
Terminal window
curl https://your-instance.example.com/api/user/profile \
-H "Authorization: Bearer ntag_xxx"
{
"user": {
"id": "clxuser1",
"email": "ada@example.com",
"name": "Ada",
"surname": "Lovelace",
"theme": "DARK",
"dateFormat": "MDY",
"language": "en",
"graphMode": "individuals",
"emailVerified": true
}
}
PUT /api/user/profile
FieldTypeNotes
namestringRequired, 1-100 characters.
surnamestring or null
nicknamestring or null
emailstringRequired, valid email.

If email changes, a verification email is sent and the account is marked unverified until confirmed.

Terminal window
curl -X PUT https://your-instance.example.com/api/user/profile \
-H "Authorization: Bearer ntag_xxx" \
-H "Content-Type: application/json" \
-d '{ "name": "Ada", "surname": "Lovelace", "email": "ada@example.com" }'
{ "user": { "id": "clxuser1", "email": "ada@example.com" }, "emailChanged": false }
PUT /api/user/password
FieldTypeNotes
currentPasswordstringRequired.
newPasswordstringRequired. Min 8 characters, must include uppercase, lowercase, a number, and a special character.
Terminal window
curl -X PUT https://your-instance.example.com/api/user/password \
-H "Authorization: Bearer ntag_xxx" \
-H "Content-Type: application/json" \
-d '{ "currentPassword": "OldPass1!", "newPassword": "NewPass2@" }'
{ "message": "Password updated" }

Each preference has its own small PUT endpoint. All return the updated user object (except language, see below).

PUT /api/user/theme

Body: { "theme": "LIGHT" | "DARK" }

Terminal window
curl -X PUT https://your-instance.example.com/api/user/theme \
-H "Authorization: Bearer ntag_xxx" \
-H "Content-Type: application/json" \
-d '{ "theme": "DARK" }'
PUT /api/user/date-format

Body: { "dateFormat": "MDY" | "DMY" | "YMD" }

PUT /api/user/name-order

Body: { "nameOrder": "WESTERN" | "EASTERN" }

PUT /api/user/name-display-format

Body: { "nameDisplayFormat": "FULL" | "NICKNAME_PREFERRED" | "SHORT" }

PUT /api/user/graph-display

Body: { "graphMode": "individuals" | "bubbles" }

Terminal window
curl -X PUT https://your-instance.example.com/api/user/graph-display \
-H "Authorization: Bearer ntag_xxx" \
-H "Content-Type: application/json" \
-d '{ "graphMode": "bubbles" }'
PUT /api/user/geocoding

Body: { "geocodingEnabled": true }. Re-enabling queues previously skipped addresses for the background geocoder.

{ "user": { "id": "clxuser1", "geocodingEnabled": true } }
PUT /api/user/language

Body: { "language": "en" | "es-ES" | "ja-JP" | "nb-NO" | "de-DE" }

Terminal window
curl -X PUT https://your-instance.example.com/api/user/language \
-H "Authorization: Bearer ntag_xxx" \
-H "Content-Type: application/json" \
-d '{ "language": "es-ES" }'
{ "success": true, "language": "es-ES" }
POST /api/user/photo

multipart/form-data with a photo field. Cropped to 256x256, converted to JPEG, EXIF stripped.

Terminal window
curl -X POST https://your-instance.example.com/api/user/photo \
-H "Authorization: Bearer ntag_xxx" \
-F "photo=@ada.jpg"
{ "photo": "clxuser1-a1b2c3.jpg" }
DELETE /api/user/photo
Terminal window
curl -X DELETE https://your-instance.example.com/api/user/photo \
-H "Authorization: Bearer ntag_xxx"
{ "message": "Photo deleted" }
GET /api/photos/user
Terminal window
curl https://your-instance.example.com/api/photos/user \
-H "Authorization: Bearer ntag_xxx" \
-o me.jpg
DELETE /api/user/delete

Permanently deletes the account and all associated data. This cannot be undone.

FieldTypeNotes
passwordstringRequired for credential-based accounts (not OAuth/OIDC).
confirmationTextstringRequired, must be exactly "DELETE".
Terminal window
curl -X DELETE https://your-instance.example.com/api/user/delete \
-H "Authorization: Bearer ntag_xxx" \
-H "Content-Type: application/json" \
-d '{ "password": "CurrentPass1!", "confirmationText": "DELETE" }'
{ "message": "Account deleted" }