Skip to main content

Core CRUD

Basic user account creation, retrieval, update, and deletion operations.

GET /api/users

Search and filter users with pagination.

Authentication: Required

Query Parameters:

ParameterTypeDefaultDescription
qstring-Search query (username, givenName, familyName, displayName, email)
sortstring-Sort field
limitinteger30Results per page
startinteger0Pagination offset

Response:

The response is a paginated HAL collection. User items are returned under _embedded["inf:user"].

Search and page through usersGET /api/users?q=larson&limit=10
A paginated HAL collection. q matches username, given/family/display name, and email. Items are under _embedded["inf:user"].
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/users?limit=10&start=0&q=larson%2A"
}
},
"start": 0,
"count": 1,
"total": 1,
"_embedded": {
"inf:user": [
{
"_links": {
"self": {
"href": "https://informer.example.com/api/users/annie.larson"
},
"inf:memberships": {
"href": "https://informer.example.com/api/users/annie.larson/memberships"
},
"inf:avatar-upload": {
"href": "https://informer.example.com/api/users/annie.larson/_upload/{uploadId}/avatar-upload",
"templated": true
},
"inf:password": {
"href": "https://informer.example.com/api/users/annie.larson/password"
},
"inf:feed": {
"href": "https://informer.example.com/api/users/annie.larson/feed"
},
"inf:viewed-feed": {
"href": "https://informer.example.com/api/users/annie.larson/_markFeedViewed"
},
"inf:superuser": {
"href": "https://informer.example.com/api/users/annie.larson/superuser"
}
},
"permissions": {
"changeDomain": true,
"changeProfile": true,
"changePassword": true,
"delete": true,
"edit": true,
"reassign": true,
"superuser": true,
"enable": true,
"changeTheme": true,
"lock": true,
"setGlobalPermissions": true,
"manageLogin": true
},
"domain": "local",
"username": "annie.larson",
"displayName": "Annie R. Larson",
"familyName": "Larson",
"givenName": "Annie",
"middleName": null,
"email": "annie.larson@example.com",
"data": null,
"superuser": false,
"timezone": "America/Chicago",
"settings": {
"log": {
"log": false,
"info": false,
"warn": false,
"debug": false,
"error": true,
"remote": false
}
},
"enabled": true,
"source": null,
"sourceId": null,
"lastViewedFeed": null,
"tenant": "acme",
"globalPermissions": {
"ai": false,
"jobCreation": false,
"viewAllTeams": false,
"viewAllUsers": false,
"painlessScriptCreation": false
},
"userFields": {},
"locked": false,
"lockedAt": null,
"loginAttempts": 0,
"passwordSetAt": "2026-01-15T16:20:00.000Z",
"passwordExpiresAt": "2026-01-15T16:20:00.000Z",
"forgotPasswordRequestTime": null,
"mfa": null,
"mfaConfig": {},
"aiMessage": null,
"aiConsent": false,
"hasSharedDatasources": false,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"initials": "AL",
"colorIndex": 4,
"avatarColor": {
"background": "#81C784",
"text": "#1B5E20"
},
"managesPassword": true
}
]
}
}
Captured from the API examples test suite; ids and timestamps are normalized.

GET /api/users-list

Get a complete list of users with additional metadata.

Authentication: Required

Response:

A flat array (not paged) of users with memberships, permissions, and avatar metadata.

