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

Table 1. /minerva/new_api/users/{userId}
Parameter Description

userId

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

id

Number

identifier

login

String

user login

orcidId

String

orcid identifier

name

String

first name

surname

String

last name

email

String

email address

removed

Boolean

is user removed

active

Boolean

is the account active

confirmed

Boolean

is the account email confirmed

connectedToLdap

Boolean

is user connected to ldap

ldapAccountAvailable

Boolean

is the ldap account available

termsOfUseConsent

Boolean

did user accept terms of consent

lastActive

String

last activity timestamp

privileges

Array

list of privileges

privileges[].privilegeType

String

privilege name

privileges[].objectId

String

associated object

lastLoginDate

String

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

page

index of the page to fetch, counted from 0; 0 by default

size

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

content

Array

list of users on the page

content[].id

Number

identifier

content[].login

String

user login

content[].orcidId

String

orcid identifier

content[].name

String

first name

content[].surname

String

last name

content[].email

String

email address

content[].removed

Boolean

is user removed

content[].active

Boolean

is the account active

content[].confirmed

Boolean

is the account email confirmed

content[].connectedToLdap

Boolean

is user connected to ldap

content[].ldapAccountAvailable

Boolean

is the ldap account available

content[].termsOfUseConsent

Boolean

did user accept terms of consent

content[].lastActive

String

last activity timestamp

content[].privileges

Array

list of privileges

content[].privileges[].privilegeType

String

privilege name

content[].privileges[].objectId

String

associated object

content[].lastLoginDate

String

timestamp of the last login

totalPages

Number

total number of pages

totalElements

Number

total number of elements

numberOfElements

Number

number of elements on this page

size

Number

page size

number

Number

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

name

String

first name

surname

String

family name

login

String

login used to authenticate the user

orcidId

String

orcid identifier (https://orcid.org/)

password

String

initial password of the account

email

String

email address of the user

connectedToLdap

Boolean

is the account connected to ldap

active

Boolean

is active

termsOfUseConsent

Boolean

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

id

Number

identifier

login

String

user login

orcidId

String

orcid identifier

name

String

first name

surname

String

last name

email

String

email address

removed

Boolean

is user removed

active

Boolean

is the account active

confirmed

Boolean

is the account email confirmed

connectedToLdap

Boolean

is user connected to ldap

ldapAccountAvailable

Boolean

is the ldap account available

termsOfUseConsent

Boolean

did user accept terms of consent

lastActive

String

last activity timestamp

privileges

Array

list of privileges

privileges[].privilegeType

String

privilege name

privileges[].objectId

String

associated object

lastLoginDate

String

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

Table 2. /minerva/new_api/users/{userId}
Parameter Description

userId

user id

7.3. Request Fields

Path Type Description

name

String

first name

surname

String

family name

login

String

login used to authenticate the user

orcidId

String

orcid identifier (https://orcid.org/)

password

String

initial password of the account

email

String

email address of the user

connectedToLdap

Boolean

is the account connected to ldap

active

Boolean

is active

termsOfUseConsent

Boolean

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

id

Number

identifier

login

String

user login

orcidId

String

orcid identifier

name

String

first name

surname

String

last name

email

String

email address

removed

Boolean

is user removed

active

Boolean

is the account active

confirmed

Boolean

is the account email confirmed

connectedToLdap

Boolean

is user connected to ldap

ldapAccountAvailable

Boolean

is the ldap account available

termsOfUseConsent

Boolean

did user accept terms of consent

lastActive

String

last activity timestamp

privileges

Array

list of privileges

privileges[].privilegeType

String

privilege name

privileges[].objectId

String

associated object

lastLoginDate

String

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

Table 3. /minerva/new_api/users/{userId}:grant_privilege
Parameter Description

userId

user id

8.3. Request Fields

Path Type Description

privilegeType

String

typo of privilege

objectId

String

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

id

Number

identifier

login

String

user login

orcidId

String

orcid identifier

name

String

first name

surname

String

last name

email

String

email address

removed

Boolean

is user removed

active

Boolean

is the account active

confirmed

Boolean

is the account email confirmed

connectedToLdap

Boolean

is user connected to ldap

ldapAccountAvailable

Boolean

is the ldap account available

termsOfUseConsent

Boolean

did user accept terms of consent

lastActive

String

last activity timestamp

privileges

Array

list of privileges

privileges[].privilegeType

String

privilege name

privileges[].objectId

String

associated object

lastLoginDate

String

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

Table 4. /minerva/new_api/users/{userId}:revoke_privilege
Parameter Description

userId

user id

9.3. Request Fields

Path Type Description

privilegeType

String

typo of privilege

objectId

String

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

id

Number

identifier

login

String

user login

orcidId

String

orcid identifier

name

String

first name

surname

String

last name

email

String

email address

removed

Boolean

is user removed

active

Boolean

is the account active

confirmed

Boolean

is the account email confirmed

connectedToLdap

Boolean

is user connected to ldap

ldapAccountAvailable

Boolean

is the ldap account available

termsOfUseConsent

Boolean

did user accept terms of consent

lastActive

String

last activity timestamp

privileges

Array

list of privileges

privileges[].privilegeType

String

privilege name

privileges[].objectId

String

associated object

lastLoginDate

String

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

Table 5. /minerva/new_api/users/{userId}
Parameter Description

userId

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

Table 6. /minerva/new_api/users/{login}:request_reset_password
Parameter Description

login

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

password

String

new password

token

String

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

email

String

user email (and login)

password

String

password chosen for the new account

name

String

given name)

surname

String

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

id

Number

identifier

login

String

user login

orcidId

String

orcid identifier

name

String

first name

surname

String

last name

email

String

email address

removed

Boolean

is user removed

active

Boolean

is the account active

confirmed

Boolean

is the account email confirmed

connectedToLdap

Boolean

is user connected to ldap

ldapAccountAvailable

Boolean

is the ldap account available

termsOfUseConsent

Boolean

did user accept terms of consent

lastActive

String

last activity timestamp

privileges

Array

list of privileges

privileges[].privilegeType

String

privilege name

privileges[].objectId

String

associated object

lastLoginDate

String

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

Table 7. /minerva/new_api/users/{login}:confirm_email
Parameter Description

login

user login

14.3. Form Parameters

Parameter Description

token

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

message

String

detailed information about the status

status

String

OK when the operation succeeded

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

Table 8. /minerva/new_api/users/{login}:resend_confirm_email
Parameter Description

login

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

status

String

OK when the operation succeeded

15.6. Sample Response

{
  "status" : "OK"
}