> ## Documentation Index
> Fetch the complete documentation index at: https://docs.curator.interworks.com/llms.txt
> Use this file to discover all available pages before exploring further.

# User API

> User management API endpoints for creating and managing backend users

## /user/createBackendUser

Creates a backend user

*Note: The API key must be allowed to create backend users. Keys that existed before this permission was added
keep it. To allow another key on an On-Prem install, a server administrator runs
`php artisan portal:apikey-backend-users <API key or ID> --enable`. On SaaS, ask InterWorks to allow the key.*

**Returns:**

array

## /user/createFrontendGroup

Creates a Frontend Group.

*Note: To add members to your Frontend Group, use the addUserToGroup API endpoint.*

**Example Request:**

`POST [your_domain]/api/v1/User/createFrontendGroup?apikey=[your_api_key_here]&name=[group_name_here]`

```JSON theme={null}
    {
        "platforms": {
            "tableau":[
                {
                    "server":"tableau us", // Name of your Tableau Server Connection
                    "site":"__DEFAULT__",
                    "group":"Alligator Admins" // Display Name of your Tableau Server Group
                }
            ],
            "thoughtspot":[
                "Europe Sales" // Display Name of your ThoughSpot Group
            ]
        },
        "custom_attributes": {
            "color": "blue"
        }
    }
```

**Returns:**

array

**Example Response:**

```JSON theme={null}
    {
        "result": "Success",
        "msg": "Successfully added platform groups to frontend group 30 and added syncing to the queue",
        "metadata": [
            {
                "tableau_server": "tableau us|||https://tableau.your-domain.com",
                "tableau_site": "__DEFAULT__",
                "tableau_group": "Alligator Admins|||[tableau_group_id_here]"
            },
            {
                "thoughtspot_group": "Europe Sales|||[thoughtspot_group_id_here]"
            }
        ],
        "tableauGroupsNotFound": "",
        "thoughtspotGroupsNotFound": ""
    }
```

## /user/createFrontendUser