List all usersGET /api/users-list
A flat array (not paged) with memberships, permissions, and avatar metadata per user. Backs admin user-management screens.
Response · 200
[
{
"username": "admin",
"domain": "local",
"domain_name": null,
"email": null,
"displayName": "acme Administrator",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"superuser": true,
"enabled": true,
"globalPermissions": {
"ai": false,
"jobCreation": true,
"viewAllTeams": true,
"viewAllUsers": true,
"painlessScriptCreation": true
},
"timezone": "America/New_York",
"avatarUpdatedAt": null,
"locked": false,
"lockedAt": null,
"loginAttempts": 0,
"passwordExpiresAt": "2026-01-15T16:20:00.000Z",
"passwordSetAt": "2026-01-15T16:20:00.000Z",
"permissions": {
"changeDomain": false,
"changeProfile": true,
"changePassword": true,
"delete": false,
"edit": true,
"reassign": true,
"superuser": true,
"enable": true,
"changeTheme": true,
"lock": true,
"setGlobalPermissions": true,
"manageLogin": true
},
"name": "acme Administrator",
"avatarColor": {
"background": "#81C784",
"text": "#1B5E20"
},
"colorIndex": 4,
"initials": "NA"
},
{
"username": "alex",
"domain": "local",
"domain_name": null,
"email": "alex@entrinsik.com",
"displayName": "Alex Leupen",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"superuser": false,
"enabled": true,
"globalPermissions": {
"ai": false,
"jobCreation": false,
"viewAllTeams": true,
"viewAllUsers": true,
"painlessScriptCreation": false
},
"timezone": "America/New_York",
"avatarUpdatedAt": null,
"locked": false,
"lockedAt": null,
"loginAttempts": 0,
"passwordExpiresAt": "2026-01-15T16:20:00.000Z",
"passwordSetAt": "2026-01-15T16:20:00.000Z",
"memberships": [
{
"teamId": "informer-business-development",
"accessLevel": 6
}
],
"permissions": {
"changeDomain": true,
"changeProfile": true,
"changePassword": true,
"delete": true,
"edit": true,
"reassign": true,
"superuser": true,
"enable": true,
"changeTheme": true,
"lock": true,
"setGlobalPermissions": true,
"manageLogin": true
},
"name": "Alex Leupen",
"avatarColor": {
"background": "#81C784",
"text": "#1B5E20"
},
"colorIndex": 4,
"initials": "AL"
},
{
"username": "andrea",
"domain": "local",
"domain_name": null,
"email": "andrea@entrinsik.com",
"displayName": "Andrea Vega",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"superuser": false,
"enabled": true,
"globalPermissions": {
"ai": false,
"jobCreation": false,
"viewAllTeams": true,
"viewAllUsers": true,
"painlessScriptCreation": false
},
"timezone": "America/New_York",
"avatarUpdatedAt": null,
"locked": false,
"lockedAt": null,
"loginAttempts": 0,
"passwordExpiresAt": "2026-01-15T16:20:00.000Z",
"passwordSetAt": "2026-01-15T16:20:00.000Z",
"memberships": [
{
"teamId": "informer-development",
"accessLevel": 6
}
],
"permissions": {
"changeDomain": true,
"changeProfile": true,
"changePassword": true,
"delete": true,
"edit": true,
"reassign": true,
"superuser": true,
"enable": true,
"changeTheme": true,
"lock": true,
"setGlobalPermissions": true,
"manageLogin": true
},
"name": "Andrea Vega",
"avatarColor": {
"background": "#81C784",
"text": "#1B5E20"
},
"colorIndex": 4,
"initials": "AV"
},
"… 31 more items (34 total) — omitted from docs"
]
Captured from the API examples test suite; ids and timestamps are normalized.

GET /api/users-content

Get content count statistics for users.

Authentication: Required

Response:

Per-user counts of owned datasets, reports, datasources, and queries.

Get per-user content countsGET /api/users-content
Counts of datasets, reports, datasources, and queries owned by each user, keyed by username.
Response · 200
[
{
"username": "admin",
"datasetCount": 2,
"reportCount": 0,
"datasourceCount": 1,
"queryCount": 2
},
{
"username": "alex",
"datasetCount": 0,
"reportCount": 0,
"datasourceCount": 0,
"queryCount": 0
},
{
"username": "andrea",
"datasetCount": 0,
"reportCount": 0,
"datasourceCount": 0,
"queryCount": 0
},
"… 31 more items (34 total) — omitted from docs"
]
Captured from the API examples test suite; ids and timestamps are normalized.

