Users and their privileges.
The endpoints are served from /new_api/users.
1. Authentication
Logging in and managing the short lived access token that it returns.
1.1. Login
Logging in is not part of the new API - it is done with POST /minerva/api/doLogin in the old API.
It is intended only for the communication between the minerva frontend and the backend. Scripts, plugins and other clients should authenticate with long lived auth tokens instead - see the Auth tokens section below.
1.2. Access tokens
Refreshing and revoking the access token obtained by logging in. Like the login itself, these endpoints are intended only for the communication between the minerva frontend and the backend - scripts, plugins and other clients should use long lived auth tokens instead. See full documentation.
2. OAuth providers
External OAuth providers configured on the instance for signing in. See full documentation.
3. Auth tokens
Long lived auth tokens created for a user. See full documentation.
4. Get user by id
Returns the profile of a single user: login, name, surname, email, ORCID identifier and the colour settings used when rendering that user’s overlays. Only an admin or a curator can read an arbitrary user; other users can only read their own account.
4.1. HTTP request
GET /minerva/new_api/users/1 HTTP/1.1
4.2. Path Parameters
| Parameter | Description |
|---|---|
|
user id |
4.3. CURL sample
$ curl 'https://minerva-dev.lcsb.uni.lu/minerva/new_api/users/1' -X GET \
-H 'Authorization: Bearer xxxxxxxx'
4.4. HTTP response
HTTP/1.1 200 OK
4.5. Response Fields
| Path | Type | Description |
|---|---|---|
|
|
identifier |
|
|
user login |
|
|
orcid identifier |
|
|
first name |
|
|
last name |
|
|
email address |
|
|
is user removed |
|
|
is the account active |
|
|
is the account email confirmed |
|
|
is user connected to ldap |
|
|
is the ldap account available |
|
|
did user accept terms of consent |
|
|
last activity timestamp |
|
|
list of privileges |
|
|
privilege name |
|
|
associated object |
|
|
timestamp of the last login |
4.6. Sample Response
{
"id" : 1,
"login" : "admin",
"name" : "",
"surname" : "",
"email" : "",
"orcidId" : null,
"removed" : false,
"connectedToLdap" : false,
"termsOfUseConsent" : false,
"privileges" : [ {
"privilegeType" : "READ_PROJECT",
"objectId" : "empty"
}, {
"privilegeType" : "IS_ADMIN",
"objectId" : null
}, {
"privilegeType" : "IS_CURATOR",
"objectId" : null
} ],
"active" : true,
"confirmed" : true,
"lastLoginDate" : "2026-09-23T23:13:15Z",
"ldapAccountAvailable" : false,
"lastActive" : "2026-09-23T23:13:23Z"
}
5. List all users
Returns a page of accounts, each with its privileges, activation and email confirmation flags and LDAP status. Only admins and curators can call it.
|
Note
|
The result is paged - use the page and size query parameters to
walk through it.
|
5.1. HTTP request
GET /minerva/new_api/users/ HTTP/1.1
5.2. Query Parameters
| Parameter | Description |
|---|---|
|
index of the page to fetch, counted from 0; 0 by default |
|
number of entries on a page; 20 by default, 10000 at most |
5.3. CURL sample
$ curl 'https://minerva-dev.lcsb.uni.lu/minerva/new_api/users/' -X GET \
-H 'Authorization: Bearer xxxxxxxx'
5.4. HTTP response
HTTP/1.1 200 OK
5.5. Response Fields
| Path | Type | Description |
|---|---|---|
|
|
list of users on the page |
|
|
identifier |
|
|
user login |
|
|
orcid identifier |
|
|
first name |
|
|
last name |
|
|
email address |
|
|
is user removed |
|
|
is the account active |
|
|
is the account email confirmed |
|
|
is user connected to ldap |
|
|
is the ldap account available |
|
|
did user accept terms of consent |
|
|
last activity timestamp |
|
|
list of privileges |
|
|
privilege name |
|
|
associated object |
|
|
timestamp of the last login |
|
|
total number of pages |
|
|
total number of elements |
|
|
number of elements on this page |
|
|
page size |
|
|
page number |
5.6. Sample Response
{
"content" : [ {
"id" : 1,
"login" : "admin",
"name" : "",
"surname" : "",
"email" : "",
"orcidId" : null,
"removed" : false,
"connectedToLdap" : false,
"termsOfUseConsent" : false,
"privileges" : [ {
"privilegeType" : "READ_PROJECT",
"objectId" : "empty"
}, {
"privilegeType" : "IS_ADMIN",
"objectId" : null
}, {
"privilegeType" : "IS_CURATOR",
"objectId" : null
} ],
"active" : true,
"confirmed" : true,
"lastLoginDate" : "2026-09-23T23:13:15Z",
"ldapAccountAvailable" : false,
"lastActive" : "2026-09-23T23:13:23Z"
}, {
"id" : 3,
"login" : "anonymous",
"name" : "",
"surname" : "",
"email" : null,
"orcidId" : null,
"removed" : false,
"connectedToLdap" : false,
"termsOfUseConsent" : false,
"privileges" : [ {
"privilegeType" : "READ_PROJECT",
"objectId" : "empty"
} ],
"active" : true,
"confirmed" : true,
"lastLoginDate" : null,
"ldapAccountAvailable" : false,
"lastActive" : null
} ],
"totalPages" : 1,
"totalElements" : 2,
"numberOfElements" : 2,
"size" : 20,
"number" : 0
}
6. Add user
Creates an account on behalf of somebody else: the admin sets the login, the password and the active flag directly, so the account skips the self-registration and email confirmation flow.
Fails if the login is already taken.
6.1. HTTP request
POST /minerva/new_api/users/ HTTP/1.1
6.2. Request Fields
| Path | Type | Description |
|---|---|---|
|
|
first name |
|
|
family name |
|
|
login used to authenticate the user |
|
|
orcid identifier (https://orcid.org/) |
|
|
initial password of the account |
|
|
email address of the user |
|
|
is the account connected to ldap |
|
|
is active |
|
|
did user consent to the terms of use |
6.3. CURL sample
$ curl 'https://minerva-dev.lcsb.uni.lu/minerva/new_api/users/' -X POST \
-H 'Authorization: Bearer xxxxxxxx' \
-d '{"login":"test_user","name":"Minta","orcidId":null,"surname":"Morar","password":"test_pass","email":"jamar.yost@yahoo.com","connectedToLdap":false,"active":true,"termsOfUseConsent":false}' \
-H 'Content-Type: application/json'
6.4. HTTP response
HTTP/1.1 201 Created
6.5. Response Fields
| Path | Type | Description |
|---|---|---|
|
|
identifier |
|
|
user login |
|
|
orcid identifier |
|
|
first name |
|
|
last name |
|
|
email address |
|
|
is user removed |
|
|
is the account active |
|
|
is the account email confirmed |
|
|
is user connected to ldap |
|
|
is the ldap account available |
|
|
did user accept terms of consent |
|
|
last activity timestamp |
|
|
list of privileges |
|
|
privilege name |
|
|
associated object |
|
|
timestamp of the last login |
6.6. Sample Response
{
"id" : 49,
"login" : "test_user",
"name" : "Minta",
"surname" : "Morar",
"email" : "jamar.yost@yahoo.com",
"orcidId" : null,
"removed" : false,
"connectedToLdap" : false,
"termsOfUseConsent" : false,
"privileges" : [ ],
"active" : true,
"confirmed" : true,
"lastLoginDate" : null,
"ldapAccountAvailable" : false,
"lastActive" : null
}
7. Update user
Replaces the profile of an existing account; all fields must be sent, the login cannot be changed, and only an admin may change active or connectedToLdap.
Users can update their own account, admins can update anybody’s; switching an inactive account to active sends the user an "account activated" email.
|
Note
|
Supports optimistic locking via the If-Match header.
|
7.1. HTTP request
PUT /minerva/new_api/users/47 HTTP/1.1
7.2. Path Parameters
| Parameter | Description |
|---|---|
|
user id |
7.3. Request Fields
| Path | Type | Description |
|---|---|---|
|
|
first name |
|
|
family name |
|
|
login used to authenticate the user |
|
|
orcid identifier (https://orcid.org/) |
|
|
initial password of the account |
|
|
email address of the user |
|
|
is the account connected to ldap |
|
|
is active |
|
|
did user consent to the terms of use |
7.4. CURL sample
$ curl 'https://minerva-dev.lcsb.uni.lu/minerva/new_api/users/47' -X PUT \
-H 'Authorization: Bearer xxxxxxxx' \
-d '{"login":"test_user","name":"Corrine","orcidId":null,"surname":"Dach","password":"test_pass","email":"lorrine.hilpert@gmail.com","connectedToLdap":false,"active":true,"termsOfUseConsent":false}' \
-H 'Content-Type: application/json'
7.5. HTTP response
HTTP/1.1 200 OK
7.6. Response Fields
| Path | Type | Description |
|---|---|---|
|
|
identifier |
|
|
user login |
|
|
orcid identifier |
|
|
first name |
|
|
last name |
|
|
email address |
|
|
is user removed |
|
|
is the account active |
|
|
is the account email confirmed |
|
|
is user connected to ldap |
|
|
is the ldap account available |
|
|
did user accept terms of consent |
|
|
last activity timestamp |
|
|
list of privileges |
|
|
privilege name |
|
|
associated object |
|
|
timestamp of the last login |
7.7. Sample Response
{
"id" : 47,
"login" : "test_user",
"name" : "Corrine",
"surname" : "Dach",
"email" : "lorrine.hilpert@gmail.com",
"orcidId" : null,
"removed" : false,
"connectedToLdap" : false,
"termsOfUseConsent" : false,
"privileges" : [ ],
"active" : true,
"confirmed" : true,
"lastLoginDate" : null,
"ldapAccountAvailable" : false,
"lastActive" : null
}
8. Grant user privilege
Adds a privilege to the user: IS_ADMIN and IS_CURATOR are global, while READ_PROJECT grants access to a single project named in objectId.
Admin only; the updated user, including the full privilege list, is returned.
8.1. HTTP request
POST /minerva/new_api/users/55:grant_privilege HTTP/1.1
8.2. Path Parameters
| Parameter | Description |
|---|---|
|
user id |
8.3. Request Fields
| Path | Type | Description |
|---|---|---|
|
|
typo of privilege |
|
|
referenced object id (if necessary) |
8.4. CURL sample
$ curl 'https://minerva-dev.lcsb.uni.lu/minerva/new_api/users/55:grant_privilege' -X POST \
-H 'Authorization: Bearer xxxxxxxx' \
-d '{"privilegeType":"IS_CURATOR","objectId":null}' \
-H 'Content-Type: application/json'
8.5. HTTP response
HTTP/1.1 200 OK
8.6. Response Fields
| Path | Type | Description |
|---|---|---|
|
|
identifier |
|
|
user login |
|
|
orcid identifier |
|
|
first name |
|
|
last name |
|
|
email address |
|
|
is user removed |
|
|
is the account active |
|
|
is the account email confirmed |
|
|
is user connected to ldap |
|
|
is the ldap account available |
|
|
did user accept terms of consent |
|
|
last activity timestamp |
|
|
list of privileges |
|
|
privilege name |
|
|
associated object |
|
|
timestamp of the last login |
8.7. Sample Response
{
"id" : 55,
"login" : "test_user",
"name" : "Garret",
"surname" : "Kuphal",
"email" : "tanesha.streich@yahoo.com",
"orcidId" : null,
"removed" : false,
"connectedToLdap" : false,
"termsOfUseConsent" : false,
"privileges" : [ ],
"active" : true,
"confirmed" : true,
"lastLoginDate" : null,
"ldapAccountAvailable" : false,
"lastActive" : "2026-09-23T23:13:23Z"
}
9. Revoke user privilege
Takes a previously granted privilege away from the user - for READ_PROJECT the project is identified by objectId, global privileges take no objectId.
Admin only; the updated user, including the remaining privileges, is returned.
9.1. HTTP request
POST /minerva/new_api/users/46:revoke_privilege HTTP/1.1
9.2. Path Parameters
| Parameter | Description |
|---|---|
|
user id |
9.3. Request Fields
| Path | Type | Description |
|---|---|---|
|
|
typo of privilege |
|
|
referenced object id (if necessary) |
9.4. CURL sample
$ curl 'https://minerva-dev.lcsb.uni.lu/minerva/new_api/users/46:revoke_privilege' -X POST \
-H 'Authorization: Bearer xxxxxxxx' \
-d '{"privilegeType":"IS_CURATOR","objectId":null}' \
-H 'Content-Type: application/json'
9.5. HTTP response
HTTP/1.1 200 OK
9.6. Response Fields
| Path | Type | Description |
|---|---|---|
|
|
identifier |
|
|
user login |
|
|
orcid identifier |
|
|
first name |
|
|
last name |
|
|
email address |
|
|
is user removed |
|
|
is the account active |
|
|
is the account email confirmed |
|
|
is user connected to ldap |
|
|
is the ldap account available |
|
|
did user accept terms of consent |
|
|
last activity timestamp |
|
|
list of privileges |
|
|
privilege name |
|
|
associated object |
|
|
timestamp of the last login |
9.7. Sample Response
{
"id" : 46,
"login" : "test_user",
"name" : "Lauretta",
"surname" : "Haley",
"email" : "trey.murazik@yahoo.com",
"orcidId" : null,
"removed" : false,
"connectedToLdap" : false,
"termsOfUseConsent" : false,
"privileges" : [ {
"privilegeType" : "IS_CURATOR",
"objectId" : null
} ],
"active" : true,
"confirmed" : false,
"lastLoginDate" : null,
"ldapAccountAvailable" : false,
"lastActive" : null
}
10. Delete user
Removes the account together with all data overlays owned by it; this is a hard delete and cannot be undone. Admin only, and the built-in guest (anonymous) account is rejected.
|
Note
|
Supports optimistic locking via the If-Match header.
|
10.1. HTTP request
DELETE /minerva/new_api/users/51 HTTP/1.1
10.2. Path Parameters
| Parameter | Description |
|---|---|
|
user id |
10.3. CURL sample
$ curl 'https://minerva-dev.lcsb.uni.lu/minerva/new_api/users/51' -X DELETE \
-H 'Authorization: Bearer xxxxxxxx'
10.4. HTTP response
HTTP/1.1 200 OK
11. Request password reset over email
First step of the password reset flow: generates a one-time token valid for 24 hours and emails a reset link to the address stored for the given login.
No authentication is needed, but the account must have an email address and must not be authenticated over LDAP, and the instance must have MINERVA_ROOT configured and be able to send emails.
11.1. HTTP request
POST /minerva/new_api/users/test_user:request_reset_password HTTP/1.1
11.2. Path Parameters
| Parameter | Description |
|---|---|
|
user login |
11.3. CURL sample
$ curl 'https://minerva-dev.lcsb.uni.lu/minerva/new_api/users/test_user:request_reset_password' -X POST
11.4. HTTP response
HTTP/1.1 200 OK
12. Reset password using token obtained over email
Second step of the password reset flow: consumes the token from the email and sets the new password on the account it belongs to. The call is unauthenticated - the token identifies the user - and the token is discarded afterwards, so an expired or already used one is rejected.
12.1. HTTP request
POST /minerva/new_api/users:reset_password HTTP/1.1
12.2. Request Fields
| Path | Type | Description |
|---|---|---|
|
|
new password |
|
|
reset password token obtained using email |
12.3. CURL sample
$ curl 'https://minerva-dev.lcsb.uni.lu/minerva/new_api/users:reset_password' -X POST \
-d '{"token":"06941070-0357-4800-0353-207283080015","password":"pass2"}' \
-H 'Content-Type: application/json'
12.4. HTTP response
HTTP/1.1 200 OK
13. Register new user
Self-service sign up, called without authentication: it creates an inactive, unconfirmed account with default privileges and emails a confirmation link that is valid for 24 hours. It works only when the instance allows automatic registration and can send emails; the account cannot be used to log in until the email is confirmed (see below).
13.1. HTTP request
POST /minerva/new_api/users:register_user HTTP/1.1
13.2. Request Fields
| Path | Type | Description |
|---|---|---|
|
|
user email (and login) |
|
|
password chosen for the new account |
|
|
given name) |
|
|
family name |
13.3. CURL sample
$ curl 'https://minerva-dev.lcsb.uni.lu/minerva/new_api/users:register_user' -X POST \
-d '{"login":"test_user","name":"Elissa","orcidId":null,"surname":"Walker","password":"test_pass","email":"cletus.mitchell@gmail.com","connectedToLdap":false,"active":false,"termsOfUseConsent":false}' \
-H 'Content-Type: application/json'
13.4. HTTP response
HTTP/1.1 200 OK
13.5. Response Fields
| Path | Type | Description |
|---|---|---|
|
|
identifier |
|
|
user login |
|
|
orcid identifier |
|
|
first name |
|
|
last name |
|
|
email address |
|
|
is user removed |
|
|
is the account active |
|
|
is the account email confirmed |
|
|
is user connected to ldap |
|
|
is the ldap account available |
|
|
did user accept terms of consent |
|
|
last activity timestamp |
|
|
list of privileges |
|
|
privilege name |
|
|
associated object |
|
|
timestamp of the last login |
13.6. Sample Response
{
"id" : 48,
"login" : "test_user",
"name" : "Elissa",
"surname" : "Walker",
"email" : "cletus.mitchell@gmail.com",
"orcidId" : null,
"removed" : false,
"connectedToLdap" : false,
"termsOfUseConsent" : false,
"privileges" : [ ],
"active" : false,
"confirmed" : false,
"lastLoginDate" : null,
"ldapAccountAvailable" : false,
"lastActive" : null
}
14. Confirm email
Completes the registration by consuming the token from the confirmation email, which marks the account as confirmed.
Depending on the instance configuration the account is either activated immediately or left inactive until an administrator approves it - the returned message says which of the two happened.
14.1. HTTP request
POST /minerva/new_api/users/test_user:confirm_email?token=9fc4abe6-0185-40ab-88d1-2f7322be0edc HTTP/1.1
14.2. Path Parameters
| Parameter | Description |
|---|---|
|
user login |
14.3. Form Parameters
| Parameter | Description |
|---|---|
|
token obtained in the registration email |
14.4. CURL sample
$ curl 'https://minerva-dev.lcsb.uni.lu/minerva/new_api/users/test_user:confirm_email?token=9fc4abe6-0185-40ab-88d1-2f7322be0edc' -X POST \
-d 'token=9fc4abe6-0185-40ab-88d1-2f7322be0edc' \
-H 'Content-Type: application/octet-stream'
14.5. HTTP response
HTTP/1.1 200 OK
14.6. Response Fields
| Path | Type | Description |
|---|---|---|
|
|
detailed information about the status |
|
|
|
14.7. Sample Response
{
"message" : "Your email is confirmed. You need to wait for admin approval before you can login",
"status" : "OK"
}
15. Resend confirmation email
Generates a new confirmation token and sends the registration email again, for an account that was registered but never confirmed - for instance when the original email was lost or its token expired.
The call is unauthenticated and identifies the account by login; it is rejected when the account does not exist, is already confirmed, or the instance cannot send emails or has no valid
MINERVA_ROOT configured.
15.1. HTTP request
POST /minerva/new_api/users/test_user:resend_confirm_email HTTP/1.1
15.2. Path Parameters
| Parameter | Description |
|---|---|
|
user login |
15.3. CURL sample
$ curl 'https://minerva-dev.lcsb.uni.lu/minerva/new_api/users/test_user:resend_confirm_email' -X POST
15.4. HTTP response
HTTP/1.1 200 OK
15.5. Response Fields
| Path | Type | Description |
|---|---|---|
|
|
|
15.6. Sample Response
{
"status" : "OK"
}