Creates a single frontend (i.e. Curator) user. This does not create any platform-specific users, and there is no
bulk/CSV equivalent -- to create many frontend users at once, script repeated calls to this endpoint or to the
[`usermgmt:frontendusercreate`](https://docs.curator.interworks.com/curator_api/artisan_commands/frontendusercreate) artisan command.

> [!NOTE]
>
> If Curator authenticates against an external identity provider (SAML, OIDC/OAuth, Tableau Server, or Power BI), you
> most likely do not need this endpoint at all. Frontend User accounts are created automatically the first time each
> user signs in -- see [Just-in-time (JIT) Provisioning](https://docs.curator.interworks.com/users_groups/user_management/just_in_time_jit_provisioning.md).
> Creating users in advance is only necessary when JIT provisioning has been turned off (**Settings** > **Security** >
> **Authentication Settings** > **Access rules** > *Disable Just-in-time Provisioning of Curator Users*), or when the
> authentication type is Curator Users.

> [!NOTE]
>
> An API key cannot create, change, or delete a frontend user whose username belongs to a backend administrator with
> [Link to frontend user](https://docs.curator.interworks.com/site_administration/backend_administrators/overview.md#link-to-frontend-user) turned on. The
> call fails with the error `This username belongs to a linked backend administrator.`

**Parameters:**

* `full_name` (string, required) - The full name for the new Curator user.
* `username` (string, required) - The username for the new Curator user.
* `email` (string, required) - The email address for the new Curator user.
* `password` (string, required) - The desired password for the new Curator user.
* `domain` (string, optional) - Domain of the user, e.g. `domain\username` or `username@domain`. If omitted, Curator
  derives the domain from the username or email address where possible.
* `send_user_created_curator_email` (bool, optional) - Send the Curator signup email to the new user. `1` = send,
  `0` = suppress. Defaults to `0`.

**Example Request:**

The query string below is shown wrapped for readability; send it as a single URL.

```
POST [your_domain]/api/v1/User/createFrontendUser
    ?apikey=[your_api_key_here]
    &full_name=[full_name_here]
    &username=[username_here]
    &email=[email_here]
    &password=[password_here]
```

**Returns:**

array

**Example Response:**

```JSON theme={null}
    {
        "result": "Success",
        "msg": "Successfully created frontend user: [username_here]",
        "id": 42
    }
```

## /user/fetchUser

Returns the currently logged in user's information.

**Returns:**

array

## /user/getManageablePermissions

Gets a listing of available manageable permissions

**Returns:**

array

**Example Response:**

```JSON theme={null}
    {
        "status": "Success",
        "permissions": [
            "InterWorks.datamanager.data_structure",
            "InterWorks.datamanager.data",
            "InterWorks.tableauviz.access_tableau_settings",
            "InterWorks.tableauviz.access_dashboards",
            "InterWorks.integration.manage_scripts",
            "InterWorks.integration.run_scripts",
            "InterWorks.integration.manage_commands",
            "InterWorks.integration.run_commands",
            "InterWorks.integration.manage_api_relay",
            "InterWorks.usermgmt.manage_backend_users",
            "InterWorks.usermgmt.manage_frontend_users",
            "InterWorks.content.access_content",
            "InterWorks.portal.access_portal_settings",
            "InterWorks.portal.manage_upgrade",
            "InterWorks.portal.api_keys"
        ]
    }
```

## /user/addUserToGroup

Adds a user to a group (syncs with Tableau if possible)

**Returns:**

array

## /user/listGroups

Lists groups.

**Returns:**

array

## /user/listUsers

Lists users and the groups they belong to.

**Parameters:**

* `num` (integer, optional) - Number of users to return per page. Defaults to `50`.
* `pg` (integer, optional) - Page number. Defaults to `1`.
* `site` (string, optional) - Tableau Site content URL to filter by; only users with a connected Tableau user on that
  site are returned.

**Example Request:**

`GET [your_domain]/api/v1/User/listUsers?apikey=[your_api_key_here]&num=50&pg=1`

**Returns:**

array

Each user object includes `frontend_user_id`, `name`, `full_name`, `email`, `analytics_id`, `last_login_at` (the time
the user last signed in, or `null` if they never have), and a `groups` array.

**Example Response:**

```JSON theme={null}
    [
        {
            "frontend_user_id": 42,
            "name": "jane.smith",
            "full_name": "Jane Smith",
            "email": "jane.smith@example.com",
            "analytics_id": "jane.smith@example.com",
            "last_login_at": "2026-08-18 14:54:34",
            "groups": [
                {
                    "frontend_group_id": 3,
                    "name": "Sales",
                    "source": "manual"
                }
            ]
        }
    ]
```

## /user/removeUser

Deletes a Curator frontend user. The user's group memberships, favorites and preferences are removed with them. Only
the Curator user is deleted. The user's accounts on Tableau, Power BI, ThoughtSpot and other platforms are not
changed.

**Parameters:**

Provide one of the following. When you provide more than one, Curator uses the first in this order.

* `frontend_user_id` (integer) - The ID of the frontend user, as returned by `listUsers` or shown on the backend under
  **Settings** > **Users** > **Frontend Users**.
* `username` (string) - The username of the frontend user.
* `email` (string) - The email address of the frontend user. If more than one user has this email address, the call
  returns an error and deletes nothing.

**Example Request:**

`GET [your_domain]/api/v1/User/removeUser?apikey=[your_api_key_here]&username=jane.smith`

**Returns:**

array

**Example Response:**

```JSON theme={null}
    {
        "result": "success",
        "msg": "Removed user jane.smith (42)."
    }
```

If the user cannot be found, `result` is `error` and `msg` names the value that was searched for.

An API key cannot delete a frontend user linked to a backend administrator; see the note under
[/user/createFrontendUser](#usercreatefrontenduser).

## /user/removeUserFromGroup

Removes a user from a group (syncs with Tableau if possible)

**Returns:**

array

## /User/syncGroup

Kicks off a schedule which synchronizes a single Frontend Group's membership. Specify the Group's `groupName` OR the
Group's `id` (the `id` is used if both are provided).

**Parameters:**

* `groupName` (string, optional) - The name of the Frontend Group as shown on the backend under
  **Settings** > **Users** > **Frontend Groups**.
* `id` (integer, optional) - The ID of the Frontend Group. One of `groupName` or `id` is required.

**Example Request:**

`GET [your_domain]/api/v1/User/syncGroup?apikey=[your_api_key_here]&groupName=[group_name_here]`

**Returns:**

array

**Example Response:**

```JSON theme={null}
    {
        "result": "Success",
        "msg": "[group_name_here] sync is queued."
    }
```

## /User/syncGroups

Kicks off a schedule which synchronizes platform group memberships to all configured Frontend Groups. Internally this
calls `FrontendGroup::syncSchedule` to enqueue a sync for every Frontend Group.

**Example Request:**

`GET [your_domain]/api/v1/User/syncGroups?apikey=[your_api_key_here]`

**Returns:**

array

**Example Response:**

```JSON theme={null}
    {
        "result": "Success",
        "msg": "Group syncs are queued."
    }
```

***Note:*** Both `/User/syncGroup` and `/User/syncGroups` enqueue jobs asynchronously - the API call returns as soon as
the sync is queued. The actual membership sync runs through the queued process scheduler (`curator:runschedule`), so
the work is not complete the moment the response is received.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.