POST /api/users

Create a new user account.

Authentication: Required

Permissions: users:create

Request Body:

{
"username": "jane.smith",
"password": "initialPassword123",
"domain": "local",
"displayName": "Jane Smith",
"givenName": "Jane",
"familyName": "Smith",
"email": "jane.smith@example.com",
"enabled": false,
"superuser": false,
"timezone": "America/New_York",
"settings": {}
}

Required Fields:

FieldTypeDescription
usernamestringUnique username
passwordstringInitial password

Optional Fields:

FieldTypeDefaultDescription
domainstringlocalAuthentication domain
displayNamestring-Full name
givenNamestring-First name
familyNamestring-Last name
middleNamestring-Middle name
emailstring-Email address
enabledbooleanfalseAccount enabled status
superuserbooleanfalseAdmin privileges (requires requestor to be superuser)
timezonestring-User timezone
settingsobject{}User preferences

Response:

Responds 201 Created with a Location header pointing at the new user.

Create a userPOST /api/users
Responds 201 with a Location header pointing at the new user. superuser is honored only when the caller is a superuser; new accounts default to enabled false unless set.
Request body
{
"username": "annie.larson",
"password": "D0cs-Example-Pass!",
"domain": "local",
"displayName": "Annie Larson",
"givenName": "Annie",
"familyName": "Larson",
"email": "annie.larson@example.com",
"enabled": true,
"timezone": "America/New_York"
}
Response · 201
{
"_links": {
"self": {
"href": "https://informer.example.com/api/users/annie.larson"
},
"inf:memberships": {
"href": "https://informer.example.com/api/users/annie.larson/memberships"
},
"inf:avatar-upload": {
"href": "https://informer.example.com/api/users/annie.larson/_upload/{uploadId}/avatar-upload",
"templated": true
},
"inf:password": {
"href": "https://informer.example.com/api/users/annie.larson/password"
},
"inf:feed": {
"href": "https://informer.example.com/api/users/annie.larson/feed"
},
"inf:viewed-feed": {
"href": "https://informer.example.com/api/users/annie.larson/_markFeedViewed"
},
"inf:superuser": {
"href": "https://informer.example.com/api/users/annie.larson/superuser"
}
},
"permissions": {
"changeDomain": true,
"changeProfile": true,
"changePassword": true,
"delete": true,
"edit": true,
"reassign": true,
"superuser": true,
"enable": true,
"changeTheme": true,
"lock": true,
"setGlobalPermissions": true,
"manageLogin": true
},
"settings": {
"log": {
"log": false,
"info": false,
"warn": false,
"debug": false,
"error": true,
"remote": false
}
},
"tenant": "acme",
"globalPermissions": {
"ai": false,
"jobCreation": false,
"viewAllTeams": false,
"viewAllUsers": false,
"painlessScriptCreation": false
},
"userFields": {},
"locked": false,
"loginAttempts": 0,
"passwordSetAt": "2026-01-15T16:20:00.000Z",
"passwordExpiresAt": "2026-01-15T16:20:00.000Z",
"mfaConfig": {},
"aiConsent": false,
"hasSharedDatasources": false,
"username": "annie.larson",
"domain": "local",
"displayName": "Annie Larson",
"givenName": "Annie",
"familyName": "Larson",
"email": "annie.larson@example.com",
"enabled": true,
"timezone": "America/New_York",
"superuser": false,
"updatedAt": "2026-01-15T16:20:00.000Z",
"createdAt": "2026-01-15T16:20:00.000Z",
"middleName": null,
"data": null,
"source": null,
"sourceId": null,
"lastViewedFeed": null,
"lockedAt": null,
"mfa": null,
"forgotPasswordRequestTime": null,
"aiMessage": null,
"initials": "AL",
"colorIndex": 4,
"avatarColor": {
"background": "#81C784",
"text": "#1B5E20"
},
"managesPassword": true
}
Captured from the API examples test suite; ids and timestamps are normalized.

