Core CRUD
Basic user account creation, retrieval, update, and deletion operations.
GET /api/users
Search and filter users with pagination.
Authentication: Required
Query Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
q | string | - | Search query (username, givenName, familyName, displayName, email) |
sort | string | - | Sort field |
limit | integer | 30 | Results per page |
start | integer | 0 | Pagination offset |
Response:
The response is a paginated HAL collection. User items are returned under _embedded["inf:user"].
{
"_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
}
]
}
}
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.
[
{
"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"
]
GET /api/users-content
Get content count statistics for users.
Authentication: Required
Response:
Per-user counts of owned datasets, reports, datasources, and queries.
[
{
"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"
]
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:
| Field | Type | Description |
|---|---|---|
username | string | Unique username |
password | string | Initial password |
Optional Fields:
| Field | Type | Default | Description |
|---|---|---|---|
domain | string | local | Authentication domain |
displayName | string | - | Full name |
givenName | string | - | First name |
familyName | string | - | Last name |
middleName | string | - | Middle name |
email | string | - | Email address |
enabled | boolean | false | Account enabled status |
superuser | boolean | false | Admin privileges (requires requestor to be superuser) |
timezone | string | - | User timezone |
settings | object | {} | User preferences |
Response:
Responds 201 Created with a Location header pointing at the new user.
{
"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"
}
{
"_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
}
GET /api/users/{username}
Get a specific user by username.
Authentication: Required
Path Parameters:
| Parameter | Type | Description |
|---|---|---|
username | string | Username |
Response:
{
"_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
}
PUT /api/users/{username}
Update a user account.
Authentication: Required
Permissions: user:edit
Path Parameters:
| Parameter | Type | Description |
|---|---|---|
username | string | Username |
Request Body:
{
"displayName": "John M. Doe",
"email": "john.m.doe@example.com",
"timezone": "America/Los_Angeles",
"enabled": true
}
Updatable Fields:
| Field | Type | Description |
|---|---|---|
username | string | Change username |
displayName | string | Display name |
givenName | string | First name |
familyName | string | Last name |
middleName | string | Middle name |
email | string | Email address |
enabled | boolean | Account status |
settings | object | User preferences |
timezone | string | Timezone |
domain | string | Authentication domain |
locked | boolean | Lock status |
lockedAt | date | Lock timestamp |
loginAttempts | integer | Failed login count |
passwordSetAt | date | Password set timestamp |
passwordExpiresAt | date | Password expiration |
Response:
Returns the updated user object.
{
"displayName": "Annie R. Larson",
"timezone": "America/Chicago"
}
{
"_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
}
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:
| Parameter | Type | Description |
|---|---|---|
username | string | Username |
Response:
Responds 200 on success. The admin account cannot be deleted.
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}.
{
"_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
}
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.
{
"timezone": "America/New_York",
"aiConsent": true
}
{
"_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
}
Use Case:
Allow users to update their own profile without admin permissions.