# Authentication service

This service provides operations for managing user and org profiles/settings. Its name is a bit of a misnomer.

OpenAPI file: [`AuthenticationServiceV2.json`](https://dev.nominal.io/api/_downloads/46230be25ce3692193d2854a2f50d7fd/AuthenticationServiceV2.json)

## Endpoints

### Get my profile

GET `/authentication/v2/my/profile`

Gets the profile of the authenticated user.

Request

No parameters and no body.

Response

`rid` string (RID)
:   ​

`orgRid` string (RID)
:   ​

`email` string
:   ​

`displayName` string
:   ​

`avatarUrl` string
:   Avatar URL or a default avatar if the user does not have one.

`createdAt` string (date-time)
:   ​

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/authentication/v2/my/profile" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/authentication/v2/my/profile",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.get(
    "https://api.gov.nominal.io/api/authentication/v2/my/profile",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
```

**aiohttp**

```python
import asyncio

import aiohttp

async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.get(
            "https://api.gov.nominal.io/api/authentication/v2/my/profile",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "rid": "<user rid>",
  "orgRid": "<org rid>",
  "email": "<email>",
  "displayName": "<display name>",
  "avatarUrl": "<avatar url>",
  "createdAt": "2026-01-01T00:00:00Z"
}
```

### Update my profile

PUT `/authentication/v2/my/profile`

Updates the profile of the authenticated user.

Body

`displayName` string required
:   ​

Response

`rid` string (RID)
:   ​

`orgRid` string (RID)
:   ​

`email` string
:   ​

`displayName` string
:   ​

`avatarUrl` string
:   Avatar URL or a default avatar if the user does not have one.

`createdAt` string (date-time)
:   ​

Request

**curl**

```shell
curl -X PUT "https://api.gov.nominal.io/api/authentication/v2/my/profile" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "displayName": "<display name>"
}'
```

**requests**

```python
import requests

response = requests.put(
    "https://api.gov.nominal.io/api/authentication/v2/my/profile",
    headers={"Authorization": "Bearer <api key>"},
    json={"displayName": "<display name>"},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.put(
    "https://api.gov.nominal.io/api/authentication/v2/my/profile",
    headers={"Authorization": "Bearer <api key>"},
    json={"displayName": "<display name>"},
)
response.raise_for_status()
print(response.json())
```

**aiohttp**

```python
import asyncio

import aiohttp

async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.put(
            "https://api.gov.nominal.io/api/authentication/v2/my/profile",
            headers={"Authorization": "Bearer <api key>"},
            json={"displayName": "<display name>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "rid": "<user rid>",
  "orgRid": "<org rid>",
  "email": "<email>",
  "displayName": "<display name>",
  "avatarUrl": "<avatar url>",
  "createdAt": "2026-01-01T00:00:00Z"
}
```

### Get my settings

GET `/authentication/v2/my/settings`

Gets the settings of the authenticated user.

Request

No parameters and no body.

Response

`defaultTimeRangeType` [`DefaultTimeRangeTypeSetting`](https://dev.nominal.io/api/rest/authentication-service.md#defaulttimerangetypesetting)
:   ​

    Values of `DefaultTimeRangeTypeSetting`

    `DEFAULT`
    :   ​

    `ABSOLUTE`
    :   ​

    `RELATIVE`
    :   ​

`appearance` [`AppearanceSetting`](https://dev.nominal.io/api/rest/authentication-service.md#appearancesetting)
:   ​

    Values of `AppearanceSetting`

    `SYSTEM`
    :   ​

    `LIGHT`
    :   ​

    `DARK`
    :   ​

`timezone` [`TimezoneSetting`](https://dev.nominal.io/api/rest/authentication-service.md#timezonesetting)
:   ​

    Values of `TimezoneSetting`

    `LOCAL`
    :   ​

    `UTC`
    :   ​

`timeSeriesHoverTooltipConcise` boolean deprecated
:   **Deprecated:** Use `chartHoverTooltipMode` instead. If `chartHoverTooltipMode` is not set, this field will be used: `true` as `SINGLE` and `false` as `VERBOSE`.

`chartHoverTooltipMode` [`ChartTooltipModeSetting`](https://dev.nominal.io/api/rest/authentication-service.md#charttooltipmodesetting)
:   ​

    Values of `ChartTooltipModeSetting`

    `VERBOSE`
    :   ​

    `CONCISE`
    :   ​

    `MULTI_ROW_CONCISE`
    :   ​

    `SINGLE`
    :   ​

    `NONE`
    :   ​

`defaultNumberFormats` [`DefaultNumberFormatConfigurations`](https://dev.nominal.io/api/rest/authentication-service.md#defaultnumberformatconfigurations)
:   ​

    Fields of `DefaultNumberFormatConfigurations`

    `data` [`NumberFormat`](https://dev.nominal.io/api/rest/authentication-service.md#numberformat)
    :   Default number format for data values, e.g. chart tooltip and value table cell values.

        Fields of `NumberFormat`

        `sigFigs` integer
        :   Include the specified number of significant figures, rounding if needed.

        `displayOption` [`NumberFormatDisplayOption`](https://dev.nominal.io/api/rest/authentication-service.md#numberformatdisplayoption)
        :   The base display format for the number.

            Values of `NumberFormatDisplayOption`

            `SCIENTIFIC`
            :   ​

            `SUCCINCT`
            :   ​

            `LOCALE`
            :   ​

            `PLAIN`
            :   ​

        `fixedDecimalPlaces` integer deprecated
        :   **Deprecated:** use decimalPlaces instead

        `decimalPlaces` [`DecimalPlaces`](https://dev.nominal.io/api/rest/authentication-service.md#decimalplaces)
        :   Options for formatting the decimal part of number.

            **fixed**

            Set `type` to `"fixed"`.

            `fixed` [`FixedDecimalPlaces`](https://dev.nominal.io/api/rest/authentication-service.md#fixeddecimalplaces)
            :   ​

                Fields of `FixedDecimalPlaces`

                `places` integer
                :   ​

            **max**

            Set `type` to `"max"`.

            `max` [`MaxDecimalPlaces`](https://dev.nominal.io/api/rest/authentication-service.md#maxdecimalplaces)
            :   ​

                Fields of `MaxDecimalPlaces`

                `places` integer
                :   ​

`relativeTimestampFormat` [`RelativeTimestampFormat`](https://dev.nominal.io/api/rest/authentication-service.md#relativetimestampformat)
:   Relative timestamp display preference.

    **temporalSubunits**

    Set `type` to `"temporalSubunits"`.

    `temporalSubunits` [`TemporalSubunitsRelativeTimestampFormat`](https://dev.nominal.io/api/rest/authentication-service.md#temporalsubunitsrelativetimestampformat)
    :   ​

    **totalSeconds**

    Set `type` to `"totalSeconds"`.

    `totalSeconds` [`TotalSecondsRelativeTimestampFormat`](https://dev.nominal.io/api/rest/authentication-service.md#totalsecondsrelativetimestampformat)
    :   ​

`vimModeEnabled` boolean
:   ​

`defaultWorkbookVisibleInSearch` boolean
:   Whether newly created workbooks are visible in search by default. If absent, the organization default applies.

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/authentication/v2/my/settings" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/authentication/v2/my/settings",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.get(
    "https://api.gov.nominal.io/api/authentication/v2/my/settings",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
```

**aiohttp**

```python
import asyncio

import aiohttp

async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.get(
            "https://api.gov.nominal.io/api/authentication/v2/my/settings",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "defaultTimeRangeType": "DEFAULT",
  "appearance": "SYSTEM",
  "timezone": "LOCAL",
  "timeSeriesHoverTooltipConcise": true,
  "chartHoverTooltipMode": "VERBOSE",
  "defaultNumberFormats": {
    "data": {
      "sigFigs": 1,
      "displayOption": "SCIENTIFIC",
      "fixedDecimalPlaces": 1,
      "decimalPlaces": {
        "type": "fixed",
        "fixed": {
          "places": 1
        }
      }
    }
  },
  "relativeTimestampFormat": {
    "type": "temporalSubunits",
    "temporalSubunits": {}
  },
  "vimModeEnabled": true,
  "defaultWorkbookVisibleInSearch": true
}
```

### Update my settings

PUT `/authentication/v2/my/settings`

Updates the settings of the authenticated user.

Body

`defaultTimeRangeType` [`DefaultTimeRangeTypeSetting`](https://dev.nominal.io/api/rest/authentication-service.md#defaulttimerangetypesetting)
:   ​

    Values of `DefaultTimeRangeTypeSetting`

    `DEFAULT`
    :   ​

    `ABSOLUTE`
    :   ​

    `RELATIVE`
    :   ​

`appearance` [`AppearanceSetting`](https://dev.nominal.io/api/rest/authentication-service.md#appearancesetting)
:   ​

    Values of `AppearanceSetting`

    `SYSTEM`
    :   ​

    `LIGHT`
    :   ​

    `DARK`
    :   ​

`timezone` [`TimezoneSetting`](https://dev.nominal.io/api/rest/authentication-service.md#timezonesetting)
:   ​

    Values of `TimezoneSetting`

    `LOCAL`
    :   ​

    `UTC`
    :   ​

`timeSeriesHoverTooltipConcise` boolean deprecated
:   **Deprecated:** Use `chartHoverTooltipMode` instead. If `chartHoverTooltipMode` is not set, this field will be used: `true` as `SINGLE` and `false` as `VERBOSE`.

`chartHoverTooltipMode` [`ChartTooltipModeSetting`](https://dev.nominal.io/api/rest/authentication-service.md#charttooltipmodesetting)
:   ​

    Values of `ChartTooltipModeSetting`

    `VERBOSE`
    :   ​

    `CONCISE`
    :   ​

    `MULTI_ROW_CONCISE`
    :   ​

    `SINGLE`
    :   ​

    `NONE`
    :   ​

`defaultNumberFormats` [`DefaultNumberFormatConfigurations`](https://dev.nominal.io/api/rest/authentication-service.md#defaultnumberformatconfigurations)
:   ​

    Fields of `DefaultNumberFormatConfigurations`

    `data` [`NumberFormat`](https://dev.nominal.io/api/rest/authentication-service.md#numberformat)
    :   Default number format for data values, e.g. chart tooltip and value table cell values.

        Fields of `NumberFormat`

        `sigFigs` integer
        :   Include the specified number of significant figures, rounding if needed.

        `displayOption` [`NumberFormatDisplayOption`](https://dev.nominal.io/api/rest/authentication-service.md#numberformatdisplayoption)
        :   The base display format for the number.

            Values of `NumberFormatDisplayOption`

            `SCIENTIFIC`
            :   ​

            `SUCCINCT`
            :   ​

            `LOCALE`
            :   ​

            `PLAIN`
            :   ​

        `fixedDecimalPlaces` integer deprecated
        :   **Deprecated:** use decimalPlaces instead

        `decimalPlaces` [`DecimalPlaces`](https://dev.nominal.io/api/rest/authentication-service.md#decimalplaces)
        :   Options for formatting the decimal part of number.

            **fixed**

            Set `type` to `"fixed"`.

            `fixed` [`FixedDecimalPlaces`](https://dev.nominal.io/api/rest/authentication-service.md#fixeddecimalplaces)
            :   ​

                Fields of `FixedDecimalPlaces`

                `places` integer required
                :   ​

            **max**

            Set `type` to `"max"`.

            `max` [`MaxDecimalPlaces`](https://dev.nominal.io/api/rest/authentication-service.md#maxdecimalplaces)
            :   ​

                Fields of `MaxDecimalPlaces`

                `places` integer required
                :   ​

`relativeTimestampFormat` [`RelativeTimestampFormat`](https://dev.nominal.io/api/rest/authentication-service.md#relativetimestampformat)
:   Relative timestamp display preference.

    **temporalSubunits**

    Set `type` to `"temporalSubunits"`.

    `temporalSubunits` [`TemporalSubunitsRelativeTimestampFormat`](https://dev.nominal.io/api/rest/authentication-service.md#temporalsubunitsrelativetimestampformat)
    :   ​

    **totalSeconds**

    Set `type` to `"totalSeconds"`.

    `totalSeconds` [`TotalSecondsRelativeTimestampFormat`](https://dev.nominal.io/api/rest/authentication-service.md#totalsecondsrelativetimestampformat)
    :   ​

`vimModeEnabled` boolean
:   ​

`defaultWorkbookVisibleInSearch` boolean
:   Whether newly created workbooks are visible in search by default. If absent, the organization default applies.

Response

`defaultTimeRangeType` [`DefaultTimeRangeTypeSetting`](https://dev.nominal.io/api/rest/authentication-service.md#defaulttimerangetypesetting)
:   ​

    Values of `DefaultTimeRangeTypeSetting`

    `DEFAULT`
    :   ​

    `ABSOLUTE`
    :   ​

    `RELATIVE`
    :   ​

`appearance` [`AppearanceSetting`](https://dev.nominal.io/api/rest/authentication-service.md#appearancesetting)
:   ​

    Values of `AppearanceSetting`

    `SYSTEM`
    :   ​

    `LIGHT`
    :   ​

    `DARK`
    :   ​

`timezone` [`TimezoneSetting`](https://dev.nominal.io/api/rest/authentication-service.md#timezonesetting)
:   ​

    Values of `TimezoneSetting`

    `LOCAL`
    :   ​

    `UTC`
    :   ​

`timeSeriesHoverTooltipConcise` boolean deprecated
:   **Deprecated:** Use `chartHoverTooltipMode` instead. If `chartHoverTooltipMode` is not set, this field will be used: `true` as `SINGLE` and `false` as `VERBOSE`.

`chartHoverTooltipMode` [`ChartTooltipModeSetting`](https://dev.nominal.io/api/rest/authentication-service.md#charttooltipmodesetting)
:   ​

    Values of `ChartTooltipModeSetting`

    `VERBOSE`
    :   ​

    `CONCISE`
    :   ​

    `MULTI_ROW_CONCISE`
    :   ​

    `SINGLE`
    :   ​

    `NONE`
    :   ​

`defaultNumberFormats` [`DefaultNumberFormatConfigurations`](https://dev.nominal.io/api/rest/authentication-service.md#defaultnumberformatconfigurations)
:   ​

    Fields of `DefaultNumberFormatConfigurations`

    `data` [`NumberFormat`](https://dev.nominal.io/api/rest/authentication-service.md#numberformat)
    :   Default number format for data values, e.g. chart tooltip and value table cell values.

        Fields of `NumberFormat`

        `sigFigs` integer
        :   Include the specified number of significant figures, rounding if needed.

        `displayOption` [`NumberFormatDisplayOption`](https://dev.nominal.io/api/rest/authentication-service.md#numberformatdisplayoption)
        :   The base display format for the number.

            Values of `NumberFormatDisplayOption`

            `SCIENTIFIC`
            :   ​

            `SUCCINCT`
            :   ​

            `LOCALE`
            :   ​

            `PLAIN`
            :   ​

        `fixedDecimalPlaces` integer deprecated
        :   **Deprecated:** use decimalPlaces instead

        `decimalPlaces` [`DecimalPlaces`](https://dev.nominal.io/api/rest/authentication-service.md#decimalplaces)
        :   Options for formatting the decimal part of number.

            **fixed**

            Set `type` to `"fixed"`.

            `fixed` [`FixedDecimalPlaces`](https://dev.nominal.io/api/rest/authentication-service.md#fixeddecimalplaces)
            :   ​

                Fields of `FixedDecimalPlaces`

                `places` integer
                :   ​

            **max**

            Set `type` to `"max"`.

            `max` [`MaxDecimalPlaces`](https://dev.nominal.io/api/rest/authentication-service.md#maxdecimalplaces)
            :   ​

                Fields of `MaxDecimalPlaces`

                `places` integer
                :   ​

`relativeTimestampFormat` [`RelativeTimestampFormat`](https://dev.nominal.io/api/rest/authentication-service.md#relativetimestampformat)
:   Relative timestamp display preference.

    **temporalSubunits**

    Set `type` to `"temporalSubunits"`.

    `temporalSubunits` [`TemporalSubunitsRelativeTimestampFormat`](https://dev.nominal.io/api/rest/authentication-service.md#temporalsubunitsrelativetimestampformat)
    :   ​

    **totalSeconds**

    Set `type` to `"totalSeconds"`.

    `totalSeconds` [`TotalSecondsRelativeTimestampFormat`](https://dev.nominal.io/api/rest/authentication-service.md#totalsecondsrelativetimestampformat)
    :   ​

`vimModeEnabled` boolean
:   ​

`defaultWorkbookVisibleInSearch` boolean
:   Whether newly created workbooks are visible in search by default. If absent, the organization default applies.

Request

**curl**

```shell
curl -X PUT "https://api.gov.nominal.io/api/authentication/v2/my/settings" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "defaultTimeRangeType": "DEFAULT",
  "appearance": "SYSTEM",
  "timezone": "LOCAL",
  "timeSeriesHoverTooltipConcise": true,
  "chartHoverTooltipMode": "VERBOSE",
  "defaultNumberFormats": {
    "data": {
      "sigFigs": 1,
      "displayOption": "SCIENTIFIC",
      "fixedDecimalPlaces": 1,
      "decimalPlaces": {
        "type": "fixed",
        "fixed": {
          "places": 1
        }
      }
    }
  },
  "relativeTimestampFormat": {
    "type": "temporalSubunits",
    "temporalSubunits": {}
  },
  "vimModeEnabled": true,
  "defaultWorkbookVisibleInSearch": true
}'
```

**requests**

```python
import requests

response = requests.put(
    "https://api.gov.nominal.io/api/authentication/v2/my/settings",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "defaultTimeRangeType": "DEFAULT",
        "appearance": "SYSTEM",
        "timezone": "LOCAL",
        "timeSeriesHoverTooltipConcise": True,
        "chartHoverTooltipMode": "VERBOSE",
        "defaultNumberFormats": {
            "data": {
                "sigFigs": 1,
                "displayOption": "SCIENTIFIC",
                "fixedDecimalPlaces": 1,
                "decimalPlaces": {"type": "fixed", "fixed": {"places": 1}},
            },
        },
        "relativeTimestampFormat": {"type": "temporalSubunits", "temporalSubunits": {}},
        "vimModeEnabled": True,
        "defaultWorkbookVisibleInSearch": True,
    },
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.put(
    "https://api.gov.nominal.io/api/authentication/v2/my/settings",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "defaultTimeRangeType": "DEFAULT",
        "appearance": "SYSTEM",
        "timezone": "LOCAL",
        "timeSeriesHoverTooltipConcise": True,
        "chartHoverTooltipMode": "VERBOSE",
        "defaultNumberFormats": {
            "data": {
                "sigFigs": 1,
                "displayOption": "SCIENTIFIC",
                "fixedDecimalPlaces": 1,
                "decimalPlaces": {"type": "fixed", "fixed": {"places": 1}},
            },
        },
        "relativeTimestampFormat": {"type": "temporalSubunits", "temporalSubunits": {}},
        "vimModeEnabled": True,
        "defaultWorkbookVisibleInSearch": True,
    },
)
response.raise_for_status()
print(response.json())
```

**aiohttp**

```python
import asyncio

import aiohttp

async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.put(
            "https://api.gov.nominal.io/api/authentication/v2/my/settings",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "defaultTimeRangeType": "DEFAULT",
                "appearance": "SYSTEM",
                "timezone": "LOCAL",
                "timeSeriesHoverTooltipConcise": True,
                "chartHoverTooltipMode": "VERBOSE",
                "defaultNumberFormats": {
                    "data": {
                        "sigFigs": 1,
                        "displayOption": "SCIENTIFIC",
                        "fixedDecimalPlaces": 1,
                        "decimalPlaces": {"type": "fixed", "fixed": {"places": 1}},
                    },
                },
                "relativeTimestampFormat": {
                    "type": "temporalSubunits",
                    "temporalSubunits": {},
                },
                "vimModeEnabled": True,
                "defaultWorkbookVisibleInSearch": True,
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "defaultTimeRangeType": "DEFAULT",
  "appearance": "SYSTEM",
  "timezone": "LOCAL",
  "timeSeriesHoverTooltipConcise": true,
  "chartHoverTooltipMode": "VERBOSE",
  "defaultNumberFormats": {
    "data": {
      "sigFigs": 1,
      "displayOption": "SCIENTIFIC",
      "fixedDecimalPlaces": 1,
      "decimalPlaces": {
        "type": "fixed",
        "fixed": {
          "places": 1
        }
      }
    }
  },
  "relativeTimestampFormat": {
    "type": "temporalSubunits",
    "temporalSubunits": {}
  },
  "vimModeEnabled": true,
  "defaultWorkbookVisibleInSearch": true
}
```

### Get my org settings

GET `/authentication/v2/org/settings`

Gets the settings of the org of the authenticated user.

Request

No parameters and no body.

Response

`defaultTimeRangeType` [`DefaultTimeRangeTypeSetting`](https://dev.nominal.io/api/rest/authentication-service.md#defaulttimerangetypesetting)
:   ​

    Values of `DefaultTimeRangeTypeSetting`

    `DEFAULT`
    :   ​

    `ABSOLUTE`
    :   ​

    `RELATIVE`
    :   ​

`defaultWorkbookVisibleInSearch` boolean
:   Whether newly created workbooks are visible in search by default.

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/authentication/v2/org/settings" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/authentication/v2/org/settings",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.get(
    "https://api.gov.nominal.io/api/authentication/v2/org/settings",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
```

**aiohttp**

```python
import asyncio

import aiohttp

async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.get(
            "https://api.gov.nominal.io/api/authentication/v2/org/settings",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "defaultTimeRangeType": "DEFAULT",
  "defaultWorkbookVisibleInSearch": true
}
```

### Update my org settings

PUT `/authentication/v2/org/settings`

Updates the settings of the org of the authenticated user.

Body

`defaultTimeRangeType` [`DefaultTimeRangeTypeSetting`](https://dev.nominal.io/api/rest/authentication-service.md#defaulttimerangetypesetting)
:   ​

    Values of `DefaultTimeRangeTypeSetting`

    `DEFAULT`
    :   ​

    `ABSOLUTE`
    :   ​

    `RELATIVE`
    :   ​

`defaultWorkbookVisibleInSearch` boolean
:   Whether newly created workbooks are visible in search by default.

Response

`defaultTimeRangeType` [`DefaultTimeRangeTypeSetting`](https://dev.nominal.io/api/rest/authentication-service.md#defaulttimerangetypesetting)
:   ​

    Values of `DefaultTimeRangeTypeSetting`

    `DEFAULT`
    :   ​

    `ABSOLUTE`
    :   ​

    `RELATIVE`
    :   ​

`defaultWorkbookVisibleInSearch` boolean
:   Whether newly created workbooks are visible in search by default.

Request

**curl**

```shell
curl -X PUT "https://api.gov.nominal.io/api/authentication/v2/org/settings" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "defaultTimeRangeType": "DEFAULT",
  "defaultWorkbookVisibleInSearch": true
}'
```

**requests**

```python
import requests

response = requests.put(
    "https://api.gov.nominal.io/api/authentication/v2/org/settings",
    headers={"Authorization": "Bearer <api key>"},
    json={"defaultTimeRangeType": "DEFAULT", "defaultWorkbookVisibleInSearch": True},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.put(
    "https://api.gov.nominal.io/api/authentication/v2/org/settings",
    headers={"Authorization": "Bearer <api key>"},
    json={"defaultTimeRangeType": "DEFAULT", "defaultWorkbookVisibleInSearch": True},
)
response.raise_for_status()
print(response.json())
```

**aiohttp**

```python
import asyncio

import aiohttp

async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.put(
            "https://api.gov.nominal.io/api/authentication/v2/org/settings",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "defaultTimeRangeType": "DEFAULT",
                "defaultWorkbookVisibleInSearch": True,
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "defaultTimeRangeType": "DEFAULT",
  "defaultWorkbookVisibleInSearch": true
}
```

### Search users v2

POST `/authentication/v2/users`

Searches for users by email and displayName.

Body

`query` [`SearchUsersQuery`](https://dev.nominal.io/api/rest/authentication-service.md#searchusersquery) required
:   ​

    **and**

    Set `type` to `"and"`.

    `and` array of [`SearchUsersQuery`](https://dev.nominal.io/api/rest/authentication-service.md#searchusersquery)
    :   ​

    **or**

    Set `type` to `"or"`.

    `or` array of [`SearchUsersQuery`](https://dev.nominal.io/api/rest/authentication-service.md#searchusersquery)
    :   ​

    **exactMatch**

    Set `type` to `"exactMatch"`.

    `exactMatch` string
    :   Performs case insensitive exact match on email

    **searchText**

    Set `type` to `"searchText"`.

    `searchText` string
    :   Searches email and display name

`sortBy` [`SortBy`](https://dev.nominal.io/api/rest/authentication-service.md#sortby)
:   UPDATED_AT descending by default

    Fields of `SortBy`

    `isDescending` boolean required
    :   ​

    `field` [`SortByField`](https://dev.nominal.io/api/rest/authentication-service.md#sortbyfield) required
    :   ​

        Values of `SortByField`

        `NAME`
        :   ​

        `EMAIL`
        :   ​

        `CREATED_AT`
        :   ​

        `UPDATED_AT`
        :   ​

`nextPageToken` string
:   ​

`pageSize` integer
:   Defaults to 100. Will throw if larger than 1_000.

Response

`results` array of [`UserV2`](https://dev.nominal.io/api/rest/authentication-service.md#userv2)
:   ​

    Fields of `UserV2`

    `rid` string (RID)
    :   ​

    `orgRid` string (RID)
    :   ​

    `email` string
    :   ​

    `displayName` string
    :   ​

    `avatarUrl` string
    :   Avatar URL or a default avatar if the user does not have one.

    `createdAt` string (date-time)
    :   ​

`nextPageToken` string
:   ​

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/authentication/v2/users" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "query": {
    "type": "and",
    "and": []
  }
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/authentication/v2/users",
    headers={"Authorization": "Bearer <api key>"},
    json={"query": {"type": "and", "and": []}},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/authentication/v2/users",
    headers={"Authorization": "Bearer <api key>"},
    json={"query": {"type": "and", "and": []}},
)
response.raise_for_status()
print(response.json())
```

**aiohttp**

```python
import asyncio

import aiohttp

async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/authentication/v2/users",
            headers={"Authorization": "Bearer <api key>"},
            json={"query": {"type": "and", "and": []}},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "results": [
    {
      "rid": "<user rid>",
      "orgRid": "<org rid>",
      "email": "<email>",
      "displayName": "<display name>",
      "avatarUrl": "<avatar url>",
      "createdAt": "2026-01-01T00:00:00Z"
    }
  ],
  "nextPageToken": "<token>"
}
```

### Get users

POST `/authentication/v2/users/batch`

Get users by RID. Returns objects for any of the requested RIDs that are members or guests of the caller’s org.

Body

The body is an array of string (RID).

Response

The body is an array of [`UserV2`](https://dev.nominal.io/api/rest/authentication-service.md#userv2).

Fields of `UserV2`

`rid` string (RID)
:   ​

`orgRid` string (RID)
:   ​

`email` string
:   ​

`displayName` string
:   ​

`avatarUrl` string
:   Avatar URL or a default avatar if the user does not have one.

`createdAt` string (date-time)
:   ​

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/authentication/v2/users/batch" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '[
  "<user rid>"
]'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/authentication/v2/users/batch",
    headers={"Authorization": "Bearer <api key>"},
    json=["<user rid>"],
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/authentication/v2/users/batch",
    headers={"Authorization": "Bearer <api key>"},
    json=["<user rid>"],
)
response.raise_for_status()
print(response.json())
```

**aiohttp**

```python
import asyncio

import aiohttp

async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/authentication/v2/users/batch",
            headers={"Authorization": "Bearer <api key>"},
            json=["<user rid>"],
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
[
  {
    "rid": "<user rid>",
    "orgRid": "<org rid>",
    "email": "<email>",
    "displayName": "<display name>",
    "avatarUrl": "<avatar url>",
    "createdAt": "2026-01-01T00:00:00Z"
  }
]
```

### Get user

GET `/authentication/v2/users/{userRid}`

Gets a user by RID. Throws if the requested RID is not a member or guest of the caller’s org.

Path parameters

`userRid` string (RID) required
:   ​

Response

`rid` string (RID)
:   ​

`orgRid` string (RID)
:   ​

`email` string
:   ​

`displayName` string
:   ​

`avatarUrl` string
:   Avatar URL or a default avatar if the user does not have one.

`createdAt` string (date-time)
:   ​

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/authentication/v2/users/<user rid>" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/authentication/v2/users/<user rid>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.get(
    "https://api.gov.nominal.io/api/authentication/v2/users/<user rid>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
```

**aiohttp**

```python
import asyncio

import aiohttp

async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.get(
            "https://api.gov.nominal.io/api/authentication/v2/users/<user rid>",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "rid": "<user rid>",
  "orgRid": "<org rid>",
  "email": "<email>",
  "displayName": "<display name>",
  "avatarUrl": "<avatar url>",
  "createdAt": "2026-01-01T00:00:00Z"
}
```

### Get jwks

GET `/authentication/v2/jwks`

Returns JWKS (JSON Web Key Set) for MediaMTX JWT verification. Only available if MediaMTX integration is enabled.

No API key needed.

Request

No parameters and no body.

Response

`keys` array of [`Jwk`](https://dev.nominal.io/api/rest/authentication-service.md#jwk)
:   ​

    Fields of `Jwk`

    `kty` string
    :   ​

    `kid` string
    :   ​

    `use` string
    :   ​

    `alg` string
    :   ​

    `n` string
    :   ​

    `e` string
    :   ​

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/authentication/v2/jwks"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/authentication/v2/jwks",
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.get(
    "https://api.gov.nominal.io/api/authentication/v2/jwks",
)
response.raise_for_status()
print(response.json())
```

**aiohttp**

```python
import asyncio

import aiohttp

async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.get(
            "https://api.gov.nominal.io/api/authentication/v2/jwks",
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "keys": [
    {
      "kty": "<kty>",
      "kid": "<kid>",
      "use": "<use>",
      "alg": "<alg>",
      "n": "<n>",
      "e": "<e>"
    }
  ]
}
```

### Batch preregister users

POST `/authentication/v2/batch-preregister-users`

Batch preregister users in the caller’s organization. Only creates new users for emails that don’t already exist — existing accounts are silently skipped and not returned in the response. The caller must be an admin of the organization.

Body

`emails` array of string
:   The list of email addresses to preregister. Maximum 1000 entries.

Response

`users` map of string to [`UserV2`](https://dev.nominal.io/api/rest/authentication-service.md#userv2)
:   Map of email to UserV2 for each newly created user.

    Fields of `UserV2`

    `rid` string (RID)
    :   ​

    `orgRid` string (RID)
    :   ​

    `email` string
    :   ​

    `displayName` string
    :   ​

    `avatarUrl` string
    :   Avatar URL or a default avatar if the user does not have one.

    `createdAt` string (date-time)
    :   ​

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/authentication/v2/batch-preregister-users" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "emails": [
    "<emails>"
  ]
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/authentication/v2/batch-preregister-users",
    headers={"Authorization": "Bearer <api key>"},
    json={"emails": ["<emails>"]},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/authentication/v2/batch-preregister-users",
    headers={"Authorization": "Bearer <api key>"},
    json={"emails": ["<emails>"]},
)
response.raise_for_status()
print(response.json())
```

**aiohttp**

```python
import asyncio

import aiohttp

async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/authentication/v2/batch-preregister-users",
            headers={"Authorization": "Bearer <api key>"},
            json={"emails": ["<emails>"]},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "users": {
    "<key>": {
      "rid": "<user rid>",
      "orgRid": "<org rid>",
      "email": "<email>",
      "displayName": "<display name>",
      "avatarUrl": "<avatar url>",
      "createdAt": "2026-01-01T00:00:00Z"
    }
  }
}
```

### List org login activity

POST `/authentication/v2/admin/org/login-activity`

Lists members of one or more orgs together with their most recent login into each org, sorted and paginated. The caller must be an admin of every org requested — defaults to the caller’s own org if none are specified.

Body

`orgs` array of string (RID)
:   Defaults to the caller’s own org. The caller must be an admin of every org listed.

`isDescending` boolean
:   Sorts by last login time. Defaults to true (most recent login first, with users who have never logged in last). Set to false to sort oldest-first, with users who have never logged in first.

`nextPageToken` string
:   ​

`pageSize` integer
:   Defaults to 100. Will throw if larger than 1_000.

Response

`results` array of [`OrgUserLoginActivity`](https://dev.nominal.io/api/rest/authentication-service.md#orguserloginactivity)
:   ​

    Fields of `OrgUserLoginActivity`

    `userRid` string (RID)
    :   ​

    `orgRid` string (RID)
    :   ​

    `lastLoginAt` string (date-time)
    :   The most recent time this user logged into orgRid. Absent if they have never logged in.

`nextPageToken` string
:   ​

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/authentication/v2/admin/org/login-activity" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "orgs": [
    "<org rid>"
  ],
  "isDescending": true,
  "nextPageToken": "<token>",
  "pageSize": 1
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/authentication/v2/admin/org/login-activity",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "orgs": ["<org rid>"],
        "isDescending": True,
        "nextPageToken": "<token>",
        "pageSize": 1,
    },
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/authentication/v2/admin/org/login-activity",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "orgs": ["<org rid>"],
        "isDescending": True,
        "nextPageToken": "<token>",
        "pageSize": 1,
    },
)
response.raise_for_status()
print(response.json())
```

**aiohttp**

```python
import asyncio

import aiohttp

async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/authentication/v2/admin/org/login-activity",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "orgs": ["<org rid>"],
                "isDescending": True,
                "nextPageToken": "<token>",
                "pageSize": 1,
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "results": [
    {
      "userRid": "<user rid>",
      "orgRid": "<org rid>",
      "lastLoginAt": "2026-01-01T00:00:00Z"
    }
  ],
  "nextPageToken": "<token>"
}
```

### Deactivate user

POST `/authentication/v2/admin/users/{userRid}/deactivate`

Deactivates a user in the caller’s organization, preventing them from obtaining new Nominal session tokens in that org. Also revokes all of the user’s API keys in the caller’s organization. Caller must be an admin of their org. Target user must be a member or guest of the org.

Path parameters

`userRid` string (RID) required
:   ​

Response

No content (HTTP 204).

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/authentication/v2/admin/users/<user rid>/deactivate" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/authentication/v2/admin/users/<user rid>/deactivate",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/authentication/v2/admin/users/<user rid>/deactivate",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
```

**aiohttp**

```python
import asyncio

import aiohttp

async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/authentication/v2/admin/users/<user rid>/deactivate",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()

asyncio.run(main())
```

Response: `204`

No content.

### Reactivate user

POST `/authentication/v2/admin/users/{userRid}/reactivate`

Reactivates a user in the caller’s organization. Caller must be an admin of their org. Target user must be a member or guest of the org.

Path parameters

`userRid` string (RID) required
:   ​

Response

No content (HTTP 204).

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/authentication/v2/admin/users/<user rid>/reactivate" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/authentication/v2/admin/users/<user rid>/reactivate",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/authentication/v2/admin/users/<user rid>/reactivate",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
```

**aiohttp**

```python
import asyncio

import aiohttp

async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/authentication/v2/admin/users/<user rid>/reactivate",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()

asyncio.run(main())
```

Response: `204`

No content.

## Errors

[Errors](https://dev.nominal.io/api/legacy.md#errors) shows how these errors are sent.

Each error’s `errorName` is `Authentication:` followed by its name below.

| Status | Name | Notes |
| --- | --- | --- |
| 400 | `OrgLoginActivityLimitExceeded` |  |
| 400 | `SearchUsersLimitExceeded` |  |
| 403 | `NotAuthorized` |  |
| 403 | `NotAuthorizedAdmin` |  |
| 404 | `OrgNotFound` |  |
| 404 | `UserNotFound` |  |
| 500 | `MultipleUsersForSameEmail` |  |

## Types

### AppearanceSetting

`SYSTEM`
:   ​

`LIGHT`
:   ​

`DARK`
:   ​

### ChartTooltipModeSetting

Tooltip modes which affect the data displayed in chart tooltips, primarily for time series charts. VERBOSE: Shows all the chart’s plotted series in the hover tooltip. CONCISE: Shows only the plotted series within the row currently being hovered. MULTI_ROW_CONCISE: Show separate tooltips for each row, where each shows the series plotted in that row. SINGLE: Shows only the plotted series closest to/under the cursor. NONE: Hides the tooltip entirely (also affects tooltips for other chart types).

`VERBOSE`
:   ​

`CONCISE`
:   ​

`MULTI_ROW_CONCISE`
:   ​

`SINGLE`
:   ​

`NONE`
:   ​

### DecimalPlaces

Set `type` to the name of one of the other fields, and set only that field.

`fixed` [`FixedDecimalPlaces`](https://dev.nominal.io/api/rest/authentication-service.md#fixeddecimalplaces)
:   ​

`max` [`MaxDecimalPlaces`](https://dev.nominal.io/api/rest/authentication-service.md#maxdecimalplaces)
:   ​

### DefaultNumberFormatConfigurations

`data` [`NumberFormat`](https://dev.nominal.io/api/rest/authentication-service.md#numberformat)
:   Default number format for data values, e.g. chart tooltip and value table cell values.

### DefaultTimeRangeTypeSetting

`DEFAULT`
:   ​

`ABSOLUTE`
:   ​

`RELATIVE`
:   ​

### FixedDecimalPlaces

Format the number to a fixed number of decimal places, padding with zeroes or rounding as needed.

`places` integer required
:   ​

### Jwk

A JSON Web Key (JWK) representation for RSA public keys

`kty` string required
:   ​

`kid` string required
:   ​

`use` string required
:   ​

`alg` string required
:   ​

`n` string required
:   ​

`e` string required
:   ​

### MaxDecimalPlaces

Format the number to a maximum number of decimal places, rounding numbers that have greater precision.

`places` integer required
:   ​

### NumberFormat

Number format for numeric cells, eg 1e4 | 10000 | 10,000.

`sigFigs` integer
:   Include the specified number of significant figures, rounding if needed.

`displayOption` [`NumberFormatDisplayOption`](https://dev.nominal.io/api/rest/authentication-service.md#numberformatdisplayoption)
:   The base display format for the number.

`fixedDecimalPlaces` integer deprecated
:   **Deprecated:** use decimalPlaces instead

`decimalPlaces` [`DecimalPlaces`](https://dev.nominal.io/api/rest/authentication-service.md#decimalplaces)
:   Options for formatting the decimal part of number.

### NumberFormatDisplayOption

`SCIENTIFIC`
:   ​

`SUCCINCT`
:   ​

`LOCALE`
:   ​

`PLAIN`
:   ​

### OrgUserLoginActivity

`userRid` string (RID) required
:   ​

`orgRid` string (RID) required
:   ​

`lastLoginAt` string (date-time)
:   The most recent time this user logged into orgRid. Absent if they have never logged in.

### RelativeTimestampFormat

User-level display format for relative timestamps.

Set `type` to the name of one of the other fields, and set only that field.

`temporalSubunits` [`TemporalSubunitsRelativeTimestampFormat`](https://dev.nominal.io/api/rest/authentication-service.md#temporalsubunitsrelativetimestampformat)
:   ​

`totalSeconds` [`TotalSecondsRelativeTimestampFormat`](https://dev.nominal.io/api/rest/authentication-service.md#totalsecondsrelativetimestampformat)
:   ​

### SearchUsersQuery

Set `type` to the name of one of the other fields, and set only that field.

`and` array of [`SearchUsersQuery`](https://dev.nominal.io/api/rest/authentication-service.md#searchusersquery)
:   ​

`or` array of [`SearchUsersQuery`](https://dev.nominal.io/api/rest/authentication-service.md#searchusersquery)
:   ​

`exactMatch` string
:   Performs case insensitive exact match on email

`searchText` string
:   Searches email and display name

### SortBy

`isDescending` boolean required
:   ​

`field` [`SortByField`](https://dev.nominal.io/api/rest/authentication-service.md#sortbyfield) required
:   ​

### SortByField

`NAME`
:   ​

`EMAIL`
:   ​

`CREATED_AT`
:   ​

`UPDATED_AT`
:   ​

### TemporalSubunitsRelativeTimestampFormat

Display relative timestamps as temporal subunits, such as 1h 20m 30s.

An empty JSON object, `{}`.

### TimezoneSetting

`LOCAL`
:   ​

`UTC`
:   ​

### TotalSecondsRelativeTimestampFormat

Display relative timestamps as a total number of seconds.

An empty JSON object, `{}`.

### UserV2

`rid` string (RID) required
:   ​

`orgRid` string (RID) required
:   ​

`email` string required
:   ​

`displayName` string required
:   ​

`avatarUrl` string required
:   Avatar URL or a default avatar if the user does not have one.

`createdAt` string (date-time)
:   ​

Page design based on [Scalar](https://scalar.com), MIT License.