GET /api/users/{username}

Get a specific user by username.

Authentication: Required

Path Parameters:

ParameterTypeDescription
usernamestringUsername

Response:

Get a single userGET /api/users/annie.larson
Includes computed avatar data and the caller-relative permissions object.
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/users/annie.larson"
},
"inf:memberships": {
"href": "https://informer.example.com/api/users/annie.larson/memberships"
},
"inf:avatar-upload": {
"href": "https://informer.example.com/api/users/annie.larson/_upload/{uploadId}/avatar-upload",
"templated": true
},
"inf:password": {
"href": "https://informer.example.com/api/users/annie.larson/password"
},
"inf:feed": {
"href": "https://informer.example.com/api/users/annie.larson/feed"
},
"inf:viewed-feed": {
"href": "https://informer.example.com/api/users/annie.larson/_markFeedViewed"
},
"inf:superuser": {
"href": "https://informer.example.com/api/users/annie.larson/superuser"
}
},
"permissions": {
"changeDomain": true,
"changeProfile": true,
"changePassword": true,
"delete": true,
"edit": true,
"reassign": true,
"superuser": true,
"enable": true,
"changeTheme": true,
"lock": true,
"setGlobalPermissions": true,
"manageLogin": true
},
"domain": "local",
"username": "annie.larson",
"displayName": "Annie Larson",
"familyName": "Larson",
"givenName": "Annie",
"middleName": null,
"email": "annie.larson@example.com",
"data": null,
"superuser": false,
"timezone": "America/New_York",
"settings": {
"log": {
"log": false,
"info": false,
"warn": false,
"debug": false,
"error": true,
"remote": false
}
},
"enabled": true,
"source": null,
"sourceId": null,
"lastViewedFeed": null,
"tenant": "acme",
"globalPermissions": {
"ai": false,
"jobCreation": false,
"viewAllTeams": false,
"viewAllUsers": false,
"painlessScriptCreation": false
},
"userFields": {},
"locked": false,
"lockedAt": null,
"loginAttempts": 0,
"passwordSetAt": "2026-01-15T16:20:00.000Z",
"passwordExpiresAt": "2026-01-15T16:20:00.000Z",
"forgotPasswordRequestTime": null,
"mfa": null,
"mfaConfig": {},
"aiMessage": null,
"aiConsent": false,
"hasSharedDatasources": false,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"initials": "AL",
"colorIndex": 4,
"avatarColor": {
"background": "#81C784",
"text": "#1B5E20"
},
"managesPassword": true
}
Captured from the API examples test suite; ids and timestamps are normalized.

PUT /api/users/{username}

Update a user account.

Authentication: Required

Permissions: user:edit

Path Parameters:

ParameterTypeDescription
usernamestringUsername

Request Body:

{
"displayName": "John M. Doe",
"email": "john.m.doe@example.com",
"timezone": "America/Los_Angeles",
"enabled": true
}

Updatable Fields:

FieldTypeDescription
usernamestringChange username
displayNamestringDisplay name
givenNamestringFirst name
familyNamestringLast name
middleNamestringMiddle name
emailstringEmail address
enabledbooleanAccount status
settingsobjectUser preferences
timezonestringTimezone
domainstringAuthentication domain
lockedbooleanLock status
lockedAtdateLock timestamp
loginAttemptsintegerFailed login count
passwordSetAtdatePassword set timestamp
passwordExpiresAtdatePassword expiration

Response:

Returns the updated user object.

