Users — admin API
The /users service is the server-side counterpart to /account:
where /account acts as the logged-in end-user, /users lets your backend
manage any user in the project. Every call needs a server API key (X-Appwrite-Key).
Create, list & inspect
curl
# create a user (password optional; omit for a passwordless/OAuth-only account)
curl -X POST "https://base.finiteskills.com/v1/users" -H "X-Appwrite-Project: <YOUR_PROJECT_ID>" \
-H "X-Appwrite-Key: <API_KEY>" -H "Content-Type: application/json" \
-d '{"userId":"unique()","email":"user@example.com","password":"password123","name":"Jane"}'
# list (supports queries[]=… like documents) / get one
GET /users
GET /users/{id}
Manage a user
Endpoints
PATCH /users/{id} { email, name, phone, password } # update profile fields
PATCH /users/{id}/status { status: true|false } # enable / block
PATCH /users/{id}/labels { labels: ["pro","beta"] } # assign labels (usable as roles)
PATCH /users/{id}/prefs { prefs: { theme: "dark" } } # arbitrary per-user prefs
GET /users/{id}/sessions # list active sessions
DELETE /users/{id}/sessions # revoke all sessions
DELETE /users/{id}/mfa # reset the users MFA factors
DELETE /users/{id} # delete the user
Bulk import
Migrate users from another system in one call. An existing password hash is preserved verbatim (e.g. a
scrypt$… value), so users keep their passwords without a reset:
POST /users/import
{
"users": [
{ "userId": "unique()", "email": "a@example.com", "name": "A",
"passwordHash": "scrypt$..." },
{ "userId": "unique()", "email": "b@example.com", "name": "B" }
]
}
Impersonation
POST /users/{id}/tokens mints a real session (and JWT) for that user without their password — for
support tooling or "log in as user" admin flows. Treat the returned secret like a password.
curl
curl -X POST "https://base.finiteskills.com/v1/users/USER_ID/tokens" \
-H "X-Appwrite-Project: <YOUR_PROJECT_ID>" -H "X-Appwrite-Key: <API_KEY>"