Update a userPUT /api/users/annie.larson
Admin-facing edit. Unknown payload fields are stripped. Use PUT /api/me for self-service profile edits.
Request body
{
"displayName": "Annie R. Larson",
"timezone": "America/Chicago"
}
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/users/annie.larson"
},
"inf:memberships": {
"href": "https://informer.example.com/api/users/annie.larson/memberships"
},
"inf:avatar-upload": {
"href": "https://informer.example.com/api/users/annie.larson/_upload/{uploadId}/avatar-upload",
"templated": true
},
"inf:password": {
"href": "https://informer.example.com/api/users/annie.larson/password"
},
"inf:feed": {
"href": "https://informer.example.com/api/users/annie.larson/feed"
},
"inf:viewed-feed": {
"href": "https://informer.example.com/api/users/annie.larson/_markFeedViewed"
},
"inf:superuser": {
"href": "https://informer.example.com/api/users/annie.larson/superuser"
}
},
"permissions": {
"changeDomain": true,
"changeProfile": true,
"changePassword": true,
"delete": true,
"edit": true,
"reassign": true,
"superuser": true,
"enable": true,
"changeTheme": true,
"lock": true,
"setGlobalPermissions": true,
"manageLogin": true
},
"domain": "local",
"username": "annie.larson",
"displayName": "Annie R. Larson",
"familyName": "Larson",
"givenName": "Annie",
"middleName": null,
"email": "annie.larson@example.com",
"data": null,
"superuser": false,
"timezone": "America/Chicago",
"settings": {
"log": {
"log": false,
"info": false,
"warn": false,
"debug": false,
"error": true,
"remote": false
}
},
"enabled": true,
"source": null,
"sourceId": null,
"lastViewedFeed": null,
"tenant": "acme",
"globalPermissions": {
"ai": false,
"jobCreation": false,
"viewAllTeams": false,
"viewAllUsers": false,
"painlessScriptCreation": false
},
"userFields": {},
"locked": false,
"lockedAt": null,
"loginAttempts": 0,
"passwordSetAt": "2026-01-15T16:20:00.000Z",
"passwordExpiresAt": "2026-01-15T16:20:00.000Z",
"forgotPasswordRequestTime": null,
"mfa": null,
"mfaConfig": {},
"aiMessage": null,
"aiConsent": false,
"hasSharedDatasources": false,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"initials": "AL",
"colorIndex": 4,
"avatarColor": {
"background": "#81C784",
"text": "#1B5E20"
},
"managesPassword": true
}
Captured from the API examples test suite; ids and timestamps are normalized.

Special Behavior:

When changing domain from non-local to local, a password reset email is automatically sent.


DELETE /api/users/{username}

Delete a user account.

Authentication: Required

Permissions: user:delete

Path Parameters:

ParameterTypeDescription
usernamestringUsername

Response:

Responds 200 on success. The admin account cannot be deleted.

Delete a userDELETE /api/users/temp.contractor
Permanently removes the account. The admin account cannot be deleted.
Response · 200 · no body
Captured from the API examples test suite; ids and timestamps are normalized.

GET /api/me

Get the currently authenticated user's profile.

Authentication: Required

Response:

Returns the current user object with the same structure as GET /api/users/{username}.

Get my profileGET /api/me
Returns the authenticated user, with a Location header pointing at the canonical /api/users/{username} resource.
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/users/admin"
},
"inf:memberships": {
"href": "https://informer.example.com/api/users/admin/memberships"
},
"inf:avatar-upload": {
"href": "https://informer.example.com/api/users/admin/_upload/{uploadId}/avatar-upload",
"templated": true
},
"inf:password": {
"href": "https://informer.example.com/api/users/admin/password"
},
"inf:feed": {
"href": "https://informer.example.com/api/users/admin/feed"
},
"inf:viewed-feed": {
"href": "https://informer.example.com/api/users/admin/_markFeedViewed"
},
"inf:superuser": {
"href": "https://informer.example.com/api/users/admin/superuser"
}
},
"permissions": {
"changeDomain": false,
"changeProfile": true,
"changePassword": true,
"delete": false,
"edit": true,
"reassign": true,
"superuser": true,
"enable": true,
"changeTheme": true,
"lock": true,
"setGlobalPermissions": true,
"manageLogin": true
},
"domain": "local",
"username": "admin",
"displayName": "acme Administrator",
"familyName": "Administrator",
"givenName": "acme",
"middleName": null,
"email": null,
"data": null,
"superuser": true,
"timezone": "America/New_York",
"settings": {
"log": {
"log": false,
"info": false,
"warn": false,
"debug": false,
"error": true,
"remote": false
}
},
"enabled": true,
"source": null,
"sourceId": null,
"lastViewedFeed": null,
"tenant": "acme",
"globalPermissions": {
"ai": false,
"jobCreation": true,
"viewAllTeams": true,
"viewAllUsers": true,
"painlessScriptCreation": true
},
"userFields": {},
"locked": false,
"lockedAt": null,
"loginAttempts": 0,
"passwordSetAt": "2026-01-15T16:20:00.000Z",
"passwordExpiresAt": "2026-01-15T16:20:00.000Z",
"forgotPasswordRequestTime": null,
"mfa": null,
"mfaConfig": {},
"aiMessage": null,
"aiConsent": false,
"hasSharedDatasources": false,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"teams": [],
"initials": "NA",
"colorIndex": 4,
"avatarColor": {
"background": "#81C784",
"text": "#1B5E20"
},
"managesPassword": true
}
Captured from the API examples test suite; ids and timestamps are normalized.

PUT /api/me

Update the currently authenticated user's profile.

Authentication: Required

Request Body:

{
"displayName": "Updated Name",
"email": "new.email@example.com",
"timezone": "America/Chicago"
}

Response:

Returns the updated user object.

Update my profilePUT /api/me
Self-service edit restricted to profile fields (name, email, settings, timezone, AI consent). Any other field is ignored.
Request body
{
"timezone": "America/New_York",
"aiConsent": true
}
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/me"
},
"inf:memberships": {
"href": "https://informer.example.com/api/me/memberships"
},
"inf:avatar-upload": {
"href": "https://informer.example.com/api/me/_upload/{uploadId}/avatar-upload",
"templated": true
},
"inf:password": {
"href": "https://informer.example.com/api/me/password"
},
"inf:feed": {
"href": "https://informer.example.com/api/me/feed"
},
"inf:viewed-feed": {
"href": "https://informer.example.com/api/me/_markFeedViewed"
},
"inf:superuser": {
"href": "https://informer.example.com/api/me/superuser"
}
},
"permissions": {
"changeDomain": false,
"changeProfile": true,
"changePassword": true,
"delete": false,
"edit": true,
"reassign": true,
"superuser": true,
"enable": true,
"changeTheme": true,
"lock": true,
"setGlobalPermissions": true,
"manageLogin": true
},
"domain": "local",
"username": "admin",
"displayName": "acme Administrator",
"familyName": "Administrator",
"givenName": "acme",
"middleName": null,
"email": null,
"data": null,
"superuser": true,
"timezone": "America/New_York",
"settings": {
"log": {
"log": false,
"info": false,
"warn": false,
"debug": false,
"error": true,
"remote": false
}
},
"enabled": true,
"source": null,
"sourceId": null,
"lastViewedFeed": null,
"tenant": "acme",
"globalPermissions": {
"ai": false,
"jobCreation": true,
"viewAllTeams": true,
"viewAllUsers": true,
"painlessScriptCreation": true
},
"userFields": {},
"locked": false,
"lockedAt": null,
"loginAttempts": 0,
"passwordSetAt": "2026-01-15T16:20:00.000Z",
"passwordExpiresAt": "2026-01-15T16:20:00.000Z",
"forgotPasswordRequestTime": null,
"mfa": null,
"mfaConfig": {},
"aiMessage": null,
"aiConsent": true,
"hasSharedDatasources": false,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"teams": [],
"initials": "NA",
"colorIndex": 4,
"avatarColor": {
"background": "#81C784",
"text": "#1B5E20"
},
"managesPassword": true
}
Captured from the API examples test suite; ids and timestamps are normalized.

Use Case:

Allow users to update their own profile without admin permissions.