# Developer's Guide

API documentation and developer resources

# Admin API

Admin API, Account Endpoints, Organization Endpoints, Customer Endpoints, Infrastructure Endpoints

# Admin API

The Frame Admin API service is based on standard REST HTTPS calls. All API endpoints require signed authentication via HTTP headers and role-based access control configured within Frame Console.

The typical workflow for an API call is as follows:

1.  Authenticate with the Frame REST API to sign the HTTPS API request. You'll need to create a signature with the `client_id`, the `client_secret`, and a timestamp. The `client_id` and `client_secret`
    is obtained by a Frame administrator in Frame Console.

2.  Make the HTTPS REST call to the Admin API endpoint using the `client_id`, timestamp, and the signature in the HTTP header.

3.  The Frame REST API verifies the signature of the HTTPS request, verifies the requestor has sufficient authorization to make the request, and will then send the requested response.

Frame Admin API is served from the following URL:

```
https://api.console.nutanix.com/v1
```

In the next section, we will review how to properly configure Frame to authenticate and authorize Frame Admin API requests.

## Authentication and Authorization

All REST API calls require signed requests for authentication of each 3rd party service request. To sign an API request call, a **client_id** and **client_secret** (obtained from Frame Console by an administrator) are required for signature creation and verification.

### How to Provision API Credentials

1. Navigate to your Frame Admin Console as an Administrator.

2. Navigate to the **Customer** or **Organization** page and select **Users** from the left-hand menu. 

3.  Enable the **API** option and click **Save**. The **API** tab will appear on the Users Page. This tab lists all of the API providers that have been created at the Customer or Organization level.

    ![](https://docs.difr.com/uploads/images/gallery/2025-10/Ljzoverview-1.png)

4. Go to the newly created **API** tab and click **Add API User**.

    ![](https://docs.difr.com/uploads/images/gallery/2025-10/tSCoverview-2-new.png)

5.  Enter a name for the API provider and choose the [role](/books/platform-administrators-guide/page/available-roles) and scope (customer, organization, or account) you
    would like to grant to the API key. You may assign more than one role and scope to the API provider by clicking on **Add a role**. Click **Add** at the bottom of the window once you have defined the name, role(s), and scope(s).

    ![](https://docs.difr.com/uploads/images/gallery/2025-10/qiRoverview-3-new.png)

6. After successfully creating a new API Use, its credentials will be displayed. Record the `client_id` and `client_secret` to be used later by your API calls.

    ![](https://docs.difr.com/uploads/images/gallery/2025-10/y8Eoverview-4-new.png)

## Making API Calls

In the last section, you generated a `client_id` and a `client_secret`.

The `client_id` is a unique string that Frame uses to identify and authorize the proper entity and API permissions.

The `client_secret` is an [HMAC-SHA256](https://en.wikipedia.org/wiki/HMAC) key used to generate the signature and is required by the signature verification process.

A signature is created by applying the HMAC-SHA256 algorithm to a string that is constructed from the `client_id` and a timestamp. The timestamp is the current time in seconds since epoch.

The proper steps for creating a signature are as follows:

1.  Get the current timestamp.

2.  Create a string by concatenating the timestamp with the
    `client_id` (timestamp +
    client_id).

3.  Apply HMAC-SHA256 on the newly created string using the
    `client_secret`.

In order to verify the signature, our API also requires the `client_id`, and the
timestamp in your request's HTTP headers. The `client_secret` should
**NOT** be included. 

### Python 3 Example

Below is a simple example of a **Python 3** script that can be used to
generate the signature needed for the API call and then the HTTPS
request.

```python
#!/bin/env python

import hashlib
import hmac
import time
import requests

# Client credentials
client_id = "<Your API Client ID goes here>"
client_secret = b"<Your API Client Secret goes here>"

# Create signature
timestamp = int(time.time())
to_sign = "%s%s" % (timestamp, client_id)
signature = hmac.new(client_secret, to_sign.encode('utf-8'), hashlib.sha256).hexdigest()

# Prepare http request headers
headers = { "X-Frame-ClientId": client_id, "X-Frame-Timestamp": str(timestamp), "X-Frame-Signature": signature }

# Make request
r = requests.get("https://api.console.nutanix.com/v1/accounts", headers=headers)
accounts = r.json()

# Print accounts
for account in accounts:
  print(account)
```

## API Endpoints

Lastly, each Frame entity (Customer, Organization, Account, Infrastructure) has its own set of endpoints.

# Account Endpoints

### List Accounts

Lists all Frame accounts.

<span class="badge badge-get">GET</span> <code>/accounts/</code>

#### Request Parameters

| Name            | Description                                                            | Param Type   | Data Type | Required |
| --------------- | ---------------------------------------------------------------------- | ------------ | --------- | -------- |
| name            | Name or portion of name you would like to use for searching/filtering. | Search Query | string    | False    |
| organization_id | Frame Organization ID you'd would like to use for searching/filtering  | Search Query | string    | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "website": null,
    "name": "Aca Ivic Local",
    "last_publish": "2018-07-12T11:26:18.879116",
    "id": "b614cb6f-796b-4371-86cb-465d6dfc433b",
    "description": null,
    "active": true
  }
]
```

```bash
Status: 200 OK
```

</details>



---

### List Account Details

Returns details of an account.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id</code>

#### Request Parameters

| Name | Description      | Param Type | Data Type | Required |
| ---- | ---------------- | ---------- | --------- | -------- |
| id   | Frame Account ID | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/31cbf42c-8767-486c-9ed3-d6a804q7cfe1"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "active": false,
  "description": null,
  "id": "31cbf42c-8767-486c-9ed3-d6a804q7cfe1",
  "inserted_at": "2020-02-27T19:08:53.892063Z",
  "kind": "frame",
  "last_publish": null,
  "name": "Example Account",
  "notes": null,
  "url_slug": "example-account-slug",
  "website": null
}
```

```bash
Status: 200 OK
```

</details>



---

### List Account Availability Zones

Lists all availability zones of a Frame account.

<span class="badge badge-get">GET</span> <code>/accounts/:id/availability_zones</code>

#### Request Parameters

| Name | Description      | Param Type | Data Type | Required |
| ---- | ---------------- | ---------- | --------- | -------- |
| id   | Frame Account ID | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/availability_zones"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
["eu-central-1a", "eu-central-1b", "eu-central-1c"]
```

```bash
Status: 200 OK
```

</details>



---

### List Account Upgrade Groups

Lists all upgrade groups of the account.

<span class="badge badge-get">GET</span> <code>/accounts/:id/deployment_groups</code>

#### Request Parameters

| Name | Description      | Param Type | Data Type | Required |
| ---- | ---------------- | ---------- | --------- | -------- |
| id   | Frame Account ID | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/deployment_groups"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "id": "upgrade-group-1",
    "description": "Upgrade group 1 description",
    "not_selectable": false,
    "name": "Upgrade Group 1"
  }
]
```

```bash
Status: 200 OK
```

</details>



---

### Get Account User Volumes Settings

Returns user volumes settings of a Frame account.

<span class="badge badge-get">GET</span> <code>/accounts/:id/user_volumes_settings</code>

#### Request Parameters

| Name | Description      | Param Type | Data Type | Required |
| ---- | ---------------- | ---------- | --------- | -------- |
| id   | Frame Account ID | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/user_volumes_settings"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "user_personal_drive": {
    "enabled": true,
    "size": 1
  },
  "user_profile": {
    "enabled": true,
    "size": 1
  }
}
```

```bash
Status: 200 OK
```

</details>



---

### Get Account Domain Join Settings

Returns domain join settings of a Frame account.

<span class="badge badge-get">GET</span> <code>/accounts/:id/domain_join_settings</code>

#### Request Parameters

| Name | Description      | Param Type | Data Type | Required |
| ---- | ---------------- | ---------- | --------- | -------- |
| id   | Frame Account ID | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/domain_join_settings"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "settings": {
    "promote_user_to_local_admin": false,
    "ad_type": "",
    "delete_terminated_hostnames": false,
    "dns_servers": "",
    "domain_controller_ip": "",
    "domain_name": "",
    "enroll_intune": false,
    "logout_local_user": false,
    "machine_name_prefix": "",
    "service_account_name": "",
    "service_account_password": "",
    "sso_passthrough_enabled": false,
    "target_ou": "",
    "vpc_cidr": ""
  },
  "is_domain_join_available": true,
  "is_domain_join_enabled": true
}
```

```bash
Status: 200 OK
```

</details>



---

### Get Account General Settings

Returns general settings of a Frame account.

<span class="badge badge-get">GET</span> <code>/accounts/:id/general_settings</code>

#### Request Parameters

| Name | Description      | Param Type | Data Type | Required |
| ---- | ---------------- | ---------- | --------- | -------- |
| id   | Frame Account ID | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/general_settings"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "light_publish_settings": {
    "threshold": 10
  },
  "is_light_publish_enabled": false,
  "host_name_prefix": "IF-",
  "is_generate_session_report_enabled": false,
  "is_test_publish_enabled": false,
  "auto_termination_time": null,
  "is_login_banner_enabled": true,
  "is_terminal_banner_enabled": true,
  "login_banner_settings": {
    "title": "",
    "message": ""
  },
  "terminal_banner_settings": {
    "message": "",
    "color": "#FFFFFF",
    "background_color": "#FFFFFF"
  }
}
```

```bash
Status: 200 OK
```

</details>



---

### Get Account Session Settings

Returns session settings of a Frame account.

<span class="badge badge-get">GET</span> <code>/accounts/:id/session_settings</code>

#### Request Parameters

| Name | Description      | Param Type | Data Type | Required |
| ---- | ---------------- | ---------- | --------- | -------- |
| id   | Frame Account ID | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/session_settings"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "is_webrtc_enabled": false,
  "advanced_server_arguments": null,
  "advanced_terminal_arguments": null,
  "clipboard_integration": {
    "direction": "bidirectional",
    "is_enabled": true
  },
  "idle_timeout_minutes": 60,
  "is_app_switching_enabled": true,
  "is_camera_enabled": false,
  "is_cpu_display4k_enabled": true,
  "is_download_enabled": true,
  "is_grayscale_enabled": false,
  "is_microphone_enabled": false,
  "is_print_enabled": true,
  "is_settings_dialog_enabled": true,
  "is_upload_enabled": true,
  "is_usb_redirection_enabled": false,
  "max_audio_bit_rate_kbps": 160,
  "max_bandwidth_kbps": 0,
  "max_frame_rate_fps": 20,
  "max_session_duration_minutes": 0,
  "max_video_bit_rate_mbps": 16.0,
  "max_video_quantization": 42,
  "qos_rate_change": 4,
  "reservation_timeout_seconds": 600,
  "scale_video": 1.0,
  "session_preparation_timeout_minutes": 15,
  "terminal_build": "latest",
  "user_inactivity_timeout_minutes": 10,
  "video_buffer_length_ms": 0,
  "yuv444": false
}
```

```bash
Status: 200 OK
```

</details>



---

### Update Account Enterprise Profiles

Updates enterprise profiles of a Frame account. (Should be used only if enabling enterprise profiles or updating its size. In case you want to disable enterprise profiles, you should use disable_enterprise_profiles endpoint instead.)

<span class="badge badge-post">POST</span> <code>/accounts/:id/update_enterprise_profiles</code>

#### Request Parameters

| Name         | Description                                                                                                           | Param Type | Data Type | Required |
| ------------ | --------------------------------------------------------------------------------------------------------------------- | ---------- | --------- | -------- |
| account_id   | ID of the Org the account will be created under                                                                       | URL        | String    | True     |
| user_profile | A JSON object that includes values for the following properties: `enabled` of type boolean and `size` of type integer | Data       | JSON      | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/update_enterprise_profiles"
--data-raw '{
  "user_profile": {
    "enabled": true,
    "size": 1
  }
}'
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "enabled": true,
  "size": 1
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Update Account Personal Drives

Updates personal drives of a Frame account. (Should be used only if enabling personal drives or updating its size. In case you want to disable personal drives, you should use disable_personal_drives endpoint instead.)

<span class="badge badge-post">POST</span> <code>/accounts/:id/update_personal_drives</code>

#### Request Parameters

| Name       | Description                                                  | Param Type | Data Type | Required |
| ---------- | ------------------------------------------------------------ | ---------- | --------- | -------- |
| account_id | ID of the Org the account will be created under              | URL        | String    | True     |
| enabled    | Boolean which determines whether personal drives are enabled | Data       | Boolean   | True     |
| size       | Integer which determines size of personal drives if enabled  | Data       | Integer   | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/update_personal_drives"
--data-raw '{
  "enabled": true,
  "size": 1
  }'
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "enabled": true,
  "size": 1
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Disable Account Enterprise Profiles

Disables enterprise profiles of a Frame account and returns the pending task.

<span class="badge badge-post">POST</span> <code>/accounts/:id/disable_enterprise_profiles</code>

#### Request Parameters

| Name               | Description                                                                                    | Param Type | Data Type | Required |
| ------------------ | ---------------------------------------------------------------------------------------------- | ---------- | --------- | -------- |
| account_id         | ID of the Org the account will be created under                                                | URL        | String    | True     |
| do_backup          | Boolean which determines whether new backups of existing enterprise profiles should be created | Data       | Boolean   | False    |
| delete_all_backups | Boolean which determines whether existing backups should be deleted                            | Data       | Boolean   | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/disable_enterprise_profiles"
--data-raw '{
  "do_backup": false,
  "delete_all_backups": false
  }'
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "account_id": "6b9a8c85-dd5b-4c1c-9bf2-ca1ba8e537b7",
  "customer_id": "XXXXXXXX-5ab2-47ef-9f9c-XXXXXXXXXXX",
  "display_name": "Publishing Sandbox to Production",
  "duration_sec": null,
  "external_resource_id": null,
  "finished_at": null,
  "id": "c454d6da-fa30-4dc4-a533-6af2286d1754",
  "inserted_at": "2021-09-29T19:30:57.708442Z",
  "kind": "disable_enterprise_profiles",
  "organization_id": "2fb210e0-e931-4c62-83fd-b31fe13468ca",
  "pool_id": null,
  "progress_info": null,
  "result_info": null,
  "stage": "not_started",
  "started_by": {
    "email": "976bcbc7-945a-4511-b1ca-2a3f60e3cade.img.frame.nutanix.com_third-party-api",
    "first_name": "X",
    "id": "a4da51c5-1c74-45e6-b1ca-2ec739d528d2",
    "identity_provider": "third-party-api",
    "last_name": "X"
  },
  "updated_at": "2021-09-29T19:30:57.708442Z"
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Disable Account Personal Drives

Disables personal drives of a Frame account and returns the pending task.

<span class="badge badge-post">POST</span> <code>/accounts/:id/disable_personal_drives</code>

#### Request Parameters

| Name               | Description                                                                                    | Param Type | Data Type | Required |
| ------------------ | ---------------------------------------------------------------------------------------------- | ---------- | --------- | -------- |
| account_id         | ID of the Org the account will be created under                                                | URL        | String    | True     |
| do_backup          | Boolean which determines whether new backups of existing enterprise profiles should be created | Data       | Boolean   | False    |
| delete_all_backups | Boolean which determines whether existing backups should be deleted                            | Data       | Boolean   | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/disable_personal_drives"
--data-raw '{
  "do_backup": false,
  "delete_all_backups": false
  }'
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "account_id": "6b9a8c85-dd5b-4c1c-9bf2-ca1ba8e537b7",
  "customer_id": "XXXXXXXX-5ab2-47ef-9f9c-XXXXXXXXXXX",
  "display_name": "Publishing Sandbox to Production",
  "duration_sec": null,
  "external_resource_id": null,
  "finished_at": null,
  "id": "c454d6da-fa30-4dc4-a533-6af2286d1754",
  "inserted_at": "2021-09-29T19:30:57.708442Z",
  "kind": "disable_enterprise_profiles",
  "organization_id": "2fb210e0-e931-4c62-83fd-b31fe13468ca",
  "pool_id": null,
  "progress_info": null,
  "result_info": null,
  "stage": "not_started",
  "started_by": {
    "email": "976bcbc7-945a-4511-b1ca-2a3f60e3cade.img.frame.nutanix.com_third-party-api",
    "first_name": "X",
    "id": "a4da51c5-1c74-45e6-b1ca-2ec739d528d2",
    "identity_provider": "third-party-api",
    "last_name": "X"
  },
  "updated_at": "2021-09-29T19:30:57.708442Z"
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Update Account Domain Join Settings

Updates domain join settings of a Frame account and returns pending task.

<span class="badge badge-post">POST</span> <code>/accounts/:id/update_domain_join_settings</code>

#### Request Parameters

| Name                        | Description                                                             | Param Type | Data Type | Required |
| --------------------------- | ----------------------------------------------------------------------- | ---------- | --------- | -------- |
| account_id                  | ID of the Org the account will be created under                         | URL        | String    | True     |
| domain_name                 | Domain name                                                             | Data       | String    | False    |
| service_account_name        | Service account name                                                    | Data       | String    | False    |
| service_account_password    | Service account password                                                | Data       | String    | False    |
| target_ou                   | Target OU                                                               | Data       | String    | False    |
| dns_servers                 | DNS servers                                                             | Data       | String    | False    |
| logout_local_user           | Boolean which determines whether local user should be logged out        | Data       | Boolean   | False    |
| domain_controller_ip        | Domain controller IP                                                    | Data       | String    | False    |
| promote_user_to_local_admin | Boolean which determines whether user should be promoted to local admin | Data       | Boolean   | False    |
| machine_name_prefix         | Machine name prefix                                                     | Data       | String    | False    |
| sso_passthrough_enabled     | Boolean which determines whether SSO Passthrough is enabled             | Data       | Boolean   | False    |
| delete_terminated_hostnames | Boolean which determines whether terminated hostnames should be deleted | Data       | Boolean   | False    |
| ad_type                     | AD type                                                                 | Data       | String    | False    |
| enroll_intune               | Enroll intune?                                                          | Data       | Boolean   | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/update_domain_join_settings"
--data-raw '{
  "domain_name": "",
  "service_account_name: "",
  "service_account_password: "",
  "target_ou": "",
  "dns_servers": "",
  "logout_local_user": false,
  "domain_controller_ip": "",
  "promote_user_to_local_admin": true,
  "machine_name_prefix": "",
  "sso_passthrough_enabled": true,
  "delete_terminated_hostnames": false,
  "ad_type": "",
  "enroll_intune": false
  }'
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "pending_request": {
    "account_id": "6b9a8c85-dd5b-4c1c-9bf2-ca1ba8e537b7",
    "customer_id": "XXXXXXXX-5ab2-47ef-9f9c-XXXXXXXXXXX",
    "display_name": "Publishing Sandbox to Production",
    "duration_sec": null,
    "external_resource_id": null,
    "finished_at": null,
    "id": "c454d6da-fa30-4dc4-a533-6af2286d1754",
    "inserted_at": "2021-09-29T19:30:57.708442Z",
    "kind": "disable_enterprise_profiles",
    "organization_id": "2fb210e0-e931-4c62-83fd-b31fe13468ca",
    "pool_id": null,
    "progress_info": null,
    "result_info": null,
    "stage": "not_started",
    "started_by": {
      "email": "976bcbc7-945a-4511-b1ca-2a3f60e3cade.img.frame.nutanix.com_third-party-api",
      "first_name": "X",
      "id": "a4da51c5-1c74-45e6-b1ca-2ec739d528d2",
      "identity_provider": "third-party-api",
      "last_name": "X"
    },
    "updated_at": "2021-09-29T19:30:57.708442Z"
  }
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Update Account General Settings

Updates general settings of a Frame account.

<span class="badge badge-post">POST</span> <code>/accounts/:id/update_general_settings</code>

#### Request Parameters

| Name                       | Description                                                                | Param Type | Data Type | Required |
| -------------------------- | -------------------------------------------------------------------------- | ---------- | --------- | -------- |
| account_id                 | ID of the Org the account will be created under                            | URL        | String    | True     |
| is_terminal_banner_enabled | Boolean which determines whether terminal banner is enabled                | Data       | Boolean   | True     |
| terminal_banner_settings   | A JSON object with string values "background_color", "color" and "message" | Data       | JSON      | False    |
| is_login_banner_enabled    | Boolean which determines whether login banner is enabled                   | Data       | Boolean   | True     |
| login_banner_settings      | A JSON object with string values "title" and "message"                     | Data       | JSON      | False    |
| is_light_publish_enabled   | Boolean which determines whether light publish is enabled                  | Data       | Boolean   | True     |
| light_publish_settings     | A JSON object with integer value "threshold"                               | Data       | JSON      | False    |
| host_name_prefix           | Host name prefix                                                           | Data       | String    | True     |
| is_test_publish_enabled    | Boolean which determines whether test publish is enabled                   | Data       | Boolean   | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/update_general_settings"
--data-raw '{
  "is_terminal_banner_enabled" true,
  "terminal_banner_settings": {
    "background_color": "#FFFFFF",
    "color": "#000000",
    "message": ""
  },
  "is_login_banner_enabled": true,
  "login_banner_settings": {
    "title": "",
    "message": ""
  },
  "is_light_publish_enabled": true,
  "light_publish_settings": {
    "threshold": 1
  },
  "host_name_prefix": "",
  "is_test_publish_enabled": false
}'
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "is_terminal_banner_enabled" true,
  "terminal_banner_settings": {
    "background_color": "#FFFFFF",
    "color": "#000000",
    "message": ""
  },
  "is_login_banner_enabled": true,
  "login_banner_settings": {
    "title": "",
    "message": ""
  },
  "is_light_publish_enabled": true,
  "light_publish_settings": {
    "threshold": 1
  },
  "host_name_prefix": "",
  "is_test_publish_enabled": false
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Update Account Session Settings

Updates session settings of a Frame account.

<span class="badge badge-post">POST</span> <code>/accounts/:id/update_session_settings</code>

#### Request Parameters

| Name                                | Description                                                                                                                                                    | Param Type | Data Type | Required |
| ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | --------- | -------- |
| account_id                          | ID of the Org the account will be created under                                                                                                                | URL        | String    | True     |
| is_app_switching_enabled            | Is application switching enabled?                                                                                                                              | Data       | Boolean   | True     |
| is_microphone_enabled               | Is microphone enabled?                                                                                                                                         | Data       | Boolean   | True     |
| is_camera_enabled                   | Is camera enabled?                                                                                                                                             | Data       | Boolean   | False    |
| is_usb_redirection_enabled          | Is USB redirection enabled?                                                                                                                                    | Data       | Boolean   | False    |
| clipboard_integration               | A JSON object with "is_enabled" boolean value and string value "direction" which has possible values: "local_to_remote", "remote_to_local" and "bidirectional" | Data       | JSON      | True     |
| is_download_enabled                 | Is download enabled?                                                                                                                                           | Data       | Boolean   | True     |
| is_cpu_display4k_enabled            | Is CPU display 4K enabled?                                                                                                                                     | Data       | Boolean   | True     |
| is_upload_enabled                   | Is upload enabled?                                                                                                                                             | Data       | Boolean   | True     |
| is_print_enabled                    | Is print enabled?                                                                                                                                              | Data       | Boolean   | True     |
| reservation_timeout_seconds         | Reservation timeout in seconds                                                                                                                                 | Data       | Integer   | True     |
| user_inactivity_timeout_minutes     | User inactivity timeout in minutes                                                                                                                             | Data       | Integer   | True     |
| idle_timeout_minutes                | Idle timeout in minutes                                                                                                                                        | Data       | Integer   | True     |
| max_session_duration_minutes        | Max session duration in minutes                                                                                                                                | Data       | Integer   | True     |
| session_preparation_timeout_minutes | Session preparation timeout in minutes                                                                                                                         | Data       | Integer   | True     |
| max_bandwidth_kbps                  | Max bandwidth in KBPS                                                                                                                                          | Data       | Integer   | True     |
| max_frame_rate_fps                  | Max Frame rate in FPS                                                                                                                                          | Data       | Integer   | True     |
| max_video_bit_rate_mbps             | Max video bit rate in MBPS                                                                                                                                     | Data       | Integer   | True     |
| max_audio_bit_rate_kbps             | Max audio bit rate in KBPS                                                                                                                                     | Data       | Integer   | True     |
| yuv444                              | Boolean which determines whether YUV444 feature is enabled                                                                                                     | Data       | Boolean   | True     |
| scale_video                         | Scale video                                                                                                                                                    | Data       | Number    | True     |
| max_video_quantization              | Max video quantization                                                                                                                                         | Data       | Integer   | True     |
| qos_rate_change                     | QOS rate change                                                                                                                                                | Data       | Integer   | True     |
| is_grayscale_enabled                | Is grayscale enabled?                                                                                                                                          | Data       | Boolean   | True     |
| is_webrtc_enabled                   | Is webRTC enabled?                                                                                                                                             | Data       | Boolean   | True     |
| video_buffer_length_ms              | Video buffer length in ms                                                                                                                                      | Data       | Integer   | True     |
| is_settings_dialog_enabled          | Is settings dialog enabled?                                                                                                                                    | Data       | Boolean   | True     |
| advanced_terminal_arguments         | Advanced terminal arguments                                                                                                                                    | Data       | String    | False    |
| advanced_server_arguments           | Advanced server arguments                                                                                                                                      | Data       | String    | False    |
| terminal_build                      | Terminal Build                                                                                                                                                 | Data       | String    | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/update_session_settings"
--data-raw '{
  "session_settings": {
    "is_webrtc_enabled": false,
    "advanced_server_arguments": null,
    "advanced_terminal_arguments": null,
    "clipboard_integration": {
      "direction": "bidirectional",
      "is_enabled": true
    },
    "idle_timeout_minutes": 60,
    "is_app_switching_enabled": true,
    "is_camera_enabled": false,
    "is_cpu_display4k_enabled": true,
    "is_download_enabled": true,
    "is_grayscale_enabled": false,
    "is_microphone_enabled": false,
    "is_print_enabled": true,
    "is_settings_dialog_enabled": true,
    "is_upload_enabled": true,
    "is_usb_redirection_enabled": false,
    "max_audio_bit_rate_kbps": 160,
    "max_bandwidth_kbps": 0,
    "max_frame_rate_fps": 20,
    "max_session_duration_minutes": 0,
    "max_video_bit_rate_mbps": 16.0,
    "max_video_quantization": 42,
    "qos_rate_change": 4,
    "reservation_timeout_seconds": 600,
    "scale_video": 1.0,
    "session_preparation_timeout_minutes": 15,
    "terminal_build": "latest",
    "user_inactivity_timeout_minutes": 10,
    "video_buffer_length_ms": 0,
    "yuv444": false
  }
}'
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "is_webrtc_enabled": false,
  "advanced_server_arguments": null,
  "advanced_terminal_arguments": null,
  "clipboard_integration": {
    "direction": "bidirectional",
    "is_enabled": true
  },
  "idle_timeout_minutes": 60,
  "is_app_switching_enabled": true,
  "is_camera_enabled": false,
  "is_cpu_display4k_enabled": true,
  "is_download_enabled": true,
  "is_grayscale_enabled": false,
  "is_microphone_enabled": false,
  "is_print_enabled": true,
  "is_settings_dialog_enabled": true,
  "is_upload_enabled": true,
  "is_usb_redirection_enabled": false,
  "max_audio_bit_rate_kbps": 160,
  "max_bandwidth_kbps": 0,
  "max_frame_rate_fps": 20,
  "max_session_duration_minutes": 0,
  "max_video_bit_rate_mbps": 16.0,
  "max_video_quantization": 42,
  "qos_rate_change": 4,
  "reservation_timeout_seconds": 600,
  "scale_video": 1.0,
  "session_preparation_timeout_minutes": 15,
  "terminal_build": "latest",
  "user_inactivity_timeout_minutes": 10,
  "video_buffer_length_ms": 0,
  "yuv444": false
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Publish a Sandbox

Starts the publish action for an account's Sandbox and returns the task ID.

<span class="badge badge-post">POST</span> <code>/accounts/:account_id/publish</code>

#### Request Parameters

| Name | Description      | Param Type | Data Type | Required |
| ---- | ---------------- | ---------- | --------- | -------- |
| id   | Frame Account ID | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/publish"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "account": {
    "active": true,
    "description": null,
    "id": "6b9a8c85-dd5b-4c1c-9bf2-ca1ba8e537b7",
    "inserted_at": "2021-08-24T19:59:29.077406Z",
    "kind": "frame",
    "last_publish": "2021-09-22T16:25:59Z",
    "name": "Example Account",
    "notes": null,
    "url_slug": "example-account",
    "website": null
  },
  "pending_request": {
    "account_id": "6b9a8c85-dd5b-4c1c-9bf2-ca1ba8e537b7",
    "customer_id": "XXXXXXXX-5ab2-47ef-9f9c-XXXXXXXXXXX",
    "display_name": "Publishing Sandbox to Production",
    "duration_sec": null,
    "external_resource_id": null,
    "finished_at": null,
    "id": "c454d6da-fa30-4dc4-a533-6af2286d1754",
    "inserted_at": "2021-09-29T19:30:57.708442Z",
    "kind": "publish_sandbox_to_production",
    "organization_id": "2fb210e0-e931-4c62-83fd-b31fe13468ca",
    "pool_id": null,
    "progress_info": null,
    "result_info": null,
    "stage": "not_started",
    "started_by": {
      "email": "976bcbc7-945a-4511-b1ca-2a3f60e3cade.img.frame.nutanix.com_third-party-api",
      "first_name": "X",
      "id": "a4da51c5-1c74-45e6-b1ca-2ec739d528d2",
      "identity_provider": "third-party-api",
      "last_name": "X"
    },
    "updated_at": "2021-09-29T19:30:57.708442Z"
  }
}
```

```bash
Status: 200 OK
```

</details>



---

### List Publish Tasks

Lists publishing tasks for the given account ID.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/publish/tasks</code>

#### Request Parameters

| Name | Description      | Param Type | Data Type | Required |
| ---- | ---------------- | ---------- | --------- | -------- |
| id   | Frame Account ID | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/publish/tasks"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "id": "gateway-prod.57186",
    "last_change": "2021-09-08T16:10:27.790959",
    "number_of_instances": 1,
    "request_id": 1853969,
    "status": "completed"
  },
  {
    "id": "gateway-prod.57640",
    "last_change": "2021-09-14T14:54:21.841399",
    "number_of_instances": 1,
    "request_id": 1882914,
    "status": "completed"
  },
  {
    "id": "gateway-prod.57651",
    "last_change": "2021-09-14T16:11:07.401356",
    "number_of_instances": 1,
    "request_id": 1883040,
    "status": "completed"
  },
  {
    "id": "gateway-prod.58427",
    "last_change": "2021-09-22T09:25:58.885327",
    "number_of_instances": 1,
    "request_id": 1922643,
    "status": "completed"
  }
]
```

```bash
Status: 200 OK
```

</details>



---

### Get Publish Status

Returns the publishing status for a given account ID and publish request ID.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/publish/:task_id</code>

#### Request Parameters

| Name    | Description          | Param Type | Data Type | Required |
| ------- | -------------------- | ---------- | --------- | -------- |
| id      | Frame Account ID     | URL        | String    | True     |
| task_id | Task id of a publish | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/publish/${request_id}"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "status": "in_progress",
  "id": "793db0f3-31f7-4cc1-8cd5-741c80407aba"
}
```

```bash
Status: 200 OK
```

</details>



---

### Cancel Publish

Returns details of an account.

<span class="badge badge-delete">DELETE</span> <code>/accounts/:account_id/publish/:task_id</code>

#### Request Parameters

| Name    | Description          | Param Type | Data Type | Required |
| ------- | -------------------- | ---------- | --------- | -------- |
| id      | Frame Account ID     | URL        | String    | True     |
| task_id | Task id of a publish | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X DELETE \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/publish/${task_id}"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```bash
Status: 200 "OK"
```

</details>



---

### List Instance Types

Returns a list of available instance types for the account specified.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/instance_types</code>

#### Request Parameters

| Name | Description      | Param Type | Data Type | Required |
| ---- | ---------------- | ---------- | --------- | -------- |
| id   | Frame Account ID | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/instance_types"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "display_name": "Air 4GB",
    "external_id": "gateway-prod.1",
    "fgw_compatible": null,
    "gpu": "None",
    "gpu_metadata": null,
    "id": "gateway-prod.1",
    "name": "t2.medium",
    "ram": 4,
    "vcpu": 2
  },
  {
    "display_name": "Pro 122GB",
    "external_id": "gateway-prod.3",
    "fgw_compatible": null,
    "gpu": "1 GPU",
    "gpu_metadata": null,
    "id": "gateway-prod.3",
    "name": "g3.4xlarge",
    "ram": 122,
    "vcpu": 16
  }

  // ... more instance types
]
```

```bash
Status: 200 OK
```

</details>



---

### Change Instance Type for a Persistent Desktop

Changes the instance type for a Persistent Desktop

<span class="badge badge-post">POST</span> <code>/accounts/:account_id/servers/:server_id/update_persistent_desktop_instance_type</code>

#### Request Parameters

| Name             | Description                                                                  | Param Type   | Data Type | Required |
| ---------------- | ---------------------------------------------------------------------------- | ------------ | --------- | -------- |
| account_id       | Frame Account ID                                                             | URL          | string    | True     |
| server_id        | Frame Server ID for the Persistent Desktop                                   | URL          | string    | True     |
| instance_type_id | Endpoint request body payload (`{"instance_type_id": "gateway-prod.61616"}`) | Search Query | string    | True     |

<div class="callout callout-info">
The instance type ID can be found by using the [List Instance Types](account#list-instance-types) endpoint and specifying the `id` for the instance type you want to use
</div>


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
--data-raw '{"instance_type_id" : "gateway-prod.61616" }'
"https://api.console.nutanix.com/v1/accounts/${account_id}/servers/reboot"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

The response after updating the instance type is simply the server object that was updated successfully.

```json
{
  "active": false,
  "cloud_instance_id": "i-0cc3ec91870672ab6",
  "creation_time": "2022-05-12 23:22:31.047114Z",
  "debug": false,
  "desired_status": "stopped",
  "domain_joined": false,
  "external_id": "gateway-prod.61616",
  "id": 61616,
  "in_use": false,
  "instance_type_name": "t3.xlarge",
  "last_change": "2022-06-08 20:35:10.633672Z",
  "launch_time": null,
  "machine_name": "IF-3B1F59DDA36E",
  "machine_status": null,
  "maintenance": false,
  "name": "Unassigned",
  "pool_external_id": "gateway-prod.588775",
  "pool_name": "persistent_desktop_production",
  "private_ip": "10.0.5.62",
  "problem": false,
  "public_hostname": null,
  "public_wsport": 443,
  "recovery": false,
  "reserved": -1,
  "server_ip": null,
  "server_version": "8.4.9.0",
  "status": "stopped",
  "upgrade_version": 0,
  "user_in_session": null,
  "zone": "us-east-2a"
}
```

```bash
Status: 200 "OK"
```

</details>



---

### List Applications

Returns a list of applications for the account specified.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/applications</code>

#### Request Parameters

| Name | Description      | Param Type | Data Type | Required |
| ---- | ---------------- | ---------- | --------- | -------- |
| id   | Frame Account ID | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/applications"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "working_directory": null,
    "path": "C:\\Program Files\\Frame\\FrameExplorer\\FrameExplorer.exe",
    "name": "Frame Explorer",
    "is_updated": false,
    "is_published": true,
    "is_deleted": false,
    "id": "909b74cc-d207-47ed-bd25-2b8088c36912",
    "icon_url": "https://next-cpanel-dev.s3.amazonaws.com/images/apps/frame_explorer.png",
    "arguments": null
  },
  {
    "working_directory": null,
    "path": "C:\\Program Files(x86)\\Google\\Chrome\\Application\\chrome.exe",
    "name": "Google Chrome",
    "is_updated": false,
    "is_published": true,
    "is_deleted": false,
    "id": "e288cac6-87c6-4dcf-bd19-5287f571e774",
    "icon_url": "https://next-cpanel-dev.s3.amazonaws.com/images/apps/google_chrome.png",
    "arguments": null
  },
  {
    "working_directory": null,
    "path": "C:\\Windows\\system32\\notepad.exe",
    "name": "Notepad",
    "is_updated": false,
    "is_published": true,
    "is_deleted": false,
    "id": "547e2eeb-7d6c-4ec8-976e-d0677f23322b",
    "icon_url": "https://next-cpanel-dev.s3.amazonaws.com/images/apps/notepad.png",
    "arguments": null
  }
  // ... more onboarded applications
]
```

```bash
Status: 200 OK
```

</details>



---

### List Session Reports

Returns a list of generated session reports.

<div class="callout callout-info">
You must "Enable Session Reports" in the General tab of the Account Settings for this endpoint to work. If you do not enable this feature, you will get an empty array and HTTP 200 response from your request.
</div>

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/session_reports</code>

#### Request Parameters

| Parameter | Description      | Param Type | Data Type | Required |
| --------- | ---------------- | ---------- | --------- | -------- |
| id        | Frame Account ID | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/session_reports"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "year": 2018,
    "url": "https://s3-datest.dev.fra.me/datest-session-reports/datest/9rnKxGPdbozby6YA.2018.7.4311c.31.csv.zip?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900&X-Amz-Credential=QazWsxEdc777%2F20180724%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Date=20180724T101921Z&X-Amz-Signature=b77249805c20ddd45d2c38ffed5af6284ee34c57defb33f46911c10ace82dccf",
    "month": 7
  }
]
```

```bash
Status: 200 OK
```

</details>



---

### List Active Sessions

Returns a list of active sessions for all pools on a specified account.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/active_sessions</code>

#### Request Parameters

| Parameter | Description      | Param Type | Data Type | Required |
| --------- | ---------------- | ---------- | --------- | -------- |
| id        | Frame Account ID | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/active_sessions"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "fail_description": null,
    "id": "gateway-prod.oRXVPyy0rklPJrwG",
    "is_https_connection": true,
    "location_city": "Morgan Hill",
    "location_country": "US",
    "location_distance": 288.4650445335911,
    "pool_id": "gateway-prod.535675",
    "server_address": "prod-34-94-1-114.nutanixframe.com",
    "server_ws_port": "443",
    "start_time": 1632949455,
    "state": "open",
    "storages": [],
    "user": {
      "email": "jason.thompson@nutanix.com",
      "first_name": "Jason",
      "identity_provider": "example-idp-name",
      "last_name": "Thompson"
    },
    "user_uuid": "52b19f2e-c8ae-4f12-beab-f2838ce8dce9"
  }
]
```

```bash
Status: 200 OK
```

</details>



---

### List Recent Sessions

Returns a list of sessions for a given period of time.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/recent_sessions</code>

#### Request Parameters

| Parameter Name | Description                                                                                                                                         | Param Type   | Data Type           | Required |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------- | -------- |
| id             | Frame Account ID                                                                                                                                    | URL          | string              | True     |
| from_date      | The beginning date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”. | Search Query | ISO 8601 UTC String | True     |
| to_date        | The ending date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”.    | Search Query | ISO 8601 UTC String | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/recent_sessions?from_date=2021-12-01T23:20:58.128Z&to_date=2021-12-25T23:20:58.128Z"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "end_time": "2021-09-14T16:51:14.858774Z",
    "fail_description": null,
    "hash_id": "LjpnejZqv1Ve7ak5",
    "id": "gateway-prod.LjpnejZqv1Ve7ak5",
    "location": {
      "city": "Morgan Hill",
      "client_ip": "123.32.145.255",
      "county": null,
      "distance": 288.4650445335911
    },
    "pool_id": "gateway-prod.535675",
    "server": {
      "address": null,
      "https": true,
      "id": "gateway-prod.5909980",
      "instance_type": "e2-standard-2-Windows",
      "pool_group_type": "production",
      "wsport": "443"
    },
    "session_duration": 467,
    "start_time": "2021-09-14T16:43:27.322017Z",
    "state": "closed",
    "timeouts": {
      "connection": 120,
      "idle": 600,
      "max_duration": 3600
    },
    "user_uuid": "52b19f2e-c8ae-4f12-beab-f2838ce8dce9"
  },
  {
    "end_time": "2021-09-14T18:01:43.079788Z",
    "fail_description": null,
    "hash_id": "kvg0PbwL1ggDw1Er",
    "id": "gateway-prod.kvg0PbwL1ggDw1Er",
    "location": {
      "city": "Morgan Hill",
      "client_ip": "123.32.145.255",
      "county": null,
      "distance": 288.4650445335911
    },
    "pool_id": "gateway-prod.535674",
    "server": {
      "address": "prod-34-94-251-72.nutanixframe.com",
      "https": true,
      "id": "gateway-prod.5847490",
      "instance_type": "e2-standard-2-Windows",
      "pool_group_type": "sandbox",
      "wsport": "443"
    },
    "session_duration": 521,
    "start_time": "2021-09-14T17:53:01.232834Z",
    "state": "closed",
    "timeouts": {
      "connection": 120,
      "idle": 600,
      "max_duration": 3600
    },
    "user_uuid": "52b19f2e-c8ae-4f12-beab-f2838ce8dce9"
  }
]
```

```bash
Status: 200 OK
```

</details>



---

### List Session Details

Returns information regarding a specific session.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/sessions/:session_id/</code>

#### Request Parameters

| Parameter  | Description      | Param Type | Data Type | Required |
| ---------- | ---------------- | ---------- | --------- | -------- |
| account_id | Frame Account ID | URL        | String    | True     |
| session_id | ID of a session  | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${account_id}/sessions/${session_id}"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  [
    {
      "fail_description": null,
      "id": "gateway-prod.oRXVPyy0rklPJrwG",
      "is_https_connection": true,
      "location_city": "Morgan Hill",
      "location_country": "US",
      "location_distance": 288.4650445335911,
      "pool_id": "gateway-prod.535675",
      "server_address": "prod-34-94-1-114.nutanixframe.com",
      "server_ws_port": "443",
      "start_time": 1632949455,
      "state": "open",
      "storages": [],
      "user_uuid": "52b19f2e-c8ae-4f12-beab-f2838ce8dce9"
    }
  ]
]
```

```bash
Status: 200 OK
```

</details>



---

### List Session Trails

Returns Session Trails for the Frame Account specified.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/session-trails</code>

#### Request Parameters

| Name            | Description                                                                                                                                         | Param Type   | Data Type           | Required |
| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------- | -------- |
| account_id      | Frame Account ID                                                                                                                                    | URL          | String              | True     |
| search          | Filters results if the provided string matches against Server ID, Session ID, email address, and a user's full name.                                | Search Query | String              | False    |
| session_start   | The beginning date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”. | Search Query | ISO 8601 UTC String | False    |
| session_end     | The ending date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”.    | Search Query | ISO 8601 UTC String | False    |
| instance_type   | Filters Session Trails based on a specific instance type ID.                                                                                        | Search Query | String              | False    |
| pool_group_type | Filters Session Trails based on the pool group type (e.g. "sandbox", "test", "production").                                                         | Search Query | String              | False    |
| pool_id         | Filters Session Trails based on provided instance type's pool ID.                                                                                   | Search Query | String              | False    |
| offset          | Used to specify where to start the query. Must be used in conjunction with the limit parameter.                                                     | Search Query | Integer (String)    | False    |
| limit           | Used to specify the “page size” of the query. Must be used in conjunction with the offset parameter.                                                | Search Query | Integer (String)    | False    |
| order           | Specifies the order of the results. Use “asc” for ascending order, and “desc” for descending order.                                                 | Search Query | String              | False    |
| order_by        | Specifies the field of which the ordering should occur. For example, “session_start”, “session_duration”, etc.                                      | Search Query | String              | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${account_id}/session-trails?limit=50&offset=0&order=desc&order_by=session_start"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "account_id": "084ab7d0-e4ca-4dea-932a-45bf33f02088",
    "bandwidth_kbps_avg": 15921.05,
    "bandwidth_kbps_max": 16128,
    "bandwidth_kbps_min": 14024,
    "city": "Tehama",
    "client_ip": "123.32.145.255",
    "customer_id": "XXXXXXXX-5ab2-47ef-9f9c-XXXXXXXXXXX",
    "distance": 2369.002238311968,
    "fail_description": null,
    "framerate_ps_avg": 19.74,
    "framerate_ps_max": 20,
    "framerate_ps_min": 10,
    "id": "b970ec31-ca07-48c9-8b56-4547a7b1a9f8",
    "instance_type": "t2.large",
    "latency_ms_avg": 110.36,
    "latency_ms_max": 132,
    "latency_ms_min": 106,
    "launchpad_id": "19ca2393-ac2e-4497-939e-757f02c18654",
    "organization_id": "2fb210e0-e931-4c62-83fd-b31fe13468ca",
    "pool_group_type": "sandbox",
    "pool_id": "d54b760c-956a-487b-a675-e113677fe871",
    "pool_instance_type": {
      "bare_metal": null,
      "cpu": null,
      "display_name": "Air 8GB",
      "fgw_compatible": null,
      "gpu": "None",
      "id": "gateway-prod.5",
      "name": "t2.large",
      "ram": 8,
      "vcpu": 2
    },
    "server_id": "gateway-prod.5232637",
    "session_duration": 2391,
    "session_end": "2021-02-25T23:17:27.000000Z",
    "session_id": "gateway-prod.nMOARz25k9LDmGN0",
    "session_start": "2021-02-25T23:15:56.000000Z",
    "time_to_start": 7,
    "user_email": "example.user@company.com",
    "user_first_name": "Example",
    "user_id": "52b19f2e-c8ae-4f12-beab-f2838ce8dce9",
    "user_idp": "example-idp",
    "user_last_name": "User"
  }
  // ... more sessions
]
```

```bash
Status: 200 OK
```

</details>



---

### List Audit Trails

Returns Audit Trails for an account, constrained by a date range and a number of ways to filter & search for granular queries.

<span class="badge badge-get">GET</span> <code>accounts/:account_id/audit-trails</code>

#### Request Parameters

| Name       | Description                                                                                                                                                                              | Param Type   | Data Type           | Required |
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------- | -------- |
| account_id | Frame Account ID                                                                                                                                                                         | URL          | String              | True     |
| search     | Filters results if the provided string matches against a user's full name, email, idp, or the Audit Trail kind.                                                                          | Search Query | String              | False    |
| kind       | Filters Audit Trails by wildcard matching against the supplied string. For example, a kind of “launchpad” will return Audit Trails for both createLaunchpad and updateLaunchpad actions. | Search Query | String              | False    |
| from_date  | The beginning date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”.                                      | Search Query | ISO 8601 UTC String | False    |
| to_date    | The ending date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”.                                         | Search Query | ISO 8601 UTC String | False    |
| offset     | Used to specify where to start a Audit Trails query. Must be used in conjunction with the limit parameter.                                                                               | Search Query | Integer (String)    | False    |
| limit      | Used to specify the “page size” of the Audit Trails query. Must be used in conjunction with the offset parameter.                                                                        | Search Query | Integer (String)    | False    |
| order      | Specifies the order of the results. Use “asc” for ascending order, and “desc” for descending order.                                                                                      | Search Query | String              | False    |
| order_by   | Specifies the field of which the ordering should occur. For example, “session_start”, “session_duration”, etc.                                                                           | Search Query | String              | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${account_id}/audit-trails?search=jason.thompson@nutanix.com&kind=launchpad"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "id": "7c3dee57-5a7b-4232-a55d-7d5b8e5f595b",
    "user_first_name": "Jason",
    "user_last_name": "Thompson",
    "user_idp": "example-idp-name",
    "user_email": "jason.thompson@nutanix.com",
    "kind": "updateLaunchpad",
    "account_id": "b00636bf-4f08-404e-a7ba-3c2aaa173335",
    "organization_id": "86bcea89-389f-496a-3c75-1df0ce8d96ca",
    "customer_id": "XXXXXXXX-5ab2-47ef-9f9c-XXXXXXXXXXX",
    "inserted_at": "2021-10-15T20:49:13.377350Z"
  },
  {
    "id": "4f62a8e4-1ac7-430b-9f4f-96fa77ff24f5",
    "user_first_name": "Jason",
    "user_last_name": "Thompson",
    "user_idp": "example-idp-name",
    "user_email": "jason.thompson@nutanix.com",
    "kind": "createLaunchpad",
    "account_id": "b00636bf-4f08-404e-a7ba-3c2aaa173335",
    "organization_id": "86bcea89-389f-496a-3c75-1df0ce8d96ca",
    "customer_id": "XXXXXXXX-5ab2-47ef-9f9c-XXXXXXXXXXX",
    "inserted_at": "2021-10-15T20:49:09.833114Z"
  }
  // ... more Audit Trails
]
```

```bash
Status: 200 OK
```

</details>



---

### Start a Session

Starts a headless/clientless session. Use this endpoint to start a session without a browser or FrameApp.
This is typically used for automation and custom workflows (Sandbox installers, CI/CD automations, etc).

Please note that you can use either a token or signed HTTP headers for authentication with this endpoint.

If you use a token for authentication, you will be able to modify metadata for the session (email, first name, last name, etc).

If you use a token, use the header "Authorization: Bearer _token_" instead of the signed headers.

Also note, if you use the signed HTTP headers (Instead of the token), the first and last name will show up as "X" in the audit logs respectively.
Additionaly, your email address will reflect the API provider with a very cryptic looking address.

<span class="badge badge-post">POST</span> <code>/sessions/start</code>

#### Request Parameters

| Parameter                 | Description                                                                                                                                                                                                                                                                                                | Param Type   | Data Type | Required |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | --------- | -------- |
| terminal_configuration_id | The desired Launchpad Terminal Configuration ID                                                                                                                                                                                                                                                            | Search Query | String    | True     |
| options                   | JSON object with multiple options to choose from (All optional) <br />`{ "user_data": "string", "touch": true }`<br/><br />`user_data` passes a string into the remote Windows environment variable `FRAME_USER_DATA`<br /><br />`touch`: if `true` enables touch controls to the session (Touch displays) | Search Query | String    | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "Authorization: Bearer ${token}" \
"https://api.console.nutanix.com/v1/sessions/start" \
--data-raw '{
  "options": {
    "user_data" : "Any string",
    "touch" : "false"
  }
}'
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "account_id": "57fa46fc-eda7-484e-b2ec-cc7032c1811a",
  "close_reason_code": "",
  "fail_description": "",
  "id": "gateway-prod.LjpnejWlw0yP7ak5",
  "is_https_connection": "true",
  "location_city": "Oxon Hill",
  "location_country": "US",
  "location_distance": "331.3852962263057",
  "protocol": "webrtc",
  "server_address": "",
  "server_ws_port": "",
  "signaling_server_url": "wss://messaging.console.nutanix.com/socket/websocket",
  "sso_passthrough_public_key": "",
  "start_time_utc_date_time": "2023-03-28T19:15:30.598820Z",
  "state": "init",
  "stun_server_url": "stun:stun.console.nutanix.com",
  "turn_server_url": ""
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Stop a Session

Stops the specified session.

<span class="badge badge-delete">DELETE</span> <code>/accounts/:account_id/sessions/:session_id</code>

#### Request Parameters

| Parameter  | Description      | Param Type | Data Type | Required |
| ---------- | ---------------- | ---------- | --------- | -------- |
| account_id | Frame Account ID | URL        | String    | True     |
| session_id | ID of a session  | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X DELETE \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${account_id}/sessions/${session_id}"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "fail_description": null,
  "id": "gateway-prod.GykYPnBAvMxPldOW",
  "is_https_connection": true,
  "location_city": "Redding",
  "location_country": "US",
  "location_distance": 127.65657296078405,
  "pool_id": "gateway-prod.557068",
  "server_address": "prod-13-xx-xxx-97.nutanixframe.com",
  "server_ws_port": "443",
  "session_token": null,
  "start_time": 1634330027,
  "state": "closing",
  "storages": [],
  "user_uuid": "84c661ab-60ba-43e0-b7bd-3fa33d49ce05"
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Get Sandbox Status

Returns the status of a Sandbox pool on a specified account.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/sandbox/status</code>

#### Request Parameters

| Parameter | Description      | Param Type | Data Type | Required |
| --------- | ---------------- | ---------- | --------- | -------- |
| id        | Frame Account ID | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/sandbox/status"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "active_servers": 1,
  "active_sessions": 0,
  "available_servers": 1,
  "buffer_servers": 0,
  "max_servers": 1,
  "max_users": 0,
  "min_servers": 0,
  "pool_id": "2d176f51-175d-4b70-8be3-57e67ad84909",
  "running_servers": 1,
  "status": "running_server_available",
  "total_running_servers": 1,
  "total_servers": 1
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Start a Sandbox

Starts the Sandbox server on a specified account.

| Parameter | Description      | Param Type | Data Type | Required |
| --------- | ---------------- | ---------- | --------- | -------- |
| id        | Frame Account ID | URL        | String    | True     |

<span class="badge badge-post">POST</span> <code>/accounts/:account_id/sandbox/start</code>


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/sandbox/start"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "account_id": "6b9a8c85-dd5b-4c1c-9bf2-ca1ba8e537b7",
  "customer_id": "XXXXXXXX-5ab2-47ef-9f9c-XXXXXXXXXXX",
  "display_name": "Powering on",
  "duration_sec": null,
  "external_resource_id": null,
  "finished_at": null,
  "id": "291f6621-431d-425b-9edc-15a9b7aa335b",
  "inserted_at": "2021-09-30T17:10:49.867508Z",
  "kind": "power_on",
  "organization_id": "2fb210e0-e931-4c62-83fd-b31fe13468ca",
  "pool_id": "2d176f51-175d-4b70-8be3-57e67ad84909",
  "progress_info": null,
  "result_info": null,
  "stage": "not_started",
  "started_by": {
    "email": "976bcbc7-945a-4511-b1ca-2a3f60e3cade.img.frame.nutanix.com_third-party-api",
    "first_name": "X",
    "id": "a4da51c5-1c74-45e6-b1ca-2ec739d528d2",
    "identity_provider": "third-party-api",
    "last_name": "X"
  },
  "updated_at": "2021-09-30T17:10:49.867508Z"
}
```

```bash
Status: 200 OK
```

</details>



---

### Reboot a Sandbox

Reboots a Sandbox server on a specified account.

| Parameter | Description      | Param Type | Data Type | Required |
| --------- | ---------------- | ---------- | --------- | -------- |
| id        | Frame Account ID | URL        | String    | True     |

<span class="badge badge-post">POST</span> <code>/accounts/:account_id/sandbox/reboot</code>


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/sandbox/reboot"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "account_id": "6b9a8c85-dd5b-4c1c-9bf2-ca1ba8e537b7",
  "customer_id": "XXXXXXXX-5ab2-47ef-9f9c-XXXXXXXXXXX",
  "display_name": "Rebooting",
  "duration_sec": null,
  "external_resource_id": null,
  "finished_at": null,
  "id": "291f6621-431d-425b-9edc-15a9b7aa335b",
  "inserted_at": "2021-09-30T17:10:49.867508Z",
  "kind": "power_on",
  "organization_id": "2fb210e0-e931-4c62-83fd-b31fe13468ca",
  "pool_id": "2d176f51-175d-4b70-8be3-57e67ad84909",
  "progress_info": null,
  "result_info": null,
  "stage": "not_started",
  "started_by": {
    "email": "976bcbc7-945a-4511-b1ca-2a3f60e3cade.img.frame.nutanix.com_third-party-api",
    "first_name": "X",
    "id": "a4da51c5-1c74-45e6-b1ca-2ec739d528d2",
    "identity_provider": "third-party-api",
    "last_name": "X"
  },
  "updated_at": "2021-09-30T17:10:49.867508Z"
}
```

```bash
Status: 200 OK
```

</details>



---

### Stop a Sandbox

Stops the Sandbox server on specified account.

<span class="badge badge-post">POST</span> <code>/accounts/:account_id/sandbox/stop</code>

#### Request Parameters

| Parameter | Description      | Param Type | Data Type | Required |
| --------- | ---------------- | ---------- | --------- | -------- |
| id        | Frame Account ID | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/sandbox/stop"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{}
```

```bash
Status: 202 "Accepted"
```

</details>



---

### List Pools for an Account{#list-pools}

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/pools</code>

#### Request Parameters

| Name | Description       | Param Type | Data Type | Required |
| ---- | ----------------- | ---------- | --------- | -------- |
| id   | Frame Account ID. | URL        | string    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${account_id}/pools"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "disk_size": 50,
    "external_id": "gateway-prod.535675",
    "id": "4256364f-80af-4abd-9292-741211acf27d",
    "image_family": "GoogleWindows2016",
    "instance_type": "e2-standard-2-Windows",
    "kind": "production",
    "name": "Air 8GB (E2)"
  },
  {
    "disk_size": 50,
    "external_id": "gateway-prod.551557",
    "id": "fc0cc851-0d33-4517-9e67-f6205c762261",
    "image_family": "GoogleWindows2016",
    "instance_type": "custom-2-4096-Windows",
    "kind": "production",
    "name": "Air 4GB"
  }
]
```

```bash
Status: 200 "OK"
```

</details>



---

### List Account's Overall Capacity Settings

Returns the current min, buffer, and max values configured for all pools/instance types in an account.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/elasticity</code>

#### Request Parameters

| Parameter | Description      | Param Type | Data Type | Required |
| --------- | ---------------- | ---------- | --------- | -------- |
| id        | Frame Account ID | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${account_id}/elasticity"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "min_servers": 75,
  "buffer_servers": 20,
  "max_servers": 475
}
```

```bash
Status: 200 "OK"
```

</details>



---

### List Persistent Desktop Capacity Settings

Returns the current Persistent Desktop capacity settings for an account.
This includes values for `number_of_backups_to_save`, `max_users`, and
`keep_instances_running_for_new_users`.

<span class="badge badge-get">GET</span> <code>/accounts/:persistent_account_id/persistent_desktop_elasticity_settings</code>

#### Request Parameters

| Name                  | Description                              | Param Type | Data Type | Required |
| --------------------- | ---------------------------------------- | ---------- | --------- | -------- |
| persistent_account_id | Frame Account ID (must be a persistent). | URL        | string    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${persistent_account_id}/persistent_desktop_elasticity_settings"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "keep_instances_running_for_new_users": false,
  "max_users": 10,
  "number_of_backups_to_save": 1
}
```

```bash
Status: 200 "OK"
```

</details>



---

### List Persistent Desktop Backups for an Account

Returns a list of the Backups for Persistent Desktops in an account.

<span class="badge badge-get">GET</span> <code>/accounts/:persistent_account_id/persistent_desktop_backups</code>

#### Request Parameters

| Name                  | Description                                                                                                                       | Param Type   | Data Type        | Required |
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------ | ---------------- | -------- |
| persistent_account_id | Frame Account ID (must be a persistent).                                                                                          | URL          | string           | True     |
| offset                | Used to specify where to start the query from the results (Used for pagination). Must be in conjunction with the limit parameter. | Search Query | Integer (String) | False    |
| limit                 | Used to specify the "page size" of the query. Must be used in conjunction with the offset parameter                               | Search Query | Integer (String) | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${persistent_account_id}/persistent_desktop_backups"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "current_disk_size": 60.0,
  "free_disk_space": 37.198338,
  "id": "gateway-prod.7705597",
  "last_used_time": "2023-04-06T16:15:02.055502",
  "name": "Persistent desktop - David Example - david.example@nutanix.com",
  "pool_id": "091c6494-b7ef-4c7c-9c5f-bdc611b0d66e",
  "session_id": null,
  "status": "available",
  "user_uuid": "b87c7870-efb7-4539-a7d3-91725ba84fea"
}
```

```bash
Status: 200 "OK"
```

</details>



---

### List Persistent Desktops in an Account

Returns a list of the Persistent Desktops in an account.

<span class="badge badge-get">GET</span> <code>/accounts/:persistent_account_id/persistent_desktop_servers</code>

#### Request Parameters

| Name                  | Description                                                                                                                       | Param Type   | Data Type        | Required |
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------ | ---------------- | -------- |
| persistent_account_id | Frame Account ID (must be a persistent).                                                                                          | URL          | string           | True     |
| offset                | Used to specify where to start the query from the results (Used for pagination). Must be in conjunction with the limit parameter. | Search Query | Integer (String) | False    |
| limit                 | Used to specify the "page size" of the query. Must be used in conjunction with the offset parameter                               | Search Query | Integer (String) | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${persistent_account_id}/persistent_desktop_servers"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "current_disk_size": 60.0,
  "free_disk_space": 37.198338,
  "id": "gateway-prod.7705597",
  "last_used_time": "2023-04-06T16:15:02.055502",
  "name": "Persistent desktop - David Example - david.example@nutanix.com",
  "pool_id": "091c6494-b7ef-4c7c-9c5f-bdc611b0d66e",
  "session_id": null,
  "status": "available",
  "user_uuid": "b87c7870-efb7-4539-a7d3-91725ba84fea"
}
```

```bash
Status: 200 "OK"
```

</details>



---

### List Logged In Users

Lists all previously logged in users for an account (And the associated IDP).
<div class="callout callout-info">
This endpoint is required to [reassign persistent desktops](#reassign-persistent-desktop) for persistent Frame Accounts. However, this endpoint can be used with any other account type.
</div>

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/logged_in_users</code>

#### Request Parameters

| Name       | Description                                                                                                                       | Param Type   | Data Type        | Required |
| ---------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------ | ---------------- | -------- |
| account_id | Frame Account ID                                                                                                                  | URL          | string           | True     |
| offset     | Used to specify where to start the query from the results (Used for pagination). Must be in conjunction with the limit parameter. | Search Query | Integer (String) | False    |
| limit      | Used to specify the "page size" of the query. Must be used in conjunction with the offset parameter                               | Search Query | Integer (String) | False    |
| search     | Used to search/filter for specific results from the returned list of logged in users                                              | Search Query | String           | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${account_id}/logged_in_users"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "idp": "frame-password",
    "id": "e69e7f7c-83fd-461f-8387-13dbcef87a53",
    "email": "john.doe@example.net"
  }
]
```

```bash
Status: 200 "OK"
```

</details>



---

### Unassign Persistent Desktop

Unassigns the user from their assigned Persistent Desktop server. This allows the administrator to assign that Persistent Desktop server to another user (or terminate the server).

<span class="badge badge-post">POST</span> <code>/accounts/:persistent_account_id/servers/:server_external_id/unassign</code>

#### Request Parameters

| Name                  | Description                                                                      | Param Type | Data Type | Required |
| --------------------- | -------------------------------------------------------------------------------- | ---------- | --------- | -------- |
| persistent_account_id | Frame Account ID (must be a persistent).                                         | URL        | string    | True     |
| server_external_id    | Frame "external" server ID (found by querying [account servers](#list-servers)). | URL        | string    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${persistent_account_id}/servers/${persistent_server_id}/unassign"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "active": false,
  "cloud_instance_id": "i-0cc3ec91870672ab6",
  "creation_time": "2022-05-12 23:22:31.047114Z",
  "debug": false,
  "desired_status": "stopped",
  "domain_joined": false,
  "external_id": "gateway-prod.6810382",
  "id": 6810382,
  "in_use": false,
  "instance_type_name": "t3.xlarge",
  "last_change": "2022-06-08 20:35:10.633672Z",
  "launch_time": null,
  "machine_name": "IF-3B1F59DDA36E",
  "machine_status": null,
  "maintenance": false,
  "name": "Unassigned",
  "pool_external_id": "gateway-prod.588775",
  "pool_name": "persistent_desktop_production",
  "private_ip": "10.0.5.62",
  "problem": false,
  "public_hostname": null,
  "public_wsport": 443,
  "recovery": false,
  "reserved": -1,
  "server_ip": null,
  "server_version": "8.4.9.0",
  "status": "stopped",
  "upgrade_version": 0,
  "user_in_session": null,
  "zone": "us-east-2a"
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Reassign Persistent Desktop

Reassigns a user to a particular Persistent Desktop server. Please note that the Persistent Desktop server should already be unassigned.

<span class="badge badge-post">POST</span> <code>/accounts/:persistent_account_id/servers/:server_external_id/reassign</code>

#### Request Parameters

| Name                  | Description                                                                                | Param Type | Data Type | Required |
| --------------------- | ------------------------------------------------------------------------------------------ | ---------- | --------- | -------- |
| persistent_account_id | Frame Account ID (must be a persistent).                                                   | URL        | string    | True     |
| server_external_id    | Frame "external" server ID (found by querying [account servers](#list-servers)).           | URL        | string    | True     |
| user_uuid             | Frame User's UUID (found by querying [logged_in_users](#list-logged-in-users-for-account)) | URL        | string    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${persistent_account_id}/servers/${persistent_server_id}/reassign"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "zone": "us-east-2a",
  "user_in_session": {
    "last_name": "Doe",
    "identity_provider": "string",
    "first_name": "John",
    "email": "john.doe@example.net"
  },
  "upgrade_version": 0,
  "status": "stopped",
  "server_version": "8.4.9.0",
  "server_ip": null,
  "reserved": 0,
  "recovery": true,
  "public_wsport": 0,
  "public_hostname": null,
  "problem": true,
  "private_ip": "10.0.5.62",
  "pool_name": "persistent_desktop_production",
  "pool_external_id": "gateway-prod.588775",
  "name": "Unassigned",
  "maintenance": true,
  "machine_status": null,
  "machine_name": "IF-3B1F59DDA36E",
  "launch_time": null,
  "last_change": "2022-05-12 23:22:31.047114Z",
  "instance_type_name": "t3.xlarge",
  "in_use": true,
  "id": 6810382,
  "external_id": "gateway-prod.6810382",
  "domain_joined": true,
  "desired_status": "stopped",
  "debug": true,
  "creation_time": "2022-05-12 23:22:31.047114Z""string",
  "cloud_instance_id": "i-0cc3ec91870672ab6",
  "active": true
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Reboot a Server

Reboots the specified server.

<span class="badge badge-post">POST</span> <code>/accounts/:account_id/servers/reboot</code>

#### Request Parameters

| Name                  | Description                                | Param Type   | Data Type | Required |
| --------------------- | ------------------------------------------ | ------------ | --------- | -------- |
| server_id             | Frame Server ID.                           | URL          | string    | True     |
| account_server_reboot | Server reboot payload (`{"force": false}`) | Search Query | string    | True     |

<div class="callout callout-info">
** If `force` is set to true, the server will be rebooted immediately **
</div>


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
--data-raw '{
  "id" : "server_id",
  "account_server_reboot": {
    "force" : "false"
  }
}'
"https://api.console.nutanix.com/v1/accounts/${account_id}/servers/reboot"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

The response after rebooting a server is simply the server object that was rebooted successfully.

```json
{
  "active": false,
  "cloud_instance_id": "i-0cc3ec91870672ab6",
  "creation_time": "2022-05-12 23:22:31.047114Z",
  "debug": false,
  "desired_status": "stopped",
  "domain_joined": false,
  "external_id": "gateway-prod.6810382",
  "id": 6810382,
  "in_use": false,
  "instance_type_name": "t3.xlarge",
  "last_change": "2022-06-08 20:35:10.633672Z",
  "launch_time": null,
  "machine_name": "IF-3B1F59DDA36E",
  "machine_status": null,
  "maintenance": false,
  "name": "Unassigned",
  "pool_external_id": "gateway-prod.588775",
  "pool_name": "persistent_desktop_production",
  "private_ip": "10.0.5.62",
  "problem": false,
  "public_hostname": null,
  "public_wsport": 443,
  "recovery": false,
  "reserved": -1,
  "server_ip": null,
  "server_version": "8.4.9.0",
  "status": "stopped",
  "upgrade_version": 0,
  "user_in_session": null,
  "zone": "us-east-2a"
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Start a Server

Starts the specified server.

<span class="badge badge-post">POST</span> <code>/accounts/:account_id/servers/:server_id/start</code>

#### Request Parameters

| Name               | Description         | Param Type | Data Type | Required |
| ------------------ | ------------------- | ---------- | --------- | -------- |
| account_id         | Frame Account ID.   | URL        | string    | True     |
| server_external_id | Server External ID. | URL        | string    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
--data-raw '{
  "account_server_stop": {
    "force" : "false"
  }
}'
"https://api.console.nutanix.com/v1/accounts/${account_id}/servers/${server_id}/start"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

The response after starting a server is simply the server object that was started successfully.

```json
{
  "active": false,
  "cloud_instance_id": "i-0cc3ec91870672ab6",
  "creation_time": "2022-05-12 23:22:31.047114Z",
  "debug": false,
  "desired_status": "stopped",
  "domain_joined": false,
  "external_id": "gateway-prod.6810382",
  "id": 6810382,
  "in_use": false,
  "instance_type_name": "t3.xlarge",
  "last_change": "2022-06-08 20:35:10.633672Z",
  "launch_time": null,
  "machine_name": "IF-3B1F59DDA36E",
  "machine_status": null,
  "maintenance": false,
  "name": "Unassigned",
  "pool_external_id": "gateway-prod.588775",
  "pool_name": "persistent_desktop_production",
  "private_ip": "10.0.5.62",
  "problem": false,
  "public_hostname": null,
  "public_wsport": 443,
  "recovery": false,
  "reserved": -1,
  "server_ip": null,
  "server_version": "8.4.9.0",
  "status": "stopped",
  "upgrade_version": 0,
  "user_in_session": null,
  "zone": "us-east-2a"
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Stop a Server

Shuts down the specified server.

<span class="badge badge-post">POST</span> <code>/accounts/:account_id/servers/:server_id/stop</code>

#### Request Parameters

| Name                | Description                               | Param Type   | Data Type | Required |
| ------------------- | ----------------------------------------- | ------------ | --------- | -------- |
| account_id          | Frame Account ID.                         | URL          | string    | True     |
| server_external_id  | Server External ID.                       | URL          | string    | True     |
| account_server_stop | Server stop payload (`{ "force": false}`) | Search Query | string    | True     |

<div class="callout callout-info">
** If `force` is set to true, the server will be stopped immediately. This will not be considered a clean shutdown by the VM **
</div>


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
--data-raw '{
  "account_server_stop": {
    "force" : "false"
  }
}'
"https://api.console.nutanix.com/v1/accounts/${account_id}/servers/${server_id}/stop"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

The response after stopping a server is simply the server object that was stopped successfully.

```json
{
  "active": false,
  "cloud_instance_id": "i-0cc3ec91870672ab6",
  "creation_time": "2022-05-12 23:22:31.047114Z",
  "debug": false,
  "desired_status": "stopped",
  "domain_joined": false,
  "external_id": "gateway-prod.6810382",
  "id": 6810382,
  "in_use": false,
  "instance_type_name": "t3.xlarge",
  "last_change": "2022-06-08 20:35:10.633672Z",
  "launch_time": null,
  "machine_name": "IF-3B1F59DDA36E",
  "machine_status": null,
  "maintenance": false,
  "name": "Unassigned",
  "pool_external_id": "gateway-prod.588775",
  "pool_name": "persistent_desktop_production",
  "private_ip": "10.0.5.62",
  "problem": false,
  "public_hostname": null,
  "public_wsport": 443,
  "recovery": false,
  "reserved": -1,
  "server_ip": null,
  "server_version": "8.4.9.0",
  "status": "stopped",
  "upgrade_version": 0,
  "user_in_session": null,
  "zone": "us-east-2a"
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Terminate Server

Terminates the specified server.

<span class="badge badge-post">POST</span> <code>/accounts/:persistent_account_id/servers/:server_external_id/terminate</code>

#### Request Parameters

| Name               | Description                                                                                                              | Param Type   | Data Type | Required |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------ | --------- | -------- |
| account_id         | Frame Account ID.                                                                                                        | URL          | string    | True     |
| server_external_id | Frame "external" server ID (found by querying [account servers](#list-servers)).                                         | URL          | string    | True     |
| force              | If set to true, the server will be terminated immediately. If set to false, it will terminate as soon as it's available. | Search Query | boolean   | True     |

<div class="callout callout-danger">
**This is an irreversable action, use with caution!**
</div>


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${persistent_account_id}/servers/${server_id}/terminate?force=false"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

The response after terminating a server is simply the server object that was terminated successfully.

```json
{
  "active": false,
  "cloud_instance_id": "i-0cc3ec91870672ab6",
  "creation_time": "2022-05-12 23:22:31.047114Z",
  "debug": false,
  "desired_status": "stopped",
  "domain_joined": false,
  "external_id": "gateway-prod.6810382",
  "id": 6810382,
  "in_use": false,
  "instance_type_name": "t3.xlarge",
  "last_change": "2022-06-08 20:35:10.633672Z",
  "launch_time": null,
  "machine_name": "IF-3B1F59DDA36E",
  "machine_status": null,
  "maintenance": false,
  "name": "Unassigned",
  "pool_external_id": "gateway-prod.588775",
  "pool_name": "persistent_desktop_production",
  "private_ip": "10.0.5.62",
  "problem": false,
  "public_hostname": null,
  "public_wsport": 443,
  "recovery": false,
  "reserved": -1,
  "server_ip": null,
  "server_version": "8.4.9.0",
  "status": "stopped",
  "upgrade_version": 0,
  "user_in_session": null,
  "zone": "us-east-2a"
}
```

```bash
Status: 200 "OK"
```

</details>



---

### List Pool Capacity Settings

Returns the current min, buffer, and max values configured for a [specific pool](#list-pools).

<span class="badge badge-get">GET</span> <code>/pools/:pool_id/elasticity_settings</code>

#### Request Parameters

| Name    | Description                                               | Param Type | Data Type | Required |
| ------- | --------------------------------------------------------- | ---------- | --------- | -------- |
| pool_id | ID of the Instance Type/pool you're getting settings for. | URL        | string    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/pools/${pool_id}/elasticity_settings"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "min_servers": 15,
  "buffer_servers": 2,
  "max_servers": 100
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Set Pool Capacity Settings

Sets new min, buffer, or max values for a [specific pool](#list-pools).
Frame immediately sets new values and orchestrates workloads to match these settings. You can the status of this operation using the returned task ID.

<div class="callout callout-warning">
Practice caution and make sure you understand the meanings of minimum,
buffer, and maximum server elasticity values before setting them via
API. Incorrectly setting these values can be expensive in regards to
infrastructure costs and resources.

Please allow these tasks to complete (["DONE" status](#get-task-status)) before making
another request for the same pool.
</div>

<span class="badge badge-post">POST</span> <code>/pools/:pool_id/elasticity_settings</code>

#### Request Parameters

| Name           | Description                                                     | Param Type | Data Type | Required |
| -------------- | --------------------------------------------------------------- | ---------- | --------- | -------- |
| pool_id        | ID of the specific pool you'd like to set capacity settings for | URL        | String    | True     |
| min_servers    | Minimum servers value for a pool                                | Form Data  | String    | False    |
| buffer_servers | Buffer servers value for a pool                                 | Form Data  | String    | False    |
| max_servers    | Maximum server capacity value for a pool                        | Form Data  | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/pools/${pool_id}/elasticity_settings" \
-F min_servers=5 \
-F buffer_servers=0 \
-F max_servers=80 \
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "account_id": "XXXXXXXX-09cf-44d9-a386-XXXXXXXXXXX",
  "customer_id": "XXXXXXXX-5ab2-47df-9f9c-XXXXXXXXXXX",
  "display_name": "Updating elasticity for Air 4GB",
  "duration_sec": null,
  "external_resource_id": null,
  "finished_at": null,
  "id": "0bf720c4-7729-48aa-95a8-470211aea40f",
  "inserted_at": "2021-08-05T17:50:32.106790Z",
  "kind": "update_pool_elasticity_settings",
  "organization_id": "82ccea89-389f-496a-9c75-XXXXXXXXXXX",
  "pool_id": "cd5e4467-3f20-49eb-803b-9514eeab7711",
  "progress_info": null,
  "result_info": null,
  "stage": "not_started",
  "started_by": {
    "email": "XXXXXXXXXXX.img.frame.nutanix.com_third-party-api",
    "first_name": "X",
    "id": "XXXXXXXX-2f74-4dad-8e55-XXXXXXXXXXX",
    "identity_provider": "third-party-api",
    "last_name": "X"
  },
  "updated_at": "2021-08-05T17:50:32.106790Z"
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Set Persistent Desktop Capacity Settings

Sets the current Persistent Desktop capacity settings for an account.
This includes values for `number_of_backups_to_save`, `max_users`, and
`keep_instances_running_for_new_users`.

<div class="callout callout-warning">
Practice caution with these values. For example, setting a lower
**max_users** value below the current number of assigned persistent
desktops will result in zero unassigned persistent desktops for new
users. Incorrectly setting these values can be expensive in regards to
infrastructure costs and resources.

Please allow these tasks to complete (["DONE" status](#get-task-status)) before making
sending more capacity change requests.
</div>

<span class="badge badge-post">POST</span> <code>/accounts/:persistent_account_id/persistent_desktop_elasticity_settings</code>

#### Request Parameters

| Name                                 | Description                                                                                                                                                                                                                                             | Param Type | Data Type | Required |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | --------- | -------- |
| persistent_account_id                | ID of your persistent Frame account.                                                                                                                                                                                                                    | URL        | String    | True     |
| number_of_backups_to_save            | Like it says, this value determines the number of persistent desktop backups to save for recovery.                                                                                                                                                      | Form Data  | String    | False    |
| max_users                            | This value is the maximum amount of persistent desktops you'd like to provision. Be mindful when lowering this value below the current number of assigned persistent desktops as that will result in zero unassigned persistent desktops for new users. | Form Data  | String    | True     |
| keep_instances_running_for_new_users | If true, unassigned persistent desktops will continue running until a new user connects and assigns it.                                                                                                                                                 | Form Data  | Boolean   | True     |

For more information, reference our documentation about [persistent desktop capacity settings](/platform/admin/capacity/).


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${persistent_account_id}/persistent_desktop_elasticity_settings" \
-F number_of_backups_to_save=2 \
-F max_users=20 \
-F keep_instances_running_for_new_users=false \
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "account_id": "XXXXXXXX-d55d-4aec-98f6-XXXXXXXXXXX",
  "customer_id": "XXXXXXXX-5ab2-47ef-9f9c-XXXXXXXXXXX",
  "display_name": "Updating capacity for persistent desktop",
  "duration_sec": null,
  "external_resource_id": null,
  "finished_at": null,
  "id": "111e0873-08e6-4cfa-9cf0-5d60eaae1585",
  "inserted_at": "2022-06-27T18:02:39.637192Z",
  "kind": "update_persistent_desktop_settings",
  "organization_id": "XXXXXXXX-389f-496a-9c75-XXXXXXXXXXX",
  "pool_id": null,
  "progress_info": null,
  "result_info": null,
  "stage": "not_started",
  "started_by": {
    "email": "XXXXXXXX-3bee-405f-8c28-XXXXXXXXXXX.img.frame.nutanix.com_third-party-api",
    "first_name": "X",
    "id": "XXXXXXXX-2f74-45b2-8e55-XXXXXXXXXXX",
    "identity_provider": "third-party-api",
    "last_name": "X"
  },
  "updated_at": "2022-06-27T18:02:39.637192Z"
}
```

```bash
Status: 200 "OK"
```

</details>



---

### List Elasticity Logs

Returns logs for elasticity changes.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/elasticity-logs</code>

#### Request Parameters

| Name               | Description                                                                                                                                         | Param Type   | Data Type           | Required |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------- | -------- |
| account_id         | Frame Account ID                                                                                                                                    | URL          | String              | True     |
| instance_type_name | Filters results based on the instance type's name. For example, if our account was hosted in AWS, we could filter by “t2.medium”, “t3.large”, etc.  | Search Query | String              | True     |
| from_date          | The beginning date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”. | Search Query | ISO 8601 UTC String | True     |
| to_date            | The ending date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”.    | Search Query | ISO 8601 UTC String | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${account_id}/elasticity-logs?instance_type_name=t2.medium&from_date=2021-03-20T23:59:59.128Z&to_date=2022-03-15T23:59:59.128Z"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "active_instances": 15,
    "active_sessions": 0,
    "buffer_instances": 0,
    "max_instances": 20,
    "max_setting": 20,
    "min_instances": 0,
    "timestamp": "2021-07-20T21:28:59.893337Z"
  },
  {
    "active_instances": 15,
    "active_sessions": 0,
    "buffer_instances": 0,
    "max_instances": 15,
    "max_setting": 15,
    "min_instances": 0,
    "timestamp": "2021-07-20T22:16:31.521437Z"
  },
  {
    "active_instances": 80,
    "active_sessions": 0,
    "buffer_instances": 0,
    "max_instances": 80,
    "max_setting": 80,
    "min_instances": 65,
    "timestamp": "2021-08-05T18:47:08.435230Z"
  },
  {
    "active_instances": 100,
    "active_sessions": 0,
    "buffer_instances": 0,
    "max_instances": 100,
    "max_setting": 100,
    "min_instances": 75,
    "timestamp": "2021-09-30T18:53:56.513631Z"
  }
]
```

```bash
Status: 200 "OK"
```

</details>



---

### List Account Roles

Returns an array of available roles and the associated permissions to an account

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/roles</code>

#### Request Parameters

| Name       | Description        | Param Type | Data Type | Required |
| ---------- | ------------------ | ---------- | --------- | -------- |
| account_id | Nutanix Account ID | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${account_id}/roles"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "applicable_on": "account",
    "category": null,
    "description": null,
    "id": "c1aad088-50c2-45ab-aca2-8261d9982d14",
    "name": "Account Administrator",
    "permissions": [
      "cpanel_mutation_update_application_on_publish",
      "cpanel_account_data_center",
      "cpanel_account_analytics",
      "cpanel_mutation_revoke_user_invitation",
      "cpanel_launchpad_session_settings"
      // ... More role permissions
    ]
  }
]
```

```bash
Status: 200 "OK"
```

</details>



---

### List Account User Activity

Returns basic user “activity” information for the specified Account
constrained by a date range. You'll receive a total count of user
activities, as well as a unique count of users for the given time
period. Can be ordered by passing a string parameter as well as exclude
specified user Identity Provider Ids.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/user_activities</code>

#### Request Parameters

| Name               | Description                                                                                                    | Param Type   | Data Type              | Required |
| ------------------ | -------------------------------------------------------------------------------------------------------------- | ------------ | ---------------------- | -------- |
| account_id         | Frame Account ID                                                                                               | URL          | String                 | True     |
| from_date          | The beginning date range for the query.                                                                        | Search Query | YYYY-MM-DD Date string | True     |
| to_date            | The ending date range for the query.                                                                           | Search Query | YYYY-MM-DD Date string | True     |
| order              | Specifies the order of the results. Use “asc” for ascending order, and “desc” for descending order.            | Search Query | String                 | False    |
| order_by           | Specifies the field of which the ordering should occur. For example, “session_start”, “session_duration”, etc. | Search Query | String                 | False    |
| skip_user_idps\[\] | User Identity Providers to skip.                                                                               | Search Query | Array (String)         | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${account_id}/user_activities?from_date=${from_date}&to_date=${to_date}&skip_user_idps[]=example-okta-admins&skip_user_idps[]=example-okta-dev"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "data": [
    {
      "access_date": "2022-02-01",
      "access_datetime": "2022-02-01T21:11:00.398870Z",
      "account_id": "0e52b11b-23bf-411e-a070-bc0ea014cbc2",
      "customer_id": "6ba31e38-1735-4274-a58e-6fb8c662e425",
      "organization_id": "bc24563d-375b-49fb-8f15-1682b8bc6deb",
      "user_email": "dontcallme.shirley@example.com",
      "user_first_name": "Shirley",
      "user_id": "20acd3a2-b455-4dca-b22b-520e16079e11",
      "user_idp": "example-okta-workforce",
      "user_last_name": "Dontcallme"
    }
    // ... more User Activities
  ],
  "total": 66866,
  "total_unique": 8133
}
```

```bash
Status: 200 "OK"
```

</details>



---

### List Servers for an Account{#list-servers}

Returns all workload servers for an account.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/servers</code>

#### Request Parameters

| Parameter  | Description            | Param Type | Data Type | Required |
| ---------- | ---------------------- | ---------- | --------- | -------- |
| account_id | Your Frame account ID. | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${account_id}/servers"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "active": false,
    "cloud_instance_id": "i-04198255723b27d69",
    "creation_time": "2021-07-20 21:22:49.287276Z",
    "debug": false,
    "desired_status": "stopped",
    "domain_joined": false,
    "external_id": "gateway-prod.575XXXX",
    "id": 575XXXX,
    "in_use": false,
    "instance_type_name": "t2.medium",
    "last_change": "2021-08-04 21:13:57.243020Z",
    "launch_time": null,
    "machine_name": "IF-F89A27E05E86",
    "machine_status": null,
    "maintenance": false,
    "name": "Lenticular Cloud Project - 575XXXX",
    "pool_external_id": "gateway-prod.520XXX",
    "pool_name": "sandbox",
    "private_ip": "10.0.4.145",
    "problem": false,
    "public_hostname": null,
    "public_wsport": 443,
    "recovery": false,
    "reserved": -1,
    "server_ip": null,
    "server_version": null,
    "status": "stopped",
    "upgrade_version": 0,
    "user_in_session": null,
    "zone": "us-west-1a"
  },
  // More servers...
]
```

```bash
Status: 200 "OK"
```

</details>



---

### Clone a Sandbox

This endpoint will clone a Sandbox image from one account to the
specified target account. The target account and source account
must belong to the same Cloud Provider (e.g. clone from AWS to
AWS, GCP to GCP, Azure to Azure). You can [check the status](#get-task-status) of this
operation using the returned task ID.

<div class="callout callout-warning">
This process will overwrite the Sandbox image for the target account
which means all existing data will be lost. Be sure to perform a
backup before continuing.
</div>

<span class="badge badge-post">POST</span> <code>/accounts/:target_account_id/pools/:source_pool_id/clone</code>

#### Request Parameters

| Parameter         | Description                                                                                                                   | Param Type   | Data Type | Required |
| ----------------- | ----------------------------------------------------------------------------------------------------------------------------- | ------------ | --------- | -------- |
| target_account_id | This is the target account ID                                                                                                 | URL          | String    | True     |
| source_pool_id    | The source account's Sandbox pool ID                                                                                          | URL          | String    | True     |
| join_domain       | Optional. Can be true or false. Determines whether Frame should attempt to join the domain after the Sandbox has been cloned. | search Query | String    | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/pools/${source_pool_id}/clone"
-F join_domain=false
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "account": {
    "active": true,
    "description": null,
    "id": "XXXXXXXX-32ef-4ea9-a896-XXXXXXXXXXX",
    "inserted_at": "2021-07-28T20:48:09.614305Z",
    "kind": "frame",
    "last_publish": null,
    "name": "API Clone Tutorial",
    "notes": null,
    "url_slug": "api-clone-tutorial",
    "website": null
  },
  "pending_request": {
    "account_id": "XXXXXXXX-32ef-4ea9-a896-XXXXXXXXXXX",
    "customer_id": "XXXXXXXX-5ab2-47ef-9f9c-XXXXXXXXXXX",
    "display_name": "Cloning system",
    "duration_sec": null,
    "external_resource_id": null,
    "finished_at": null,
    "id": "e7e44ecb-5e8c-342d-8c23-b190b1004e31",
    "inserted_at": "2021-08-05T18:17:20.692055Z",
    "kind": "clone_pool",
    "organization_id": "XXXXXXXX-389f-496a-9c75-XXXXXXXXXXX",
    "pool_id": "cce63a88-4dad-4725-81b0-d492a6427b00",
    "progress_info": null,
    "result_info": null,
    "stage": "not_started",
    "started_by": {
      "email": "XXXXXXXX-3bee-405f-8c28-XXXXXXXXXXX.img.frame.nutanix.com_third-party-api",
      "first_name": "X",
      "id": "XXXXXXXX-2f74-4dad-8e55-XXXXXXXXXXX",
      "identity_provider": "third-party-api",
      "last_name": "X"
    },
    "updated_at": "2021-08-05T18:17:20.692055Z"
  }
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Get Task Status

Returns the current status of a provided task ID.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/task/:task_id</code>

#### Request Parameters

| Parameter | Description      | Param Type | Data Type | Required |
| --------- | ---------------- | ---------- | --------- | -------- |
| id        | Frame Account ID | URL        | String    | True     |
| task_id   | Frame Task ID    | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/task/${task_id}"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "account_id": "XXXXXXXX-09cf-44d9-a386-XXXXXXXXXXX",
  "customer_id": "XXXXXXXX-5ab2-47ef-9f9c-XXXXXXXXXXX",
  "display_name": "Publishing Sandbox to Production",
  "duration_sec": 1530,
  "external_resource_id": null,
  "finished_at": "2021-07-20T22:16:31.680241Z",
  "id": "57643caa-1700-4938-b6cc-94b8dd5fa7df",
  "inserted_at": "2021-07-20T21:51:01.481733Z",
  "kind": "publish_sandbox_to_production",
  "organization_id": "86bcea89-389f-496a-3c75-1df0ce8d96ca",
  "pool_id": null,
  "progress_info": null,
  "result_info": null,
  "stage": "done",
  "started_by": {
    "email": "68f43670-3bee-405f-8c28-cc5baf354e5f.img.frame.nutanix.com_third-party-api",
    "first_name": "X",
    "id": "d15d3125-2f74-45b2-8e55-1574de5e2b6a",
    "identity_provider": "third-party-api",
    "last_name": "X"
  },
  "updated_at": "2021-07-20T22:16:31.681266Z"
}
```

```bash
Status: 200 "OK"
```

</details>



---

### List Account Usage

Returns usage information for an account within a specified time period.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/usage</code>

#### Request Parameters

| Parameter        | Description                                                                                                                                         | Param Type   | Data Type           | Required |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------- | -------- |
| id               | Frame Account ID                                                                                                                                    | Search Query | String              | True     |
| from_date        | The beginning date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”. | Search Query | ISO 8601 UTC String | True     |
| to_date          | The ending date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”.    | Search Query | ISO 8601 UTC String | True     |
| resolution_type  | What is the resolution type: `by_hour`, `by_day`, `by_month`, `by_year`                                                                             | Search Query | String              | False    |
| server_type      | Server Type: `by_hour`, `by_day`, `by_month`, `by_year`                                                                                             | Search Query | String              | False    |
| pool_id          | Frame Pool ID.                                                                                                                                      | Search Query | String              | False    |
| instance_type_id | Frame Instance Type ID:                                                                                                                             | Search Query | String              | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
-H "resolution_type: by_day" \
"https://api.console.nutanix.com/v1/accounts/${id}/usage?from_date=2021-12-01T23:20:58.128Z&to_date=2021-12-25T23:20:58.128Z"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "usage_data": {
    "vendor_id": 1338,
    "usage": [
      {
        "time": 1532217600000,
        "server_type_id": "sandbox",
        "instance_type": {
          "name": "t2.medium",
          "id": 4
        },
        "hours_used": 1,
        "datacenter": {
          "name": "aws-de",
          "id": 6,
          "geo_long": 8.683333,
          "geo_lat": 50.116667
        }
      },
      {
        "time": 1532253600000,
        "server_type_id": "sandbox",
        "instance_type": {
          "name": "t2.medium",
          "id": 4
        },
        "hours_used": 1,
        "datacenter": {
          "name": "aws-de",
          "id": 6,
          "geo_long": 8.683333,
          "geo_lat": 50.116667
        }
      }
    ],
    "gateway_id": "gateway-web-datest.dev.fra.me"
  },
  "status_message": "Success.",
  "status": 0,
  "resolution": "by_hour",
  "credited_data": {
    "vendor_id": 1338,
    "gateway_id": "gateway-web-datest.dev.fra.me",
    "credit": [
      {
        "time": 1532253600000,
        "server_type_id": null,
        "instance_type": {
          "name": "t2.medium",
          "id": 4
        },
        "datacenter": {
          "name": "aws-de",
          "id": 6,
          "geo_long": 8.683333,
          "geo_lat": 50.116667
        },
        "credited_hours": 2
      }
    ]
  }
}
```

```bash
Status: 200 "OK"
```

</details>



---

### List Disk Volume Usage

Returns the disk volume usage for a specified account in a specified time period.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/disk_volume_usage?params=...</code>

#### Request Parameters

| Parameter       | Description                                                                                                                                         | Param Type   | Data Type           | Required |
| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------- | -------- |
| id              | Frame Account ID                                                                                                                                    | URL          | String              | True     |
| from_date       | The beginning date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”. | URL          | ISO 8601 UTC String | True     |
| to_date         | The ending date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”.    | URL          | ISO 8601 UTC String | True     |
| server_type     | Server Type: `by_hour`, `by_day`, `by_month`, `by_year`                                                                                             | Search Query | String              | False    |
| resolution_type | Defaults to by_hour, options: `by_hour`, `by_day`, `by_month`, `by_year`                                                                            | Search Query | String              | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/disk_volume_usage?from_date=2020-01-01&to_date=2020-06-30&resolution_type=by_month"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "data": [
    {
      "account_external_id": "gateway-prod.1337",
      "usage": [
        {
          "datacenter_id": "gateway-prod.3",
          "hours_used": 1488,
          "disk_volume_size_used": 223200,
          "disk_volume_type_id": "gp2",
          "time": 1577836800000
        },
        {
          "datacenter_id": "gateway-prod.3",
          "hours_used": 1392,
          "disk_volume_size_used": 208800,
          "disk_volume_type_id": "gp2",
          "time": 1580515200000
        },
        {
          "datacenter_id": "gateway-prod.3",
          "hours_used": 1488,
          "disk_volume_size_used": 223200,
          "disk_volume_type_id": "gp2",
          "time": 1583020800000
        },
        {
          "datacenter_id": "gateway-prod.3",
          "hours_used": 1443,
          "disk_volume_size_used": 247779,
          "disk_volume_type_id": "gp2",
          "time": 1585699200000
        },
        {
          "datacenter_id": "gateway-prod.3",
          "hours_used": 1539,
          "disk_volume_size_used": 299343,
          "disk_volume_type_id": "gp2",
          "time": 1588291200000
        },
        {
          "datacenter_id": "gateway-prod.3",
          "hours_used": 2344,
          "disk_volume_size_used": 295136,
          "disk_volume_type_id": "gp2",
          "time": 1590969600000
        },
        {
          "datacenter_id": "gateway-prod.3",
          "hours_used": 10311,
          "disk_volume_size_used": 334187,
          "disk_volume_type_id": "gp2",
          "time": 1593561600000
        }
      ]
    }
  ],
  "total": 1831645
}
```

```bash
Status: 200 "OK"
```

</details>



---

### List API Authorization Rules

Returns authorization rules for the account, organization, and customers, respectively.

- <span class="badge badge-get">GET</span> <code>/customers/:customer_id/api_authorization_rules</code>
- <span class="badge badge-get">GET</span> <code>/organizations/:organization_id/api_authorization_rules</code>
- <span class="badge badge-get">GET</span> <code>/accounts/:account_id/api_authorization_rules</code>

#### Request Parameters

| Parameter | Description                                  | Param Type | Data Type | Required |
| --------- | -------------------------------------------- | ---------- | --------- | -------- |
| entity_id | Frame Account, Organization, or Customer ID. | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/api_authorization_rules"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "roles": [
      {
        "role": {
          "permissions": ["..."],
          "name": "Account Administrator",
          "description": null,
          "applicable_on": "account"
        },
        "id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
      }
    ],
    "name": "example2",
    "id": 8,
    "credentials": [
      {
        "name": "example2_key",
        "client_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.img-external-api-prod.frame.nutanix.com"
      }
    ],
    "api_authorization_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
  },
  {
    "roles": [
      {
        "role": {
          "permissions": ["..."],
          "name": "Account Administrator",
          "description": null,
          "applicable_on": "account"
        },
        "id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
      }
    ],
    "name": "example",
    "id": 7,
    "credentials": [
      {
        "name": "example_key",
        "client_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.img-external-api-prod.frame.nutanix.com"
      }
    ],
    "api_authorization_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
  }
]
```

```bash
Status: 200 "OK"
```

</details>



---

### Create an Account

Accounts can be created within an organization with the following
endpoint and parameters. Initiating an account creation will give
you a `task_id`. You can [check the status](#get-task-status) of the
account creation via the task id.

Creating an account via our API requires a few parameters:
`cloud_service_external_id`,
`data_center_external_id`,
`sandbox_instance_type_id`,
`image_family`,
`master_image_id` and
`disk_size`. Look in each parameter's
descriptions for where to find these values. If you're having trouble
creating an account, please reach out to your Frame representative for
assistance.

<span class="badge badge-post">POST</span> <code>/accounts</code>

#### Request Parameters

| Name                      | Description                                                                                                                                                                                                                                                                                    | Param Type | Data Type | Required |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | --------- | -------- |
| organization_id           | The Frame Organization ID that the account will be created under.                                                                                                                                                                                                                              | Data       | String    | True     |
| name                      | A unique name of the new account.                                                                                                                                                                                                                                                              | Data       | String    | True     |
| url_slug                  | A URL-friendly slug that will be used in URLs to access the account.                                                                                                                                                                                                                           | Data       | String    | True     |
| cloud_service_external_id | This represents which Cloud Service (BYO) or Cloud Provider (Frame IaaS) the account will be created with. Use [List Cloud Providers](./infrastructure#list-cloud-providers) or [List Cloud Services](./infrastructure#list-cloud-services) to locate these IDs. For example: gateway-prod.xx. | Data       | String    | True     |
| data_center_external_id   | This is the ID of a datacenter or “region” that will be used for the account. Use [List Datacenters](./infrastructure#list-datacenters) to locate these IDs. For example gateway-prod.xx.                                                                                                      | Data       | String    | True     |
| sandbox_instance_type_id  | This ID is used to specify the instance type of the Sandbox. Use [List Datacenters](./infrastructure#list-datacenters) to find the Image Family and instance type you'd like, then use the instance type's ID here. For example: gateway-prod.xx                                               | Data       | String    | True     |
| image_family              | This references the name of an OS image that is supported by Frame. Use [List Image Families](./infrastructure#list-image-families) to help find this value by each Image Family's `name` field.                                                                                               | Data       | String    | True     |
| master_image_id           | Required. ID of the master image that will be used to create the sandbox. Please query [List Customer Master Images](./customer#list-customer-master-images), or [List Organization Master Images](./organization#list-organization-master-images). For example: nutanix-prod.xxxxxx.          | Data       | String    | True     |
| disk_size                 | Optional. Desired size of the sandbox image (in GiB). If this value is not provided, our system uses a default of 45 GiB. However, some operating systems images have different disk size requirements                                                                                         | Data       | String    | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/" \
-F organization_id=d63caa09-5723-4ab9-a1ea-6659b349aabe \
-F 'name=API Example Account on AWS' \
-F url_slug=example-account \
-F cloud_service_external_id=gateway-prod.55 \
-F data_center_external_id=gateway-prod.15 \
-F image_family=FrameAWSWindows2016 \
-F sandbox_instance_type_id=gateway-prod.33 \
-F master_image_id=gateway-prod.38512 \
-F disk_size=64
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "account": {
    "active": false,
    "description": null,
    "id": "724a1d0b-a2eb-69a1-8557-8fdd41e3654b",
    "inserted_at": "2022-04-27T19:40:11.086149Z",
    "kind": "frame",
    "last_publish": null,
    "last_test_publish": null,
    "name": "Example Account",
    "notes": null,
    "url_slug": "example-account",
    "website": null
  },
  "pending_request": {
    "account_id": "154a1d0b-a2ec-42a1-8757-8fdd41e3554c",
    "customer_id": "XXXXXXXX-5ab2-47ef-9f9c-XXXXXXXXXXX",
    "display_name": "Creating account Example Account",
    "duration_sec": null,
    "external_resource_id": null,
    "finished_at": null,
    "id": "96c8d6c1-8008-562b-81d7-d40073a88b11",
    "inserted_at": "2022-04-27T19:40:12.310097Z",
    "kind": "create_account",
    "organization_id": "83ccba89-389f-492a-1c75-5df0ce8c96ce",
    "pool_id": null,
    "progress_info": null,
    "result_info": null,
    "stage": "not_started",
    "started_by": {
      "email": "68f43670-3bce-405f-8c28-cc5baf354e52.img.console.nutanix.com_jasons-awesome-api",
      "first_name": "Jason",
      "id": "d15d3125-2f74-45b2-8e55-1574de5e2b6a",
      "identity_provider": "jasons-awesome-api",
      "last_name": "Thompson"
    },
    "updated_at": "2022-04-27T19:40:12.310097Z"
  }
}
```

```bash
Status: 200 "OK"
```

<div class="callout callout-success">
Use the **pending_request.id**/**task_id** to track the status of your account
creation via [[Get Task Status]](#get-task-status).
</div>

</details>



---

### Create an Account Launchpad

Creates a Launchpad based on supplied parameters.

<span class="badge badge-post">POST</span> <code>/accounts/:account_id/launchpad</code>

#### Request Parameters

| Parameter  | Description                                                                                                 | Param Type | Data Type | Required |
| ---------- | ----------------------------------------------------------------------------------------------------------- | ---------- | --------- | -------- |
| account_id | ID of the account the Launchpad will be created under.                                                      | URL        | String    | True     |
| name       | Name of the new Launchpad.                                                                                  | Data       | String    | True     |
| url_slug   | A URL-friendly slug that will be used in URLs to access the Launchpad                                       | Data       | String    | True     |
| kind       | This determines the kind of Launchpad you want to create. You can create two kinds: application and desktop | Data       | String    | True     |

<div class="callout callout-success">
You can combine launchpad creation with other automation APIs,
such as onboarding apps to your sandbox, publishing,
and toggling apps and instance types on a Launchpad. All of these endpoints
are documented here.
</div>


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/launchpad" \
-F 'name=Windows 2019 Desktop' \
-F url_slug=w2019-desktop \
-F kind=desktop \
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "active": true,
  "description": null,
  "id": "7d8fdb87-7683-40d0-81be-e7ee35a05db2",
  "kind": "desktop",
  "name": "Windows 2019 Desktop",
  "notes": null,
  "order": 1,
  "url_slug": "w2019-desktop"
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Onboard an Application

Applications can be automatically onboarded to Frame if the account
already has the Application's executable present in it's system image,
and if you have the app's basic information available, most notably
the app's icon image. Please note that you must also enable the
application on your Launchpad(s) and publish before your newly onboarded
applications are visible to your users.

<span class="badge badge-post">POST</span> <code>/account/:account_id/onboard_app</code>

#### Request Parameters

| Name        | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | Param Type | Data Type | Required |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- | --------- | -------- |
| account_id  | ID of the Org the account will be created under                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | URL        | String    | True     |
| Application | A JSON object that includes string values for the following property names: `name`, `path`, `working_directory`, `icon_base64`, and `arguments`. For the icon, you must provide a [base64 encoded Data URL](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs) of your icon image. Encoding your image in base64 can be done using [various tools and programming languages](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs#encoding_data_into_base64_format), but there are also a large number of tools online to do this as well. Your Data URL it must include the proper syntax for your image or “media” type (png, jpeg, etc.). For example, converting a PNG to base64 would start with `data:image/png;base64,`. | Data       | JSON      | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/onboard_app"
--data-raw '{
  "arguments": "",
  "name": "Internet Explorer (Last Resort)",
  "path": "C:\\Program Files\\Internet Explorer\\iexplore.exe",
  "working_directory": "",
  "icon_base64": "data:image/png;base64,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"
}'
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "arguments": "",
  "icon_url": "https://assets.console.nutanix.com/images/icons/81679a506e0d4523b5532c4609b60f8c.png",
  "id": "6ca03d2d-8729-432e-add9-c9fe21f42e9b",
  "is_deleted": false,
  "is_published": false,
  "is_updated": false,
  "name": "Internet Explorer (Last Resort)",
  "path": "C:\\Program Files\\Internet Explorer\\iexplore.exe",
  "updated_arguments": null,
  "updated_icon_url": null,
  "updated_name": null,
  "updated_path": null,
  "updated_working_directory": null,
  "working_directory": ""
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Onboard Multiple Applications (Bulk process)

This is the process of onboarding multiple applications at once.
Applications can be automatically onboarded to Frame if the account
already has the Application's executable present in it's system image,
and if you have the app's basic information available, most notably
the app's icon image. Please note that you must also enable the
application on your Launchpad(s) and publish before your newly onboarded
applications are visible to your users.

<span class="badge badge-post">POST</span> <code>/account/:account_id/onboard_applications</code>

#### Request Parameters

| Name         | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | Param Type | Data Type | Required |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- | --------- | -------- |
| account_id   | ID of the Org the account will be created under                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | URL        | String    | True     |
| applications | A JSON object that includes string values for the following property names: `name`, `path`, `working_directory`, `icon_base64`, and `arguments`. For the icon, you must provide a [base64 encoded Data URL](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs) of your icon image. Encoding your image in base64 can be done using [various tools and programming languages](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs#encoding_data_into_base64_format), but there are also a large number of tools online to do this as well. Your Data URL it must include the proper syntax for your image or “media” type (png, jpeg, etc.). For example, converting a PNG to base64 would start with `data:image/png;base64,`. | Data       | JSON      | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${id}/onboard_applications"
--data-raw '{
  "applications": [
    {
      "arguments": "",
      "name": "Internet Explorer (Last Resort)",
      "path": "C:\\Program Files\\Internet Explorer\\iexplore.exe",
      "working_directory": "",
      "icon_url": "https://url-to-your-icon.com/image.png"
    },
    // ... More applications
  ]
}'
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  [
    {
      "arguments": "",
      "icon_url": "https://assets.console.nutanix.com/images/icons/81679a506e0d4523b5532c4609b60f8c.png",
      "id": "6ca03d2d-8729-432e-add9-c9fe21f42e9b",
      "is_deleted": false,
      "is_published": false,
      "is_updated": false,
      "name": "Internet Explorer (Last Resort)",
      "path": "C:\\Program Files\\Internet Explorer\\iexplore.exe",
      "updated_arguments": null,
      "updated_icon_url": null,
      "updated_name": null,
      "updated_path": null,
      "updated_working_directory": null,
      "working_directory": ""
    },
    // ... All of the other applications you onboarded
  ]
}
```

```bash
Status: 200 "OK"
```

</details>



---

### List Launchpads

Returns a list of each Launchpad for an account, including their current settings, pools, and enabled applications if applicable.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/launchpads</code>

#### Request Parameters

| Name       | Description                                                                                                                       | Param Type   | Data Type        | Required |
| ---------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------ | ---------------- | -------- |
| account_id | ID of the Frame Account you'd like to list Launchpads for.                                                                        | URL          | String           | True     |
| offset     | Used to specify where to start the query from the results (Used for pagination). Must be in conjunction with the limit parameter. | Search Query | Integer (String) | False    |
| limit      | Used to specify the "page size" of the query. Must be used in conjunction with the offset parameter                               | Search Query | Integer (String) | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${account_id}/launchpads"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "url_slug": "desktop-1",
    "settings": {
      "session_settings": {},
      "new_app_mode_enabled": false,
      "is_session_setting_enabled": false
    },
    "order": 0,
    "name": "Desktop 1",
    "kind": "desktop",
    "id": "996cb66d-0d16-468e-b05f-192497fafc14",
    "backgrounds": [],
    "pools": [],
    "description": null,
    "active": true
  },
  {
    "url_slug": "apps-1",
    "settings": {
      "session_settings": {},
      "new_app_mode_enabled": false,
      "is_session_setting_enabled": false
    },
    "order": 1,
    "name": "Apps 1",
    "kind": "application",
    "id": "896cb66d-0d16-468e-b05f-192497fafc13",
    "applications": [],
    "pools": [],
    "backgrounds": [],
    "description": null,
    "active": true
  }
]
```

```bash
Status: 200 "OK"
```

</details>



---

### List Launchpad Details

Returns the requested Launchpad's current settings, pools, and enabled applications if applicable.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/launchpads/:launchpad_id</code>

#### Request Parameters

| Name         | Description                   | Param Type | Data Type | Required |
| ------------ | ----------------------------- | ---------- | --------- | -------- |
| account_id   | ID of the Frame Account.      | URL        | String    | True     |
| launchpad_id | ID of the Launchpad to query. | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${account_id}/launchpads/${launchpad_id}"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "url_slug": "apps-1",
  "settings": {
    "session_settings": {},
    "new_app_mode_enabled": false,
    "is_session_setting_enabled": false
  },
  "order": 1,
  "name": "Apps 1",
  "kind": "application",
  "id": "896cb66d-0d16-468e-b05f-192497fafc13",
  "applications": [],
  "pools": [],
  "backgrounds": [],
  "description": null,
  "active": true
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Toggle Launchpad Application

Once an application is onboarded to a Frame account, it can then
be enabled/toggled on any **Application Launchpad**. You'll need
to toggle an app on to enable visibility and access for your
end-users by **application ID**.

<span class="badge badge-post">POST</span> <code>/launchpads/:launchpad_id/toggle_application</code>

#### Request Parameters

| Name         | Description                                                                                                           | Param Type | Data Type | Required |
| ------------ | --------------------------------------------------------------------------------------------------------------------- | ---------- | --------- | -------- |
| launchpad_id | ID of the Launchpad you'd like to enable an application for.                                                          | URL        | String    | True     |
| Application  | A JSON object that includes string values for the following property names: `application_id`, and `order` (optional). | Data       | JSON      | True     |

<div class="callout callout-success">
You can find your application
IDs by querying [<span class="badge badge-get">GET</span> <code>/accounts/:account_id/applications</code>](#list-applications)
</div>


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/launchpads/${launchpad_id}/toggle_application" \
--data-raw '{
  "application_id": "79829dbb-ebcf-4927-9e29-5302ae26a385"
}'
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

The response will include the Launchpad's details. Including all
enabled applications, and all enabled pools. If your application
is present in the response, it's enabled and visible in Frame
(a browser refresh required). If your application is not in the
response, it is now disabled and no longer visible to end users
(browser refresh required).

```json
{
  "active": true,
  "applications": [
    {
      "id": "b7cba1b1-04ae-41e1-8375-c8346f542684",
      "name": "SketchBook",
      "path": "C:\\Program Files\\Autodesk\\SketchBook\\SketchBook.exe",
      "icon_url": "https://assets.console.nutanix.com/images/icons/886669ca055840c9ad10ed839d7081c9.png",
      "working_directory": null,
      "arguments": null,
      "is_published": true,
      "is_updated": false,
      "is_deleted": false
    },
    {
      "id": "03c8a53e-e1c0-4801-9b86-dea1de76fadf",
      "name": "ZBrushCoreMini 2020",
      "path": "C:\\Program Files\\Pixologic\\ZBrushCoreMini 2020\\ZBrushCoreMini.exe",
      "icon_url": "https://assets.console.nutanix.com/images/icons/8fc401a395f847ac9f0c65d7e88e4ca2.png",
      "working_directory": null,
      "arguments": null,
      "is_published": true,
      "is_updated": false,
      "is_deleted": false
    },
    {
      "id": "92ac6d27-c791-42b8-b3f0-2c72912d962d",
      "name": "Frame Explorer",
      "path": "C:\\Program Files\\Frame\\FrameExplorer\\FrameExplorer.exe",
      "icon_url": "https://assets.console.nutanix.com/images/icons/frame_explorer.png",
      "working_directory": null,
      "arguments": null,
      "is_published": true,
      "is_updated": false,
      "is_deleted": false
    }
  ]
  // ... the rest of the launchpad's details, including instance type pools and settings.
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Toggle Launchpad Pool

Once an pool is onboarded to a Frame account, it can then be
enabled/toggled on any Application Launchpad. You'll need to
toggle an app on to enable visibility and access for your end-users.

<span class="badge badge-post">POST</span> <code>/launchpads/:launchpad_id/toggle_pool</code>

#### Request Parameters

| Name         | Description                                                                                                                                                                                                     | Param Type | Data Type | Required |
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | --------- | -------- |
| launchpad_id | ID of the Launchpad you'd like to enable an application for.                                                                                                                                                    | URL        | String    | True     |
| Application  | A JSON object that includes string values for the following property names: `application_id`, and `order` (optional). You can find your application IDs by [querying account applications](#list-applications). | Data       | JSON      | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/launchpads/${launchpad_id}/toggle_pool" \
--data-raw '{
  "pool_id": "c23b4ba1-c4d8-4bcf-8e62-d1f0d8477907"
}'
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

The response will include the Launchpad's details. Including all
enabled applications, and all enabled pools. If your requested
instance pool is present in the response, it's enabled and visible
in Frame (a browser refresh required). If your instance pool
is not in the response, it is now disabled and no longer visible
to end users (browser refresh required).

```json
{
  "active": true,
  "applications": [
    // our applications
  ],
  "pools": [
    {
      "id": "28dfa4dd-4354-47fd-9fd0-3d287e157d92",
      "kind": "production",
      "name": "Air 4GB",
      "instance_type": "t2.medium",
      "disk_size": 201,
      "external_id": "gateway-prod.595566"
    },
    {
      "id": "c23b4ba1-c4d8-4bcf-8e62-d1f0d8477907",
      "kind": "production",
      "name": "Pro 122GB",
      "instance_type": "g3.4xlarge",
      "disk_size": 201,
      "external_id": "gateway-prod.12005"
    }
  ]
  // ... the rest of the Launchpad's details and settings.
}
```

```bash
Status: 200 "OK"
```

</details>



---

### List User Volumes

Lists the user profile and personal disks associated with a Frame Account

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/user_volumes</code>

#### Request Parameters

| Name       | Description                                                                                                                       | Param Type   | Data Type        | Required |
| ---------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------ | ---------------- | -------- |
| account_id | Frame Account ID                                                                                                                  | URL          | string           | True     |
| offset     | Used to specify where to start the query from the results (Used for pagination). Must be in conjunction with the limit parameter. | Search Query | Integer (String) | False    |
| limit      | Used to specify the "page size" of the query. Must be used in conjunction with the offset parameter                               | Search Query | Integer (String) | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${account_id}/user_volumes/?statuses=detached"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "created_time": "2023-02-23T17:21:25.280777Z",
    "free_space": 5.92408,
    "id": "gateway-prod.137452",
    "last_backup_fail_reason": "success",
    "last_backup_success": true,
    "last_used_time": "2023-02-28T16:33:42.168903Z",
    "name": "David Horv - djhorv+01@gmail.com",
    "server": null,
    "size": 6.0,
    "status": "detached",
    "type": "profile",
    "user_uuid": "2394aa40-a078-4cd4-a293-f17c0ba22825",
    "vendor": "gateway-prod.49981",
    "volume_id": "vol-049a795cceef7372a"
  }
]
```

```bash
Status: 200 "OK"
```

</details>



---

### Delete User Volumes

Deletes onbe or more user volumes.

<span class="badge badge-delete">DELETE</span> <code>/accounts/:account_id/user_volumes</code>

#### Request Parameters

| Parameter       | Description             | Param Type | Data Type | Required |
| --------------- | ----------------------- | ---------- | --------- | -------- |
| account_id      | Frame Account ID        | URL        | String    | True     |
| user_volume_ids | List of User Volume IDs | body       | json      | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X DELETE \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${account_id}/user_volumnes"
--data-raw '{
  "user_volume_ids" : ["gateway-prod.920000","gateway-prod.940154"]
}'
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "account_id": "c54a4189-93e0-46d7-a333-d07cab1d4e7b",
  "customer_id": "fd8dc130-cfe6-40d9-8b3e-7af39024e0e8",
  "display_name": "Deleting user volumes",
  "duration_sec": 21,
  "external_resource_id": null,
  "finished_at": "2023-03-13T16:43:14.600164Z",
  "id": "bf873017-5359-4516-ba8e-91330566abe4",
  "inserted_at": "2023-03-13T16:42:53.768400Z",
  "kind": "bulk_delete_user_volume",
  "organization_id": "fefca2ef-e0fc-42c6-88d3-a21ef995be97",
  "pool_id": null,
  "progress_info": null,
  "result_info": null,
  "stage": "done",
  "started_by": {
    "email": "afe5c674-60a6-4143-8015-55d3f9a4e74a.img.frame.nutanix.com_third-party-api",
    "first_name": "X",
    "id": "b93bef6a-0f9a-455e-92dc-5ff52ddd014a",
    "identity_provider": "third-party-api",
    "last_name": "X"
  },
  "updated_at": "2023-03-13T16:43:14.600807Z"
}
```

```bash
Status: 200 "OK"
```

</details>



---

### List User Volume Backups{#list-backups}

Returns all user volumes associated with an account.

<span class="badge badge-get">GET</span> <code>/accounts/:account_id/user_volumes_backups</code>

#### Request Parameters

| Parameter  | Description            | Param Type | Data Type | Required |
| ---------- | ---------------------- | ---------- | --------- | -------- |
| account_id | Your Frame account ID. | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${account_id}/user_volumes_backups"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "backup_datetime": "2023-04-06 17:40:24",
    "id": "gateway-prod.927553",
    "kind": "personal",
    "name": "David-02 Example - djexample+02@gmail.com - Personal drive backup - pc4pvb",
    "replication_status": null,
    "type": "manual",
    "vendor_id": "gateway-prod.50591"
  }
  // More backups...
]
```

```bash
Status: 200 "OK"
```

</details>



---

### Delete User Volume Backups{#delete-volume-backups}

Deletes all user volumes that are specified in the `user_volume_backup_ids` array parameter. This is a bulk action and the API expects an array of volume backup IDs. The Account ID is not required for this call.

<span class="badge badge-delete">DELETE</span> <code>/accounts/:account_id/user_volumes_backups</code>

#### Request Parameters

| Parameter              | Description                       | Param Type | Data Type | Required |
| ---------------------- | --------------------------------- | ---------- | --------- | -------- |
| user_volume_backup_ids | An array of volume backup strings | Body       | String    | True     |
| account_id             | Your Frame account ID.            | URL        | String    | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X DELETE\
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
--data-raw '{
  "user_volume_backup_ids" : ["gateway-prod.920000","gateway-prod.940154"]
}'
"https://api.console.nutanix.com/v1/accounts/${account_id}/user_volumes_backups"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[]
```

```bash
Status: 200 "OK"
```

</details>



---

### Restore a User Volume from Backup

Restore a user volume from backup.

<span class="badge badge-post">POST</span> <code>/accounts/:account_id/user_volume_backups/:user_volume_backup_id/restore</code>

#### Request Parameters

| Name                  | Description                                                   | Param Type | Data Type | Required |
| --------------------- | ------------------------------------------------------------- | ---------- | --------- | -------- |
| account_id            | Frame Account ID                                              | URL        | string    | True     |
| user_volume_backup_id | Id of the backup (found by querying [backups](#list-backups)) | URL        | string    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/accounts/${account_id}/user_volume_backups/${user_volume_backup_id}/restore"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "account_id": "0a4e3b25-2365-4a71-bdb0-b0e26788ebf7",
  "customer_id": "fd8dc130-cfe6-40d9-8b3e-7af39024e0e8",
  "display_name": "Restoring user volume backup",
  "duration_sec": null,
  "external_resource_id": "gateway-prod.50591",
  "finished_at": null,
  "id": "d7266ef3-11ad-4e8f-8bca-1ee8c1baa5a3",
  "inserted_at": "2023-04-11T18:51:24.217658Z",
  "kind": "restore_user_volume_backup",
  "organization_id": "fefca2ef-e0fc-42c6-88d3-a21ef995be97",
  "pool_id": null,
  "progress_info": null,
  "result_info": null,
  "stage": "not_started",
  "started_by": {
    "email": "afe5c674-60a6-4143-8015-55d3f9a4e74a.img.frame.nutanix.com_third-party-api",
    "first_name": "X",
    "id": "b93bef6a-0f9a-455e-92dc-5ff52ddd014a",
    "identity_provider": "third-party-api",
    "last_name": "X"
  },
  "updated_at": "2023-04-11T18:51:24.217658Z"
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Update maintenance mode

Update maintenance mode on the account.

<span class="badge badge-post">POST</span> <code>/accounts/:account_id/update_account_maintenance_mode</code>

#### Request Parameters

| Name                | Description              | Param Type | Data Type | Required |
| ------------------- | ------------------------ | ---------- | --------- | -------- |
| account_id          | Frame Account ID         | URL        | string    | True     |
| under_maintenance   | Maintenance mode switch  | Body       | boolean   | True     |
| maintenance_message | Maintenance mode message | Body       | string    | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
--data-raw '{
  "under_maintenance" : true,
  "maintenance_message": "This account is under maintenance mode"
}'
"https://api.console.nutanix.com/v1/accounts/${account_id}/update_account_maintenance_mode"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "website": null,
  "name": "Aca Ivic Local",
  "last_publish": "2018-07-12T11:26:18.879116",
  "id": "b614cb6f-796b-4371-86cb-465d6dfc433b",
  "description": null,
  "active": true
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Change Upgrade Group

Change upgrade/deployment group of the account.

<span class="badge badge-post">POST</span> <code>/accounts/:account_id/change_deployment_group</code>

#### Request Parameters

| Name             | Description               | Param Type | Data Type | Required |
| ---------------- | ------------------------- | ---------- | --------- | -------- |
| account_id       | Frame Account ID          | URL        | string    | True     |
| upgrade_group_id | Upgrade Group External ID | Body       | string    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X POST \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
--data-raw '{
  "upgrade_group_id" : "gateway-prod.1"
}'
"https://api.console.nutanix.com/v1/accounts/${account_id}/change_deployment_group"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "website": null,
  "name": "Aca Ivic Local",
  "last_publish": "2018-07-12T11:26:18.879116",
  "id": "b614cb6f-796b-4371-86cb-465d6dfc433b",
  "description": null,
  "active": true
}
```

```bash
Status: 200 "OK"
```

</details>



---

### Restore Persistent Desktop Backup

Restore Persistent Desktop Server to a backup.

<span class="badge badge-post">POST</span> <code>/servers/:server_external_id/restore_persistent_desktop/:backup_external_id</code>

#### Request Parameters

| Name                       | Description                           | Param Type | Data Type | Required |
| -------------------------- | ------------------------------------- | ---------- | --------- | -------- |
| server_external_id         | Persistent Desktop Server External ID | URL        | string    | True     |
| backup_external_id         | Backup External ID                    | URL        | string    | True     |
| force_restore_from_replica | Force restore from replica?           | Body       | boolean   | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
--data-raw '{
  "force_restore_from_replica" : false
}'
"https://api.console.nutanix.com/v1/servers/${server_external_id}/restore_persistent_desktop/${backup_external_id}"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "account_id": "c54a4189-93e0-46d7-a333-d07cab1d4e7b",
  "customer_id": "fd8dc130-cfe6-40d9-8b3e-7af39024e0e8",
  "display_name": "Restoring Persistent Desktop Backup",
  "duration_sec": 21,
  "external_resource_id": null,
  "finished_at": "2023-03-13T16:43:14.600164Z",
  "id": "bf873017-5359-4516-ba8e-91330566abe4",
  "inserted_at": "2023-03-13T16:42:53.768400Z",
  "kind": "restore_persistent_desktop_backup",
  "organization_id": "fefca2ef-e0fc-42c6-88d3-a21ef995be97",
  "pool_id": null,
  "progress_info": null,
  "result_info": null,
  "stage": "done",
  "started_by": {
    "email": "afe5c674-60a6-4143-8015-55d3f9a4e74a.img.frame.nutanix.com_third-party-api",
    "first_name": "X",
    "id": "b93bef6a-0f9a-455e-92dc-5ff52ddd014a",
    "identity_provider": "third-party-api",
    "last_name": "X"
  },
  "updated_at": "2023-03-13T16:43:14.600807Z"
}
```

```bash
Status: 200 OK
```

</details>



---

# Organization Endpoints

### List Organizations

Returns all Organizations.

<span class="badge badge-get">GET</span> <code>/organizations</code>

#### Request Parameters

| Name         | Description                                                                                                                    | Param Type   | Data Type        | Required |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------ | ---------------- | -------- |
| name         | Name or portion of name you would like to use for searching/filtering.                                                         | Search Query | String           | False    |
| show_deleted | Filters organization results based on if they're deleted or not. This is useful for filtering out older deleted organizations. | Search Query | Boolean          | False    |
| order        | Specifies the order of the results. Use “asc” for ascending order, and “desc” for descending order.                            | Search Query | String           | False    |
| order_by     | Specifies the field of which the ordering should occur. For example, “name”, “url_slug”, etc.                                  | Search Query | String           | False    |
| offset       | Used to specify where to start a query.                                                                                        | Search Query | Integer (String) | False    |
| limit        | Used to specify the “page size” of the query.                                                                                  | Search Query | Integer (String) | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/organizations?show_deleted=false"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "description": null,
    "id": "aa49ea9a-3925-4f6f-86e4-6825ffe1ed24",
    "name": "Acme Org",
    "url_slug": "acme-org",
    "website": null
  },
  {
    "description": null,
    "id": "786904d3-6a19-4af2-8bfc-5479a1010961",
    "name": "Acme Training Group",
    "url_slug": "remote-training",
    "website": null
  }
]
```

```bash
Status: 200 OK
```

</details>



---

### List Organization Details

Returns information about your customer entity.

<span class="badge badge-get">GET</span> <code>/organizations/:organization_id</code>


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/organizations/${organization_id}/"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "description": null,
  "id": "2fb210e0-e931-4c62-83fd-b31fe13468ca",
  "name": "Chuck's Organization",
  "url_slug": "example-org",
  "website": null
}
```

```bash
Status: 200 OK
```

</details>



---

### List Organization Audit Trails

Returns Audit Trails for an account, constrained by a date range and a number of ways to filter & search for granular queries.

<span class="badge badge-get">GET</span> <code>/organizations/:organization_id/audit-trails</code>

#### Request Parameters

| Name            | Description                                                                                                                                                                              | Param Type   | Data Type           | Required |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------- | -------- |
| organization_id | Your Frame Organization ID                                                                                                                                                               | URL          | String              | True     |
| search          | Filters results if the provided string matches against a user's full name, email, idp, or the Audit Trail kind.                                                                          | Search Query | String              | False    |
| kind            | Filters Audit Trails by wildcard matching against the supplied string. For example, a kind of “launchpad” will return Audit Trails for both createLaunchpad and updateLaunchpad actions. | Search Query | String              | False    |
| from_date       | The beginning date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”.                                      | Search Query | ISO 8601 UTC String | False    |
| to_date         | The ending date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”.                                         | Search Query | ISO 8601 UTC String | False    |
| offset          | Used to specify where to start a Audit Trails query. **Must be used in conjunction with the limit parameter**.                                                                           | Search Query | Integer (String)    | False    |
| limit           | Used to specify the “page size” of the Audit Trails query. **Must be used in conjunction with the offset parameter**.                                                                    | Search Query | Integer (String)    | False    |
| order           | Specifies the order of the results. Use “asc” for ascending order, and “desc” for descending order.                                                                                      | Search Query | String              | False    |
| order_by        | Specifies the field of which the ordering should occur. For example, “session_start”, “session_duration”, etc.                                                                           | Search Query | String              | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/organizations/${organization_id}/audit-trails?search=jason.thompson@nutanix.com&kind=launchpad&limit=5&offset=0&from_date=${from_date}&to_date=${to_date}&order_by=inserted_at&order=desc"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "id": "7c3dee57-5a7b-4211-a55d-7d5b8e5f595b",
    "user_first_name": "Jason",
    "user_last_name": "Thompson",
    "user_idp": "example-idp-name",
    "user_email": "jason.thompson@nutanix.com",
    "kind": "updateLaunchpad",
    "account_id": "b00636bf-4f08-404e-a7ba-3c2aaa173335",
    "organization_id": "86bcea89-389f-496a-3c75-1df0ce8d96ca",
    "customer_id": "b3e7d4e0-5ab2-43cf-9f9c-0c02909931e1",
    "inserted_at": "2021-10-15T20:49:13.377350Z"
  },
  {
    "id": "4f62a8e4-1ab4-430b-9f4f-96fa77ff24f5",
    "user_first_name": "Jason",
    "user_last_name": "Thompson",
    "user_idp": "example-idp-name",
    "user_email": "jason.thompson@nutanix.com",
    "kind": "createLaunchpad",
    "account_id": "b00636bf-4f08-404e-a7ba-3c2aaa173335",
    "organization_id": "86bcea89-389f-496a-3c75-1df0ce8d96ca",
    "customer_id": "b3e7d4e0-5ab2-43cf-9f9c-0c02909931e1",
    "inserted_at": "2021-10-15T20:49:09.833114Z"
  }
  // ... more Audit Trails
]
```

```bash
Status: 200 OK
```

</details>



---

### List Organization Session Trails

Returns Session Trails based on a specified organization, time frame, and filters.

<span class="badge badge-get">GET</span> <code>/organizations/:organization_id/session-trails</code>

#### Request Parameters

| Name            | Description                                                                                                                                         | Param Type   | Data Type           | Required |
| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------- | -------- |
| organization_id | Your Frame Organization ID                                                                                                                          | URL          | String              | True     |
| search          | Filters results if the provided string matches against Server ID, Session ID, email address, and a user's full name.                                | Search Query | String              | False    |
| session_start   | The beginning date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”. | Search Query | ISO 8601 UTC String | False    |
| session_end     | The ending date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”.    | Search Query | ISO 8601 UTC String | False    |
| instance_type   | Filters Session Trails based on a specific instance type ID.                                                                                        | Search Query | String              | False    |
| pool_group_type | Filters Session Trails based on the pool group server type: sandbox, production, utility, persistent_desktop_production, persistent_desktop_shadow. | Search Query | String              | False    |
| pool_id         | Filters Session Trails based on provided instance type's pool ID.                                                                                   | Search Query | String              | False    |
| offset          | Used to specify where to start a Session Trails query. **Must be used in conjunction with the limit parameter**.                                    | Search Query | Integer (String)    | False    |
| limit           | Used to specify the “page size” of the Session Trails query. Must be used in conjunction with the offset parameter.                                 | Search Query | Integer (String)    | False    |
| order           | Specifies the order of the results. Use “asc” for ascending order, and “desc” for descending order.                                                 | Search Query | String              | False    |
| order_by        | Specifies the field of which the ordering should occur. For example, “session_start”, “session_duration”, etc.                                      | Search Query | String              | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/organizations/${organization_id}/session-trails?limit=50&offset=0&order=desc&order_by=session_start"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "account_id": "084ab7d0-e4ca-4dea-932a-45bf33f02088",
    "bandwidth_kbps_avg": 15921.05,
    "bandwidth_kbps_max": 16128,
    "bandwidth_kbps_min": 14024,
    "city": "Tehama",
    "client_ip": "123.32.145.255",
    "customer_id": "b3e7d4e0-5ab2-43cf-9f9c-0c02909931e1",
    "distance": 2369.002238311968,
    "fail_description": null,
    "framerate_ps_avg": 19.74,
    "framerate_ps_max": 20,
    "framerate_ps_min": 10,
    "id": "b970ec31-ca07-48c9-8b56-4547a7b1a9f8",
    "instance_type": "t2.large",
    "latency_ms_avg": 110.36,
    "latency_ms_max": 132,
    "latency_ms_min": 106,
    "organization_id": "2fb210e0-e931-4c62-83fd-b31fe13468ca",
    "pool_group_type": "sandbox",
    "pool_id": "d54b760c-956a-487b-a675-e113677fe871",
    "pool_instance_type": {
      "bare_metal": null,
      "display_name": "Air 8GB",
      "gpu": "None",
      "id": "gateway-prod.5",
      "name": "t2.large",
      "ram": 8,
      "vcpu": 2
    },
    "server_id": "gateway-prod.5232637",
    "session_duration": 2391,
    "session_end": "2021-02-25T23:17:27.000000Z",
    "session_id": "gateway-prod.nMOARz25k9LDmGN0",
    "session_start": "2021-02-25T23:15:56.000000Z",
    "user_email": "example.user@company.com",
    "user_first_name": "Example",
    "user_id": "52b19f2e-c8ae-4f12-beab-f2838ce8dce9",
    "user_idp": "example-idp",
    "user_last_name": "User"
  }
]
```

```bash
Status: 200 OK
```

</details>



---

### List Organization API Authorization Rules

Returns all Organization-level API keys that have been generated and their associated permissions.

<span class="badge badge-get">GET</span> <code>/organizations/:organization_id/api_authorization_rules</code>


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/organizations/${organization_id}/api_authorization_rules"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "api_authorization_id": "e8d5f1f0-2e4d-4362-9002-a5c11da1ffc9",
    "credentials": [
      {
        "client_id": "ed1147f0-3d3e-4629-a8a5-9cc67053518c.img.frame.nutanix.com",
        "name": "Development Server"
      }
    ],
    "id": 980,
    "name": "Chuck's customized admin roles",
    "roles": [
      {
        "id": "871dbc2d-f55f-4f15-ab4a-eb14541da4de",
        "role": {
          "applicable_on": "organization",
          "category": null,
          "description": null,
          "id": "6498134a-df89-4548-be2d-86b01fac91c9",
          "name": "Organization Administrator",
          "permissions": [
            "cpanel_mutation_restore_backup",
            "cpanel_mutation_check_cluster_create_limits",
            "cpanel_acknowledge_notification",
            "cpanel_mutation_move_launchpad"
            // ... more permissions
          ]
        }
      }
      // ... more roles if available
    ]
  }
]
```

```bash
Status: 200 OK
```

</details>



---

### List Organization Roles

Returns available roles and associated permission granted for the specified Organization.

<span class="badge badge-get">GET</span> <code>/organizations/:organization_id/roles</code>

#### Request Parameters

| Name            | Description                                          | Param Type   | Data Type | Required |
| --------------- | ---------------------------------------------------- | ------------ | --------- | -------- |
| organization_id | Your Frame Organization ID                           | URL          | String    | True     |
| category        | Filters the results by the role category, e.g. "api" | Search Query | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/organizations/${organization_id}/roles?category="api"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "applicable_on": "account",
    "category": "api",
    "description": null,
    "id": "f1147b3ta-f927-46aa-66ea-6eea8569663b",
    "name": "API - Generate Anonymous Account Token",
    "permissions": ["create_anonymous_access_token"]
  }
]
```

```bash
Status: 200 OK
```

</details>



---

### List Organization Cloud Services

Returns a list of [registered Cloud Service Providers](/books/platform-administrators-guide/page/bring-your-own) configured with Frame for a specified Organization.

<span class="badge badge-get">GET</span> <code>/organizations/:organization_id/cloud_services</code>

#### Request Parameters

| Parameter         | Description                                                     | Param Type   | Data Type | Required |
| ----------------- | --------------------------------------------------------------- | ------------ | --------- | -------- |
| organization_id   | Your Frame Organization ID.                                     | URL          | String    | True     |
| cloud_provider_id | The Frame cloud provider ID.                                    | Search Query | String    | true     |
| active            | Lists cloud services based on their “active” status.            | Search Query | Boolean   | False    |
| omit_default      | If true, omits Frame's default Cloud Services from the results. | Search Query | Boolean   | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/organizations/${organization_id}/cloud_services?active=true"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "active": true,
    "cloud_account_id": "199955555555",
    "cloud_provider_display_name": "AWS",
    "cloud_provider_id": "gateway-prod.2",
    "cloud_provider_name": "amazon",
    "context": "organization",
    "creation_date": "2019-06-11T20:25:33Z",
    "datacenters": [],
    "display_name": "Example Account",
    "external_id": null,
    "gateway": "gateway-prod",
    "id": "gateway-prod.459",
    "is_default": false,
    "is_provider_default": false,
    "name": "Example Account",
    "owner_id": "b3e7d4e0-5ab2-43cf-9f9c-0c02909931e1",
    "properties": {
      "cloud_account_id": "199955555555"
    },
    "status": "ready",
    "supported_datacenter_ids": null,
    "supported_types": ["frame-high"]
  }
]
```

```bash
Status: 200 "OK"
```

</details>



---

### List Organization Elasticity

Returns information on all customer instance elasticity.

<span class="badge badge-get">GET</span> <code>/organizations/:organization_id/elasticity</code>

#### Request Parameters

| Name            | Description                 | Param Type | Data Type | Required |
| --------------- | --------------------------- | ---------- | --------- | -------- |
| organization_id | Your Frame Organization ID. | URL        | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/organizations/${organization_id}/elasticity
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "buffer_servers": 10,
  "max_servers": 150,
  "min_servers": 100
}
```

```bash
Status: 200 OK
```

</details>



---

### List Organization Settings

Returns all customer entity settings.

<span class="badge badge-get">GET</span> <code>/organizations/:organization_id/settings</code>


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/organizations/${organization_id}/settings"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "authorized_nutanix_personnel": [
    "jason.thompson@nutanix.com",
    "alex.fontaine@nutanix.com",
    "stuart.allen@nutanix.com"
  ],
  "can_frame_account_support_start_session": null,
  "frame_cloud_account_allowed": false,
  "frame_support_admin_access": "full_access",
  "is_frame_support_customer_admin": true,
  "is_generate_session_report_enabled": false,
  "is_light_publish_enabled": false,
  "is_login_banner_enabled": false,
  "is_persistent_desktops_backups_enabled": true,
  "is_terminal_banner_enabled": false,
  "light_publish_settings": {
    "threshold": 10
  },
  "login_banner_settings": null,
  "max_concurrency": 160,
  "max_concurrency_per_account": null,
  "max_monthly_credits_usage": null,
  "max_monthly_credits_usage_description": null,
  "max_utility_pools_per_account": 50,
  "note": null,
  "notification_center_settings": {
    "email_addresses": null,
    "is_send_notification_emails_enabled": null,
    "notify_on_critical": null,
    "notify_on_info": null,
    "notify_on_warning": null
  },
  "terminal_banner_settings": null
}
```

```bash
Status: 200 OK
```

</details>



---

### List Organization Overall Usage

Returns instance usage for the specified Organization constrained by a date range.

<span class="badge badge-get">GET</span> <code>/organizations/:organization_id/usage</code>

#### Request Parameters

| Name                | Description                                                                                                                                         | Param Type   | Data Type           | Required |
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------- | -------- |
| organization_id     | Your Frame Organization ID                                                                                                                          | URL          | String              | True     |
| from_date           | The beginning date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”. | Search Query | ISO 8601 UTC String | False    |
| to_date             | The ending date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”.    | Search Query | ISO 8601 UTC String | False    |
| resolution_type     | Resolution Type: `by_hour`, `by_day`, `by_month`, `by_year`                                                                                         | Search Query | String              | False    |
| server_type         | Filters query based on a specific server ID.                                                                                                        | Search Query | String              | False    |
| pool_id             | Filters query based on provided instance type's pool ID.                                                                                            | Search Query | String              | False    |
| instance_type_id    | Filters the usage by an instance type's “external” ID, e.g. “gateway-prod.3”.                                                                       | Search Query | String              | False    |
| datacenter_id       | Limits the results to a specific Datacenter by ID.                                                                                                  | Search Query | String              | False    |
| skip_if_byo_account | True/False boolean value determining if BYO results should be returned.                                                                             | Search Query | Boolean             | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/organizations/${organization_id}/usage?from_date=${from_date}&to_date=${to_date}&server_type=production"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "data": [
    {
      "account": null,
      "account_external_id": "gateway-prod.35917",
      "usage": [
        {
          "datacenter": null,
          "datacenter_id": "gateway-prod.1",
          "hours_used": 1,
          "instance_type": null,
          "instance_type_id": "gateway-prod.3152",
          "server_type": "production",
          "time": 1626454800000
        }
        // ... more usage data
      ]
    }
    // ... more accounts and usage
  ],
  "total": 43533
}
```

```bash
Status: 200 OK
```

</details>



---

### List Organization Disk Volume Usage

Returns disk volume usage statistics for specified Organization within a specified date range.

<span class="badge badge-get">GET</span> <code>/organizations/:organization_id/disk_volume_usage?from_date=X&to_date=Y&server</code>

#### Request Parameters

| Name                | Description                                                                                                   | Param Type                                                                                                  | Data Type              | Required |
| ------------------- | ------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ---------------------- | -------- |
| organization_id     | Your Frame Organization ID.                                                                                   | URL                                                                                                         | String                 | True     |
| from_date           | The beginning date range for the query.                                                                       | The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”. | YYYY-MM-DD Date string | False    |
| to_date             | The ending date range for the query.                                                                          | The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”. | YYYY-MM-DD Date string | False    |
| resolution_type     | Resolution Type: `by_hour`, `by_day`, `by_month`, `by_year`                                                   | Search Query                                                                                                | String                 | False    |
| server_type         | Server Type: `sandbox`, `production`, `utility`, `persistent_desktop_production`, `persistent_desktop_shadow` | Search Query                                                                                                | String                 | False    |
| disk_volume_type_id | Disk Volume Type: `all`, `standard`, `gp2`, `io1`                                                             | Search Query                                                                                                | String                 | False    |
| datacenter_id       | Limits the results to a specific Datacenter ID number.                                                        | Search Query                                                                                                | String                 | False    |
| skip_if_byo_account | True/False boolean value determining if BYO results should be returned.                                       | Search Query                                                                                                | Boolean                | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/organizations/${organization_id}/disk_volume_usage?from_date=${from_date}&to_date=${to_date}"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "data": [
    {
      "account": null,
      "account_external_id": "gateway-prod.1791",
      "usage": [
        {
          "datacenter": null,
          "datacenter_id": "gateway-prod.3",
          "disk_volume_size_used": 180,
          "disk_volume_type_id": "gp2",
          "hours_used": 36,
          "time": 1625101200000
        }
        // ... more usage data for this account
      ]
    }
    // ... more accounts and their usage
  ],
  "total": 758884
}
```

```bash
Status: 200 OK
```

</details>



---

### List Organization Master Images

Returns Maser or "Gold" Image information for the specified Organization for a specified datacenter.

<span class="badge badge-get">GET</span> <code>/organizations/:organization_id/cloud_services/:external_cloud_service_id/master_images?external_data_center_id=XYZ</code>

#### Request Parameters

| Parameter               | Description                                          | Param Type   | Data Type | Required |
| ----------------------- | ---------------------------------------------------- | ------------ | --------- | -------- |
| external_data_center_id | This ID represents a Frame “external” datacenter ID. | Search Query | String    | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/organizations/${organization_id}/cloud_services/${external_cloud_service_id}/master_images?external_data_center_id=${external_data_center_id}"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "description": "Frame Master Image mif:1, v:0, date:2020-01-28 09:30:10",
    "id": "gateway-prod.15474",
    "instance_types": [
      {
        "display_name": "Air 4GB",
        "external_id": "gateway-prod.1",
        "gpu": "None",
        "id": "gateway-prod.1",
        "name": "t2.medium",
        "ram": 4,
        "vcpu": 2
      }
      "machine_image_family": {
        "display_name": "Windows Server 2016 (G4)",
        "id": "gateway-prod.xxx",
        "name": "FrameAWSWindows20126G4"
      },
      "master_image_copy_required": null
    ]
  },
  // ... more master images
]
```

```bash
Status: 200 OK
```

</details>



---

### List Organization User Activity

Returns statistical user activity information for the specified Customer constrained by a date range. Can be ordered by passing a string parameter as well as exclude specified user IDPs.

<span class="badge badge-get">GET</span> <code>/organizations/:organization_id/user_activities?from_date=X&to_date=Y</code>

#### Request Parameters

| Name            | Description                                                                                                    | Param Type   | Data Type              | Required |
| --------------- | -------------------------------------------------------------------------------------------------------------- | ------------ | ---------------------- | -------- |
| organization_id | Your Frame Organization ID                                                                                     | URL          | String                 | True     |
| from_date       | The beginning date range for the query.                                                                        | Search Query | YYYY-MM-DD Date string | True     |
| to_date         | The ending date range for the query.                                                                           | Search Query | YYYY-MM-DD Date string | True     |
| order           | Specifies the order of the results. Use “asc” for ascending order, and “desc” for descending order.            | Search Query | String                 | False    |
| order_by        | Specifies the field of which the ordering should occur. For example, “session_start”, “session_duration”, etc. | Search Query | String                 | False    |
| skip_user_idps  | User Identity Providers to skip.                                                                               | Search Query | Array (String)         | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/organizations/${organization_id}/user_activities?from_date=${from_date}&to_date=${to_date}&skip_user_idps[]=example-okta-admins&skip_user_idps[]=example-okta-dev"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "data": [
    {
      "access_date": "2022-02-01",
      "access_datetime": "2022-02-01T21:11:00.398870Z",
      "account_id": "0e52b11b-23bf-411e-a070-bc0ea014cbc2",
      "customer_id": "6ba31e38-1735-4274-a58e-6fb8c662e425",
      "organization_id": "bc24563d-375b-49fb-8f15-1682b8bc6deb",
      "user_email": "dontcallme.shirley@example.com",
      "user_first_name": "Shirley",
      "user_id": "20acd3a2-b455-4dca-b22b-520e16079e11",
      "user_idp": "example-okta-workforce",
      "user_last_name": "Dontcallme"
    }
    // ... many more User Activities
  ],
  "total": 66866,
  "total_unique": 8133
}
```

```bash
Status: 200 OK
```

</details>

# Customer Endpoints

### List Customer Details

Returns information about your customer entity.

<span class="badge badge-get">GET</span> <code>/customers/</code>


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/customers/"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "active": true,
  "available_applications": ["frame"],
  "billing_subscriptions": null,
  "description": "Internal, Frame Support",
  "extra_features": ["deployment_group_tag", "compatibility_matrix_tag"],
  "id": "d3e7d4e0-5ab2-47cf-9f9c-0b02999931e7",
  "name": "Frame Support",
  "notes": "Frame Support Customer, used for all things Frame!",
  "owner_email": null,
  "tenant_domain": null,
  "url_slug": "frame-support",
  "website": null
}
```

```bash
Status: 200 OK
```

</details>



---

### List Customer Accounts

Returns a list of all accounts across all organizations.

<span class="badge badge-get">GET</span> <code>/customers/:customer_id/accounts</code>

#### Request Parameters

| Name            | Description                                                                                                           | Param Type   | Data Type        | Required |
| --------------- | --------------------------------------------------------------------------------------------------------------------- | ------------ | ---------------- | -------- |
| name            | Name or portion of name you would like to use for searching/filtering.                                                | URL          | String           | False    |
| active          | Filters the accounts based on their “active” status. Useful for filtering out older terminated accounts.              | Search Query | String           | False    |
| organization_id | Filters accounts list based on the provided Organization ID.                                                          | Search Query | String           | False    |
| offset          | Used to specify where to start a Audit Trails query. **Must be used in conjunction with the limit parameter**.        | Search Query | Integer (String) | False    |
| limit           | Used to specify the “page size” of the Audit Trails query. **Must be used in conjunction with the offset parameter**. | Search Query | Integer (String) | False    |
| order           | Specifies the order of the results. Use “asc” for ascending order, and “desc” for descending order.                   | Search Query | String           | False    |
| order_by        | Specifies the field of which the ordering should occur. For example, “session_start”, “session_duration”, etc.        | Search Query | String           | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/customers/${customer_id}/accounts?active=true"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "active": true,
    "description": "Kitchen Toaster API backplane",
    "id": "54aaf078-8c03-4c75-8cda-2fc4ce661f22",
    "inserted_at": "2021-07-19T17:57:36.221864Z",
    "kind": "frame",
    "last_publish": "2022-12-20T20:43:03Z",
    "name": "Example Account",
    "notes": null,
    "url_slug": "example-account-slug",
    "website": null
  }
  // ... more accounts
]
```

```bash
Status: 200 OK
```

</details>



---

### List Customer Audit Trails

Returns Audit Trails for an account, constrained by a date range and a number of ways to filter & search for granular queries.

<span class="badge badge-get">GET</span> <code>/customers/:customer_id/audit-trails</code>

#### Request Parameters

| Name        | Description                                                                                                                                                                              | Param Type   | Data Type           | Required |
| ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------- | -------- |
| customer_id | Your Nutanix Customer ID                                                                                                                                                                 | URL          | String              | True     |
| search      | Filters results if the provided string matches against a user's full name, email, idp, or the Audit Trail kind.                                                                          | Search Query | String              | False    |
| kind        | Filters Audit Trails by wildcard matching against the supplied string. For example, a kind of “launchpad” will return Audit Trails for both createLaunchpad and updateLaunchpad actions. | Search Query | String              | False    |
| from_date   | The beginning date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”.                                      | Search Query | ISO 8601 UTC String | False    |
| to_date     | The ending date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”.                                         | Search Query | ISO 8601 UTC String | False    |
| offset      | Used to specify where to start a Audit Trails query. **Must be used in conjunction with the limit parameter**.                                                                           | Search Query | Integer (String)    | False    |
| limit       | Used to specify the “page size” of the Audit Trails query. **Must be used in conjunction with the offset parameter**.                                                                    | Search Query | Integer (String)    | False    |
| order       | Specifies the order of the results. Use “asc” for ascending order, and “desc” for descending order.                                                                                      | Search Query | String              | False    |
| order_by    | Specifies the field of which the ordering should occur. For example, “session_start”, “session_duration”, etc.                                                                           | Search Query | String              | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/customers/${customer_id}/audit-trails?search=jason.thompson@nutanix.com&kind=launchpad&limit=5&offset=0&from_date={{from_date}}&to_date={{to_date}}&order_by=inserted_at&order=desc"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "id": "7c3dee57-5a7b-4211-a55d-7d5b8e5f595b",
    "user_first_name": "Jason",
    "user_last_name": "Thompson",
    "user_idp": "example-idp-name",
    "user_email": "jason.thompson@nutanix.com",
    "kind": "updateLaunchpad",
    "account_id": "b00636bf-4f08-404e-a7ba-3c2aaa173335",
    "organization_id": "86bcea89-389f-496a-3c75-1df0ce8d96ca",
    "customer_id": "b3e7d4e0-5ab2-43cf-9f9c-0c02909931e1",
    "inserted_at": "2021-10-15T20:49:13.377350Z"
  },
  {
    "id": "4f62a8e4-1ab4-430b-9f4f-96fa77ff24f5",
    "user_first_name": "Jason",
    "user_last_name": "Thompson",
    "user_idp": "example-idp-name",
    "user_email": "jason.thompson@nutanix.com",
    "kind": "createLaunchpad",
    "account_id": "b00636bf-4f08-404e-a7ba-3c2aaa173335",
    "organization_id": "86bcea89-389f-496a-3c75-1df0ce8d96ca",
    "customer_id": "b3e7d4e0-5ab2-43cf-9f9c-0c02909931e1",
    "inserted_at": "2021-10-15T20:49:09.833114Z"
  }
  // ... more Audit Trails
]
```

```bash
Status: 200 OK
```

</details>



---

### List Customer Session Trails

Returns Session Trails based on a specified time frame and filters.

<span class="badge badge-get">GET</span> <code>/customers/:customer_id/session-trails</code>

#### Request Parameters

| Name            | Description                                                                                                                                         | Param Type   | Data Type           | Required |
| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------- | -------- |
| customer_id     | Your Nutanix Customer ID                                                                                                                            | URL          | String              | True     |
| search          | Filters results if the provided string matches against Server ID, Session ID, email address, and a user's full name.                                | Search Query | String              | False    |
| session_start   | The beginning date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”. | Search Query | ISO 8601 UTC String | False    |
| session_end     | The ending date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”.    | Search Query | ISO 8601 UTC String | False    |
| instance_type   | Filters Session Trails based on a specific instance type ID.                                                                                        | Search Query | String              | False    |
| pool_group_type | Filters Session Trails based on the pool group server type: sandbox, production, utility, persistent_desktop_production, persistent_desktop_shadow. | Search Query | String              | False    |
| pool_id         | Filters Session Trails based on provided instance type's pool ID.                                                                                   | Search Query | String              | False    |
| offset          | Used to specify where to start a Session Trails query. **Must be used in conjunction with the limit parameter**.                                    | Search Query | Integer (String)    | False    |
| limit           | Used to specify the “page size” of the Session Trails query. **Must be used in conjunction with the offset parameter**.                             | Search Query | Integer (String)    | False    |
| order           | Specifies the order of the results. Use “asc” for ascending order, and “desc” for descending order.                                                 | Search Query | String              | False    |
| order_by        | Specifies the field of which the ordering should occur. For example, “session_start”, “session_duration”, etc.                                      | Search Query | String              | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/customers/${customer_id}/session-trails?limit=50&offset=0&order=desc&order_by=session_start"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "account_id": "084ab7d0-e4ca-4dea-932a-45bf33f02088",
    "bandwidth_kbps_avg": 15921.05,
    "bandwidth_kbps_max": 16128,
    "bandwidth_kbps_min": 14024,
    "city": "Tehama",
    "client_ip": "123.32.145.255",
    "customer_id": "d3e7d4e0-5ab2-47cf-9f9c-0b02999931e7",
    "distance": 2369.002238311968,
    "fail_description": null,
    "framerate_ps_avg": 19.74,
    "framerate_ps_max": 20,
    "framerate_ps_min": 10,
    "id": "b970ec31-ca07-48c9-8b56-4547a7b1a9f8",
    "instance_type": "t2.large",
    "latency_ms_avg": 110.36,
    "latency_ms_max": 132,
    "latency_ms_min": 106,
    "organization_id": "2fb210e0-e931-4c62-83fd-b31fe13468ca",
    "pool_group_type": "sandbox",
    "pool_id": "d54b760c-956a-487b-a675-e113677fe871",
    "pool_instance_type": {
      "bare_metal": null,
      "display_name": "Air 8GB",
      "gpu": "None",
      "id": "gateway-prod.5",
      "name": "t2.large",
      "ram": 8,
      "vcpu": 2
    },
    "server_id": "gateway-prod.5232637",
    "session_duration": 2391,
    "session_end": "2021-02-25T23:17:27.000000Z",
    "session_id": "gateway-prod.nMOARz25k9LDmGN0",
    "session_start": "2021-02-25T23:15:56.000000Z",
    "user_email": "example.user@company.com",
    "user_first_name": "Example",
    "user_id": "52b19f2e-c8ae-4f12-beab-f2838ce8dce9",
    "user_idp": "example-idp",
    "user_last_name": "User"
  }
]
```

```bash
Status: 200 OK
```

</details>



---

### List Customer API Authorization Rules

Returns all Customer API keys that have been generated and their associated permissions.

<span class="badge badge-get">GET</span> <code>/customers/:customer_id/api_authorization_rules</code>


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/customers/${customer_id}/api_authorization_rules"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "api_authorization_id": "c3103e65-6add-4fd1-abc3-2c348235cd40",
    "credentials": [],
    "id": 53,
    "name": "ExampleA Dev Environment API credentials",
    "roles": [
      {
        "id": "0f77adc8-d9e5-4e40-a900-358b54b6c8f8",
        "role": {
          "applicable_on": "customer",
          "category": null,
          "description": null,
          "id": "6ae133ae-a9cb-4160-1337-e904f97293d5",
          "name": "Customer Administrator",
          "permissions": [
            "cpanel_mutation_delete_backup",
            "cpanel_list_virtual_networks_organization_cloud_services",
            "cpanel_launchpad",
            "cpanel_account_authentication_settings",
            "cpanel_launchpad_session_settings",
            "cpanel_mutation_start_session_production",
            "cpanel_mutation_delete_google_authorization_rule",
            "cpanel_customer_authorization_rule",
            "cpanel_mutation_update_launchpad_session_settings",
            "cpanel_account_authorization_rules",
            "cpanel_cluster_host",
            "cpanel_customer_audit_trail",
            "cpanel_account",
            "cpanel_organization_api_authorization",
            "cpanel_mutation_dismiss_pool_alert",
            "cpanel_mutation_update_cluster_aos_tier",
            "cpanel_mutation_update_account_general_settings"
            // ... more permissions
          ]
        }
      }
    ]
  }
]
```

```bash
Status: 200 OK
```

</details>



---

### List Customer Cloud Services

Returns a list of [registered Cloud Service Providers](/books/platform-administrators-guide/page/bring-your-own) configured with your Frame Customer entity.

<span class="badge badge-get">GET</span> <code>/customers/:customer_id/cloud_services</code>

#### Request Parameters

| Parameter         | Description                                                     | Param Type   | Data Type | Required |
| ----------------- | --------------------------------------------------------------- | ------------ | --------- | -------- |
| id                | Your Nutanix Customer ID.                                       | URL          | String    | True     |
| cloud_provider_id | The Frame cloud provider ID.                                    | Search Query | String    | True     |
| active            | Lists cloud services based on their “active” status.            | Search Query | Boolean   | False    |
| omit_default      | If true, omits Frame's default Cloud Services from the results. | Search Query | Boolean   | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/customers/${customer_id}/cloud_services?active=true"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "active": false,
    "cloud_account_id": "192964173893",
    "cloud_provider_display_name": "AWS",
    "cloud_provider_id": "gateway-prod.2",
    "cloud_provider_name": "amazon",
    "context": "customer",
    "creation_date": "2019-06-11T20:25:33Z",
    "datacenters": [],
    "display_name": "Frame Support AWS Account",
    "external_id": null,
    "gateway": "gateway-prod",
    "id": "gateway-prod.459",
    "is_default": false,
    "is_provider_default": false,
    "name": "Frame Support AWS Account",
    "owner_id": "d3e7d4e0-5ab2-47cf-9f9c-0b02999931e7",
    "properties": {
      "cloud_account_id": "192964173893"
    },
    "status": "ready",
    "supported_datacenter_ids": null,
    "supported_types": ["frame-high"]
  }
]
```

```bash
Status: 200 "OK"
```

</details>



---

### List Customer Elasticity

Returns information on all customer instance elasticity.

<span class="badge badge-get">GET</span> <code>/customers/:customer_id/elasticity</code>


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/customers/${customer_id}/elasticity
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "buffer_servers": 30,
  "max_servers": 250,
  "min_servers": 150
}
```

```bash
Status: 200 OK
```

</details>



---

### List Customer Settings

Returns all customer entity settings.

<span class="badge badge-get">GET</span> <code>/customers/:customer_id/settings</code>


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/customers/${customer_id}/settings"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "authorized_nutanix_personnel": [
    "jason.thompson@nutanix.com",
    "alex.fontaine@nutanix.com",
    "stuart.allen@nutanix.com"
  ],
  "can_frame_account_support_start_session": null,
  "frame_cloud_account_allowed": false,
  "frame_support_admin_access": "full_access",
  "is_frame_support_customer_admin": true,
  "is_generate_session_report_enabled": false,
  "is_light_publish_enabled": false,
  "is_login_banner_enabled": false,
  "is_persistent_desktops_backups_enabled": true,
  "is_terminal_banner_enabled": false,
  "light_publish_settings": {
    "threshold": 10
  },
  "login_banner_settings": null,
  "max_concurrency": 160,
  "max_concurrency_per_account": null,
  "max_monthly_credits_usage": null,
  "max_monthly_credits_usage_description": null,
  "max_utility_pools_per_account": 50,
  "note": null,
  "notification_center_settings": {
    "email_addresses": null,
    "is_send_notification_emails_enabled": null,
    "notify_on_critical": null,
    "notify_on_info": null,
    "notify_on_warning": null
  },
  "terminal_banner_settings": null
}
```

```bash
Status: 200 OK
```

</details>



---

### List Customer Overall Usage

Returns information on all customer entity utilization.

<span class="badge badge-get">GET</span> <code>/customers/:customer_id/usage</code>

#### Request Parameters

| Name                | Description                                                                                                                                         | Param Type   | Data Type           | Required |
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------- | -------- |
| id                  | Your Nutanix Customer ID                                                                                                                            | URL          | String              | True     |
| from_date           | The beginning date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”. | Search Query | ISO 8601 UTC String | False    |
| to_date             | The ending date range for the query. The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”.    | Search Query | ISO 8601 UTC String | False    |
| resolution_type     | Resolution Type: `by_hour`, `by_day`, `by_month`, `by_year`                                                                                         | Search Query | String              | False    |
| server_type         | Filters query based on a specific server ID.                                                                                                        | Search Query | String              | False    |
| pool_id             | Filters query based on provided instance type's pool ID.                                                                                            | Search Query | String              | False    |
| instance_type_id    | Filters the usage by an instance type's “external” ID, e.g. “gateway-prod.3”.                                                                       | Search Query | String              | False    |
| datacenter_id       | Limits the results to a specific Datacenter by ID.                                                                                                  | Search Query | String              | False    |
| skip_if_byo_account | True/False boolean value determining if BYO results should be returned.                                                                             | Search Query | Boolean             | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/customers/${customer_id}/usage?from_date=${from_date}&to_date=${to_date}"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "data": [
    {
      "account": null,
      "account_external_id": "gateway-prod.35917",
      "usage": [
        {
          "datacenter": null,
          "datacenter_id": "gateway-prod.1",
          "hours_used": 1,
          "instance_type": null,
          "instance_type_id": "gateway-prod.3152",
          "server_type": "production",
          "time": 1626454800000
        }
        // ... more usage data
      ]
    }
    // ... more accounts and usage
  ],
  "total": 43533
}
```

```bash
Status: 200 OK
```

</details>



---

### List Customer Disk Volume Usage

Returns information on all customer entity disk volume utilization.

<span class="badge badge-get">GET</span> <code>/customers/:customer_id/disk_volume_usage?from_date=X&to_date=Y</code>

#### Request Parameters

| Name                | Description                                                                                         | Param Type                                                                                                  | Data Type              | Required |
| ------------------- | --------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ---------------------- | -------- |
| customer_id         | Your Nutanix Customer ID.                                                                           | URL                                                                                                         | String                 | True     |
| from_date           | The beginning date range for the query.                                                             | The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”. | YYYY-MM-DD Date string | False    |
| to_date             | The ending date range for the query.                                                                | The date needs to be an ISO 8601 UTC string (with the “Z” suffix). For example: “2021-12-25T23:20:58.128Z”. | YYYY-MM-DD Date string | False    |
| resolution_type     | Resolution Type: `by_hour`, `by_day`, `by_month`, `by_year`                                         | Search Query                                                                                                | String                 | False    |
| server_type         | Server Type: sandbox, production, utility, persistent_desktop_production, persistent_desktop_shadow | Search Query                                                                                                | String                 | False    |
| disk_volume_type_id | Disk Volume Type: all, standard, gp2, io1                                                           | Search Query                                                                                                | String                 | False    |
| datacenter_id       | Limits the results to a specific Datacenter ID number.                                              | Search Query                                                                                                | String                 | False    |
| skip_if_byo_account | True/False boolean value determining if BYO results should be returned.                             | Search Query                                                                                                | Boolean                | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/customers/${customer_id}/disk_volume_usage?from_date=${from_date}&to_date=${to_date}"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "data": [
    {
      "account": null,
      "account_external_id": "gateway-prod.1791",
      "usage": [
        {
          "datacenter": null,
          "datacenter_id": "gateway-prod.3",
          "disk_volume_size_used": 180,
          "disk_volume_type_id": "gp2",
          "hours_used": 36,
          "time": 1625101200000
        }
        // ... more usage data for this account
      ]
    }
    // ... more accounts and their usage
  ],
  "total": 758884
}
```

```bash
Status: 200 OK
```

</details>



---

### List Customer Master Images

Returns information on all customer master images.

<span class="badge badge-get">GET</span> <code>/customers/:customer_id/cloud_services/:external_cloud_service_id/master_images?external_data_center_id=XYZ</code>

#### Request Parameters

| Parameter               | Description                                          | Param Type   | Data Type | Required |
| ----------------------- | ---------------------------------------------------- | ------------ | --------- | -------- |
| external_data_center_id | This ID represents a Frame “external” datacenter ID. | Search Query | String    | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/customers/${customer_id}/cloud_services/${external_cloud_service_id}/master_images?external_data_center_id=${external_data_center_id}"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "description": "Frame Master Image mif:1, v:0, date:2020-01-28 09:30:10",
    "id": "gateway-prod.15474",
    "instance_types": [
      {
        "display_name": "Air 4GB",
        "external_id": "gateway-prod.1",
        "gpu": "None",
        "id": "gateway-prod.1",
        "name": "t2.medium",
        "ram": 4,
        "vcpu": 2
      }
      "machine_image_family": {
        "display_name": "Windows Server 2016 (G4)",
        "id": "gateway-prod.xxx",
        "name": "FrameAWSWindows20126G4"
      },
      "master_image_copy_required": null
    ]
  },
  // ... more master images
]
```

```bash
Status: 200 OK
```

</details>



---

### List Customer User Activity

Returns statistical user activity information for the specified Customer constrained by a date range. Can be ordered by passing a string parameter as well as exclude specified user IDPs.

<span class="badge badge-get">GET</span> <code>/customers/:customer_id/user_activities?from_date=X&to_date=Y</code>

#### Request Parameters

| Name           | Description                                                                                                    | Param Type   | Data Type              | Required |
| -------------- | -------------------------------------------------------------------------------------------------------------- | ------------ | ---------------------- | -------- |
| customer_id    | Your Nutanix Customer ID                                                                                       | URL          | String                 | True     |
| from_date      | The beginning date range for the query.                                                                        | Search Query | YYYY-MM-DD Date string | True     |
| to_date        | The ending date range for the query.                                                                           | Search Query | YYYY-MM-DD Date string | True     |
| order          | Specifies the order of the results. Use “asc” for ascending order, and “desc” for descending order.            | Search Query | String                 | False    |
| order_by       | Specifies the field of which the ordering should occur. For example, “session_start”, “session_duration”, etc. | Search Query | String                 | False    |
| skip_user_idps | User Identity Providers to skip.                                                                               | Search Query | Array (String)         | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/customers/${customer_id}/user_activities?from_date=${from_date}&to_date=${to_date}&skip_user_idps[]=example-okta-admins&skip_user_idps[]=example-okta-dev
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
{
  "data": [
    {
      "access_date": "2022-02-01",
      "access_datetime": "2022-02-01T21:11:00.398870Z",
      "account_id": "0e52b11b-23bf-411e-a070-bc0ea014cbc2",
      "customer_id": "6ba31e38-1735-4274-a58e-6fb8c662e425",
      "organization_id": "bc24563d-375b-49fb-8f15-1682b8bc6deb",
      "user_email": "dontcallme.shirley@example.com",
      "user_first_name": "Shirley",
      "user_id": "20acd3a2-b455-4dca-b22b-520e16079e11",
      "user_idp": "example-okta-workforce",
      "user_last_name": "Dontcallme"
    }
    // ... more User Activities
  ],
  "total": 66866,
  "total_unique": 8133
}
```

```bash
Status: 200 OK
```

</details>

# Infrastructure Endpoints

### List Cloud Providers

Returns a list of available Cloud Providers. These are Frame IaaS cloud providers, such as Amazon, Azure, and Google, using Frame-managed subscriptions.

<span class="badge badge-get">GET</span> <code>/cloud_providers</code>


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/cloud_providers"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "byo_compatible": true,
    "datacenters": null,
    "display_name": "AWS",
    "external_id": "gateway-prod.2",
    "formation_url": null,
    "name": "amazon"
  },
  {
    "byo_compatible": true,
    "datacenters": null,
    "display_name": "Azure",
    "external_id": "gateway-prod.4",
    "formation_url": null,
    "name": "azure"
  },
  {
    "byo_compatible": true,
    "datacenters": null,
    "display_name": "Google",
    "external_id": "gateway-prod.5",
    "formation_url": "https://console.cloud.google.com/cloudshell/editor?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2Fmainframe2%2Fgcp-byo-cloud-shell-deployment.git&cloudshell_git_branch=prod_role_deployment&cloudshell_open_in_editor=deploy.sh",
    "name": "google"
  },
  {
    "byo_compatible": true,
    "datacenters": null,
    "display_name": "Nutanix-AHV",
    "external_id": "gateway-prod.3",
    "formation_url": null,
    "name": "nutanix"
  }
]
```

```bash
Status: 200 "OK"
```

</details>



---

### List Datacenters

Provides a list of datacenters associated with the cloud service along with what Frame Image Families and Instance Types are available in each datacenter.

<span class="badge badge-get">GET</span> <code>/datacenters</code>

#### Request Parameters

| Parameter                  | Description                                                                                                                                                                              | Param Type   | Data Type | Required |
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | --------- | -------- |
| external_cloud_service_id  | Filters results based on the ID of a Cloud Service provider (BYO Infrastructure). If you're not using Frame IaaS and you instead brought your own cloud provider, this is what you want. | Search Query | String    | False    |
| external_cloud_provider_id | Filters results based on the Frame IaaS Cloud Provider ID for AWS, Azure, GCP, or Nutanix.                                                                                               | Search Query | String    | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/datacenters?external_cloud_service_id=gateway-prod.1337""
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "availability_zones": [
      "us-east-1a",
      "us-east-1b",
      "us-east-1c",
      "us-east-1d",
      "us-east-1e",
      "us-east-1f"
    ],
    "bare_metal": true,
    "configured": null,
    "display_name": "Northern Virginia",
    "geo_lat": 39.043611,
    "geo_long": -77.4875,
    "id": "gateway-prod.1",
    "image_families": [],
    "name": "aws-va",
    "region": "us-east-1"
  }
  // ...
]
```

```bash
Status: 200 "OK"
```

</details>



---

### List Image Families

Returns all image families and their supported instance types.

<span class="badge badge-get">GET</span> <code>/image_families</code>

#### Request Parameters

| Parameter           | Description                                                                                  | Param Type   | Data Type | Required |
| ------------------- | -------------------------------------------------------------------------------------------- | ------------ | --------- | -------- |
| cloud_provider_name | Filter results by the Cloud Provider's name, e.g. “amazon”, “azure”, “google”, or “nutanix”. | Search Query | String    | False    |
| byo                 | Determines wether or not to filter by BYO (Bring your own infrastructure) or not.            | Search Query | Boolean   | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/image_families?external_data_center_id=${external_datacenter_id}&cloud_provider_name=amazon"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "display_name": "Windows Server 2016",
    "external_id": "gateway-prod.x",
    "id": "gateway-prod.x",
    "instance_types": [
      {
        "display_name": "Air 4GB",
        "external_id": "gateway-prod.x",
        "gpu": "None",
        "id": "gateway-prod.x",
        "name": "t2.medium",
        "ram": 4,
        "vcpu": 2
      }
    ],
    "master_image_copy_required": false,
    "name": "WindowsServer2016"
  }
  // ...
]
```

```bash
Status: 200 OK
```

</details>



### List Cloud Services

Returns a list of [registered Cloud Service Providers](/books/platform-administrators-guide/page/bring-your-own) configured with Frame.

<span class="badge badge-get">GET</span> <code>/cloud_services</code>

#### Request Parameters

| Name                | Description                                                                                | Param Type   | Data Type | Required |
| ------------------- | ------------------------------------------------------------------------------------------ | ------------ | --------- | -------- |
| organization_id     | Filters results based on a provided Nutanix Organization ID.                               | Search Query | String    | True     |
| name                | Filters results based on a Cloud Service's “name” field.                                   | Search Query | String    | False    |
| cloud_provider_name | Filters results based on the specified cloud provider: amazon, azure, google, or nutanix   | Search Query | String    | False    |
| active              | Filters results by their active status - useful for filtering out inactive cloud services. | Search Query | Boolean   | False    |
| omit_default        | If true, omits Frame's default Cloud Services from the results.                            | Search Query | Boolean   | False    |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/cloud_services"
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "byo_compatible": true,
    "datacenters": null,
    "display_name": "AWS",
    "external_id": "gateway-prod.2",
    "formation_url": null,
    "name": "amazon"
  },
  {
    "byo_compatible": true,
    "datacenters": null,
    "display_name": "Nutanix-AHV",
    "external_id": "gateway-prod.3",
    "formation_url": null,
    "name": "nutanix"
  },
  {
    "byo_compatible": true,
    "datacenters": null,
    "display_name": "Azure",
    "external_id": "gateway-prod.4",
    "formation_url": null,
    "name": "azure"
  },
  {
    "byo_compatible": true,
    "datacenters": null,
    "display_name": "Google",
    "external_id": "gateway-prod.5",
    "formation_url": "https://console.cloud.google.com/cloudshell/editor?cloudshell_git_repo=https://yadda.com/etc/",
    "name": "google"
  }
  // ...
]
```

```bash
Status: 200 "OK"
```

</details>



---

### List Cloud Service VPCs

Returns a list of VPCs and their Subnets for a Cloud Service & Datacenter by ID.

<span class="badge badge-get">GET</span> <code>/cloud_services/:cloud_service_id/vpcs</code>

#### Request Parameters

| Parameter        | Description                                             | Param Type   | Data Type | Required |
| ---------------- | ------------------------------------------------------- | ------------ | --------- | -------- |
| cloud_service_id | ID of the Cloud Services hosting VPCs.                  | Search Query | String    | True     |
| datacenter_id    | ID of the Datacenter that you'd like to list VPCs from. | Search Query | String    | True     |


<details open>
<summary><strong>Request Example</strong></summary>

```bash
curl -X GET \
-H "X-Frame-ClientId: ${client_id}" \
-H "X-Frame-Timestamp: ${timestamp}" \
-H "X-Frame-Signature: ${signature}" \
"https://api.console.nutanix.com/v1/cloud_services
```

</details>

<details>
<summary><strong>Response Example</strong></summary>

```json
[
  {
    "cidr": "10.0.0.0/18",
    "id": "vpc-1d0a7baa5a9a1e71f",
    "name": "prod:v8675309:vpc0",
    "resource_group": null,
    "subnets": [
      {
        "az": "us-east-2c",
        "cidr": "10.0.16.0/21",
        "delegated": null,
        "id": "subnet-01586eaf1f4182ed8",
        "name": "prod:v8675309:sn2",
        "nat_gateway": null,
        "private": false,
        "resource_group": null
      },
      {
        "az": "us-east-2b",
        "cidr": "10.0.8.0/21",
        "delegated": null,
        "id": "subnet-0c1a9ce0dc7c1de1e",
        "name": "prod:v8675309:sn1",
        "nat_gateway": null,
        "private": false,
        "resource_group": null
      },
      {
        "az": "us-east-2a",
        "cidr": "10.0.0.0/21",
        "delegated": null,
        "id": "subnet-07c93b527007eb542",
        "name": "prod:v8675309:sn0",
        "nat_gateway": null,
        "private": false,
        "resource_group": null
      }
    ]
  }
  // ... more VPCs and subnets.
]
```

```bash
Status: 200 "OK"
```

</details>

# Session API

Tokens through SSO / SAML2, Session API

# Acquire Tokens through SSO (SAML2)

Through SAML2 integrations with Frame, you can leverage existing SSO
workflows to retrieve tokens for your users. Here's a general overview 
of what that process looks like:

![](https://docs.difr.com/uploads/images/gallery/2025-10/N4Ksession-api-sso-workflow-diagram.png)

To get started, there are three key items needed when using SSO 
workflows to authenticate your users:

1. You need to build a SSO URL for your SAML2 integrations. *This URL is used to kick-off the authentication process to retrieve a token for your users.*
2. To use the token with our Session API, your web application should expect *and capture* the **token search query parameter** to be present in the URL.
3. 
   A **SAML2 relying party** is required for each domain name (e.g. example.com) you wish provide authenticated redirects to (e.g. `acme.com` or `localhost:3000`).

   :::info

   **Adding relying parties for your SAML2 integrations is currently a manual process**. Please create a [support ticket](/books/dizzion-support/page/contact-support).

   :::


## Building a SSO URL

Using an existing SAML2 integration with Frame, you can construct an
SSO link to authenticate your users and return them to the URI that is
hosting your Frame Session API.

`https://img.frame.nutanix.com/login?account_type=saml2-tutorial-example&return_url=https://example.com/frame-tutorial`

To illustrate, here's a breakdown of the SSO URL:

![](https://docs.difr.com/uploads/images/gallery/2025-10/RGNsso-breakdown.png)

These three URL components tell us where to send users to login, and
where to redirect their browser to (with a token) after they've
successfully signed in.

| URL Search Query Param | Description                                                                                                                                                                                    |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Base Login URL         | This URL points to the Frame environment you'd like to authenticate with. For most Frame customers, this will be `https://img.frame.nutanix.com/login?`                                        |
| `account_type`         | This represents your SAML2 integration name. This tells our system where to redirect the user to login. This value is case-sensitive and must match the **exact name** of your SAML2 provider. |
| `return_url`           | The URL you'd like to redirect your users back to after authenticating. When redirecting after a successful login, this URL is accompanied by a JWT in the URL as a search query parameter.    |

## Capturing the token from the Return URL

When successfully authenticating with a SSO workflow, the browser will be redirected to the *return_url* with a token *search query parameter*.

For example, if a user successfully logs in using this SSO URL:

`https://img.frame.nutanix.com/login?account_type=acme-saml2&return_url=https://example.com/frame-example`

Frame will redirect the user's browser back to the `return_url` with a token (JWT) appended as a **search query parameter**:

`https://example.com/frame-example?token=xyz`


Using Javascript, you can easily capture the value for use with the
Session API like this:

```javascript
 // assign URL Search params to `params`
 const params = new URLSearchParams(document.location.search);

 // At this point, you can use the token with the Frame Session API
 const token = params.get('token');

 // Session API Parameters
 const terminalOptions = {
   serviceUrl: "https://cpanel-backend-prod.frame.nutanix.com/api/graphql",
   terminalConfigId: "38cb4f1c-a019-4163-9f1d-168b59fb5062.0f3a542b-884e-4edc-aa5f-65380597061",
   token: token
 };

 let terminal = await createInstance(terminalOptions);

 // Optional: you can store the token somewhere for re-use, such as localStorage.
 localStorage.token = token

 // Optional: Clear the token from the URL
 params.delete('token');
 window.history.replaceState({}, document.title, document.location.pathname + params.toString());
```

# Session API

The Frame Session API lets you seamlessly integrate virtual desktops and
applications into your own custom web-based workflows. Using JavaScript,
the Session API gives you control of the Frame Terminal, an HTML5 client
for remotely accessing applications hosted on your Frame account in the
cloud. With the Frame Session API, you can stop or resume application
sessions, query application information, and much more.

### Session API Prerequisites

- An active Frame account with published applications and a configured Launchpad.
- An active [**SAML2**](/books/platform-administrators-guide/page/general-saml2-integration) or a [**Secure Anonymous Token**](/books/platform-administrators-guide/page/secure-anonymous-tokens) provider with roles and permissions configured (for session authentication).
- [Nodejs](https://nodejs.org/) and **npm**.
- **A web application bundler** like
  [Webpack](https://webpack.js.org/), 
  [Vite](https://vitejs.dev/), or 
  [Parcel](https://parceljs.org/) to bundle
  Frame's Session API for use in a browser.
- **Terminal Configuration ID**. This is a unique ID that represents
  which Launchpad and resource pool you would like Terminal to launch
  sessions from.
- **Application ID**. Used to start Specific apps. Application IDs are
  not used with Desktop Launchpads.

## Required Session API Components

The following components are required for the Frame Session API:

- Service URL (Frame environment endpoint)
- Launchpad Terminal Configuration ID
- Application ID (application Launchpads only)
- Authentication token

To obtain these components, navigate to the Dashboard of the account you 
wish to use with the Session API. Click **Launchpads** on the left menu. 
Click on the ellipsis in the upper right corner of your desired Launchpad 
select **Session API Integration**.

  ![](https://docs.difr.com/uploads/images/gallery/2025-10/t5ksession-api-info-1.png)

A new window will appear providing you with the service URL, a list of
Terminal configuration IDs for each enabled instance type on this
Launchpad, and Application IDs for every application on the Launchpad.
You can copy all required information by clicking on the copy icon
listed to the right of each ID.

  ![](https://docs.difr.com/uploads/images/gallery/2025-10/lktsession-api-info-2.png)

Sessions require a valid authentication token provided by Frame's
identity services. There are **two** different methods to obtain these
tokens:

- [Secure Anonymous Token (SAT) API](/books/platform-administrators-guide/page/secure-anonymous-tokens)

- [Single Sign-On (SSO)](/books/developers-guide/page/acquire-tokens-through-sso-saml2)

The **SSO** workflow involves sending a user to a Single Sign-On (SSO)
URL which triggers multiple SAML2 redirects to sign the user in to their
IdP. Once the user is authenticated, the user's browser will be
redirected to a specified URL with the token appended as a URL search
query parameter.

The **SAT** workflow involves a user visiting a self-hosted website.
When receiving the request, the web server can use our SAT API to
retrieve a token for that user. After the token is instantly retrieved,
the page can be loaded, passing the token to the user's browser.

## Installation

First, you will need to install the Frame Terminal package. Once 
installed, we recommend using a [web application bundler](#session-api-prerequisites) 
to bundle your JavaScript app for browsers for the modern web. 
To get started, run the following command from your command line:

```bash
npm install @fra.me/terminal-factory
```

This package contains a factory method, which builds a Frame Terminal
instance based on account-specific parameters that are passed into it.
With these account parameters, the factory will download the required
components to specification, fetch all the assets from our CDN, and
create an instance of the Frame Terminal. You will automatically receive
any updates, features, and improvements without needing to update the
npm package with this factory module.

## Instantiate a Terminal Instance

The Session API requires the following parameters to instantiate a Terminal
instance:

| Parameter            | Description                                                                                                                                                                                                                                  |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **serviceUrl**       | Indicates which Frame environment you're streaming apps from. This value is almost always going to be `https://cpanel-backend-prod.frame.nutanix.com/api/graphql`                                                                            |
| **terminalConfigId** | A unique ID that represents which Launchpad and VM resource pool you would like to use the API to stream sessions from.                                                                                                                      |
| Auth Token (**JWT**) | A JSON Web Token acquired through Frame authentication workflows (via [SAML2 integrations](/books/platform-administrators-guide/page/general-saml2-integration) or a [Secure Anonymous Token Provider](/books/platform-administrators-guide/page/secure-anonymous-tokens).) |

Once you have the necessary information to create a Terminal instance
and start sessions, you can include the Frame Session API in your code.
Then, use the `createInstance` method along with an `Async/Await` function 
to pass in an object specifying the 3 key attributes above.

```javascript

let terminal; // declare a variable for a Terminal instance.

const loadFrame = async () => {

  // Session API Parameters
  const terminalOptions = {
    serviceUrl: "https://cpanel-backend-prod.frame.nutanix.com/api/graphql",
    terminalConfigId: "38cb4f1c-a019-4163-9f1d-168b59fb5062.0f3a542b-884e-4edc-aa5f-65380597061",
    token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
  };

  // Create a Terminal instance and bind it to the `terminal` variable.
  try {
    terminal = await createInstance(terminalOptions);
    // more code...
  } catch (e) {
    // handle error
  }
}
```

If your configuration options were accepted and the token is valid,
`terminal` can be used to start sessions, pass custom data to the remote 
VM, etc.

## Session Workflow Events (Terminal Events){#terminal-events}

During the lifetime of a Session API Terminal instance, various events will be triggered so that the parent page is informed about Terminal changes. If you want to register a handler for a specific event, you should use the bind function:

```javascript
terminal.bind("someEventName", function(event) {
  console.log("Event has been thrown: " + event.code);
});
```

**Session API Terminal Events**

| Event                              | Description                                                                                             |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------- |
| TerminalEvent.SESSION_STARTING     | Triggered when a session is starting.                                                                   |
| TerminalEvent.SESSION_STARTED      | Triggered when the session start process has completed.                                                 |
| TerminalEvent.SESSION_RESUMING     | Triggered when a session begins the resume process.                                                     |
| TerminalEvent.SESSION_RESUMED      | Triggered when a session completes the resume process. Triggered only when the first frame is rendered. |
| TerminalEvent.SESSION_CLOSING      | Triggered when a session begins the close process.                                                      |
| TerminalEvent.SESSION_CLOSED       | Triggered when a session has finished the close process.                                                |
| TerminalEvent.SESSION_DISCONNECTED | Triggered when a session has been disconnected (not closed).                                            |
| TerminalEvent.SESSION_STATISTICS   | Triggered each time we calculate the session's performance metrics.                                     |
| TerminalEvent.USER_INACTIVE        | Triggered when a user is considered inactive (no input received over a specified duration).             |

For example, the syntax for listening for the `TerminalEvent.SESSION_STARTING` event would be:

```javascript
terminal.bind(TerminalEvent.SESSION_STARTING, function(event) {
  console.log("Event has been thrown: " + event.code);
});
```

<div class="callout callout-info">
Events must be bound **before starting or resuming a session**.
</div>
## Start Sessions


Starting a session is relatively straightforward. You can start two types of sessions – Application and Desktop sessions.

Starting a Desktop session:

```javascript
await terminal.start();
```

Starting an Application session is very similar but the start method requires an object with an `appId` parameter.

```javascript
await terminal.start({ appId: "3cb37b52-34af-4676-90d6-6b104b87061b" });
```

### Pass data into the session with userData{#userdata}

When invoking start(), you can optionally pass custom data via a userData object property.

For example, to start a desktop-based session with additional data:
Here's another example, starting an app-based session with additional
data:

```javascript
const sessionData = { userData: "any data you'd like to pass into the session" };
await terminal.start(sessionData);
```

Here's another example with a JSON object as a string:

```javascript
const exampleData = `{"user": "John Smith","user_id": "1588383008","token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}`
await terminal.start( { appId: "xyz", userData: exampleData } );
```

### Retrieve userData from the remote system

When *userData* is supplied at the start of a session, it can be 
found in the remote system as an environmental variable named 
`FRAME_USER_DATA`.

Example in Command Prompt:

  ![](https://docs.difr.com/uploads/images/gallery/2025-10/ERXsession-api-userdata-env-cmd.png)

Example in PowerShell:

```powershell
Get-ChildItem Env:FRAME_USER_DATA | Format-Table -Wrap -AutoSize
```

  ![](https://docs.difr.com/uploads/images/gallery/2025-10/hSssession-api-userdata-env-powershell.png)


You can use this userData parameter to pass any information you'd like
into the remote system. Then, use scripts/software on the remote system
to access and parse those variables.

<div class="callout callout-info">
The *userData* parameter can only contain a single string within 10,000
characters.
</div>

## Resume Sessions

If a user disconnects from a session (e.g. timed out, manually disconnected, 
or refreshed their page) and would like to resume their session, all you 
need is their active session ID. With the session ID, you can resume a 
session as follows:

```javascript
const session = await terminal.getOpenSession();
if (session) {
  await terminal.resume(session.id);
}
```

## Error Handling

Handling Session API errors is rather simple using `try/catch` blocks 
with `async/await`. When an error is caught, you must have access to 
the error `name`, `message`, and `stack` attributes.

Here is an example of catching an invalid or expired auth token:

```javascript
const loadFrame = async () => {

  // Session API Parameters with an expired token
  const terminalOptions = {
    serviceUrl: "https://cpanel-backend-prod.frame.nutanix.com/api/graphql",
    terminalConfigId: "38cb4f1c-a019-4163-9f1d-168b59fb5062.0f3a542b-884e-4edc-aa5f-65380597061",
    token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
  };

  try {
    terminal = await createInstance(terminalOptions);
    // ..
  } catch (err) {
    console.error(err.message); // Network error: Response not successful: Received status code 401
  }

}
```

<div class="callout callout-info">
Try/catch blocks will only catch errors "bubbled" up from 
**asynchronous** calls. For example, you must call async methods like
`await terminal.start()` instead of `terminal.start()`.
</div>

### Error Codes

**Frame Session API Terminal Error Codes**

| Code | Name                                  | Description                                                                                                                                         |
| ---- | ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| 5000 | USER_ABORTED_CONNECTION               | User-initiated disconnect from the network connection.                                                                                              |
| 5001 | CONNECTION_ABORTED                    | The network connection was lost.                                                                                                                    |
| 5002 | CONNECTION_LOST                       | Network was disconnected.                                                                                                                           |
| 5100 | CONFIG_VALIDATION_ERROR               | Terminal configuration parameters are not valid.                                                                                                    |
| 5101 | TERMINAL_LOAD_FAILED                  | The Frame Terminal assets failed to load from our CDN.                                                                                              |
| 5102 | TOKEN_MISSING                         | No token provided.                                                                                                                                  |
| 5110 | TERMINAL_ACTION_INVALID_STATE         | Invalid Terminal state for the action requested.                                                                                                    |
| 5111 | PLAYER_ACTION_INVALID_STATE           | Invalid Player state for the action requested.                                                                                                      |
| 5200 | PLAYER_START_CANCELED                 | The start request for the session has been canceled.                                                                                                |
| 5202 | VIDEO_DECODERS_FAILED                 | Video decoder failed.                                                                                                                               |
| 5203 | USER_BLOCKED_AUDIO                    | Indicates a problem accessing Audio in the browser.                                                                                                 |
| 5250 | FILE_UPLOAD_CANCELED                  | File transfer upload canceled.                                                                                                                      |
| 5251 | FILE_UPLOAD_FAILED                    | File transfer upload failed.                                                                                                                        |
| 5300 | APPLICATION_START_FAILED              | The application failed to start. Please check the application and session logs for further details.                                                 |
| 5301 | APPLICATION_CLOSE_FAILED              | Could not close the application properly                                                                                                            |
| 5302 | APPLICATION_NOT_FOUND                 | The appId provided is invalid.                                                                                                                      |
| 5303 | APPLICATION_START_FORBIDDEN_PARAMETER | Event when an appId is provided for a desktop-based Terminal Configuration ID.                                                                      |
| 5304 | APPLICATION_ID_PARAMETER_MISSING      | An appId is wasn't provided for an application-based Terminal Configuration ID.                                                                     |
| 5400 | SESSION_REQUEST_ACTIVE                | Indicates a session start session request has already been initialized for that token and Launchpad configuration.                                  |
| 5401 | SESSION_REQUEST_ALREADY_OPEN          | Indicates that a session resume request was called for a token/user, but a session request is already in progress for another session.              |
| 5402 | SESSION_REQUEST_ABORTED               | Session request aborted.                                                                                                                            |
| 5403 | SESSION_RESUME_MISSING_PARAMETER      | A valid session ID is missing when calling terminal.resume().                                                                                       |
| 5404 | SESSION_IN_INVALID_STATE              | A previous session is still closing or there is no available capacity for this account/region. If this persists, please contact your Administrator. |
| 5405 | NO_ACTIVE_SESSION                     | An unexpected error occurred causing the active session to close abruptly.                                                                          |
| 5406 | DOMAIN_JOIN_ERROR                     | An error occurred when attempting to join a domain.                                                                                                 |
| 5407 | USER_CANCELED_DOMAIN_JOIN             | Triggered if the end-user's browser was reloaded or closed during a domain joining phase.                                                           |
| 5900 | INTERNAL_ERROR                        | Internal Error. Please contact Frame Support for more info.                                                                                         |
| 5901 | UNEXPECTED_SERVICE_ERROR              | An unexpected error was received when communicating with Frame Services.                                                                            |
| 5902 | UNKNOWN_INVALID_PARAMS                | Unknown or Invalid Parameters.                                                                                                                      |
| 5903 | UNKNOWN_INVALID_STATE                 | Unknown or Invalid State.                                                                                                                           |
| 5904 | CONTROLLER_ALREADY_DESTROYED          | Internal Error. Please contact Frame Support for more info.                                                                                         |
| 5905 | INTERNAL_RPC_ERROR                    | Internal Error. Please contact Frame Support for more info.                                                                                         |
| 5906 | RPC_ERROR                             | RPC Error.                                                                                                                                          |
| 5907 | WEB_GL_ERROR                          | An error trying to access WebGL. Please check to ensure that the browser and device are WebGL capable.                                              |

## Session API Reference

This section outlines each of the methods available for creating and
interacting with the Frame Session Terminal instance. This reference
describes the methods and object types using Typescript type
definitions.

### createInstance()

A terminal instance can be generated using the factory function 
`createInstance`. All necessary configuration parameters need to be 
passed via a `TerminalLocalConfig` object. This is an asynchronous 
function that will resolve with a promise once the Terminal instance
 has been constructed.

**TerminalLocalConfig** type declaration:
```javascript
TerminalLocalConfig = {
  serviceUrl: string;
  token: string;
  terminalConfigId: string;
}
```

Invoking *createInstance* will return an instance of the **Terminal**
class as below:

```javascript
class Terminal = {
  destroy(): void;
  bind(eventName: string, listener: Function): void;
  unbind(eventName: string, listener: Function): void;
  once(eventName: string, listener: Function): void;
  start(sessionStartConfig: object): Promise<Session>;
  stop(): Promise<void>;
  resume(sessionId: string): Promise<Session>;
  disconnect(): Promise<void>;
  getState(): TerminalState;
  getOpenSession: Promise<Session>;
}
```

### bind()

```javascript
bind(eventName: string, listener: Function): void;
```

Used to attach a listener to a Terminal event. Once we trigger an event
internally, all registered listeners will be invoked. An example:

  ```javascript
  terminal.bind(TerminalEvent.SESSION_STARTED, () => console.log('started!'));
  ```

### unbind()

```javascript
unbind(eventName: string, listener: Function): void;
```

Performs the opposite action of bind. Unbind removes a registered
handler for a particular event.

### once()

```javascript
once(eventName: string, listener: Function): void;
```

Performs the same action as `bind`, but
the handler is automatically unbound once an event is thrown. It is
designed for situations requiring only the first occurrence of some
event (you wish to listen only *once* for an event).

### start()

```javascript
start(options?: sessionStartConfig): Promise<Session>;
```

**sessionStartConfig** type declaration:

```javascript
sessionStartConfig = {
  appId?: string,
  userData?: string,
};
```

Invoking **Start()** initiates the session stream for the user. This
method takes an optional object as an argument that can supply an
**appId** and/or [[userData]](#userdata). Invoking *Start()* with an 
appId will start a session in "application mode" and then start the 
provided app. Otherwise, the terminal will start a default "desktop 
mode" session. Invoking this method should return a promise which 
will be resolved as a *Session* object once the user can see the 
session video stream.

**Session** type declaration:

```javascript
type Session = {
  id: string;
  state: SessionState;
  isResumed: boolean;
}
```

### stop()

```javascript
stop(): Promise<void>;
```

Stops the current session, both on the backend and locally. For example,
if a user can see the stream and you invoke `stop`, it will close the 
session and destroy the iframe.

### resume()

```javascript
resume(sessionId: string): Promise<Session>;
```

If you have a session which is running (for example, a user disconnected
or has reloaded a page during an active session), you can "re-attach" to
that session via this method. All that's required is a valid session ID
as a string.

### disconnect()

```javascript
disconnect(): Promise<void>;
```

`Disconnect` should be invoked only when the user is in the session. Once 
called, the Session API will shut down the stream and return the user to 
the host page; it will not close the session -- it will remain active on 
the backend, ready for a user to connect until a configured timeout is 
reached.

### getOpenSession()

```javascript
getOpenSession(): Promise<Session>;
```

Returns an object of `Session` type for
the current session.

### getState()

```javascript
getState(): TerminalState;
```
Returns the current state of a Terminal instance.

Terminal states:
```javascript
TerminalState = [
  READY = 'ready',
  RUNNING = 'running',
  STARTING = 'starting',
  STOPPING = 'stopping'
]
```

### setToken()

```javascript
setToken(token: string): Promise<void>;
```

When invoked, this method sets a user auth token in the Terminal
instance. This is used to replace an old/expired token with a new one.

### destroy()

```javascript
destroy(): void;
```

This function behaves as a "destructor" and will destroy the Terminal
at any point in its life cycle. For example, if a session is running and
you invoke `destroy`, it will destroy the iframe and the entire internal 
Terminal state. After destruction, that Terminal API instance cannot 
be used. `Destroy` should be used in the cleanup process of the parent project 
(e.g. during unmount of components/elements).

### startApplication()

```javascript
startApplication(appId: string): Promise<void>;
```

When invoked, this method starts an application that was onboarded. This only works for onboarded applications
and not for applications that were added to the Frame Taskbar via App Mode 2.0 server override configurations

### focusApplication()

```javascript
focusApplication(appId: string): Promise<void>;
```

When invoked, this method focuses an application that was already started (Manually via the Frame Taskbar, or using startApplication()). 
Focusing an application is the functionally the same and bringing a window forward in windows. If app1 is in the front and focused, you
can focus app2 in the background and this method will bring app2 in front of app1 and focus on app2 (Mouse and keyboard events will go to app2).
This only works for onboarded applications that have an associated AppID

<div class="callout callout-warning">
focusApplication() only works in the original legacy App Mode (Pre App Mode 2.0). Legacy App Mode will eventually be deprecated and this feature will no longer work once App Mode 2.0 becomes standard
</div>

## Additional Information

### Decoding a JWT in Javascript

You can decode the token's data easily to gather values and check expiration dates, etc.

```javascript
const decodedToken = JSON.parse(atob(token.split('.')[1]))
```

The JWT payload references data such as the user's first name, last
name, email address, token expiration date, not valid before date, etc.

**JWT Data Attributes**

| Attribute | Description                                                                           |
| --------- | ------------------------------------------------------------------------------------- |
| em        | email address                                                                         |
| fn        | first name                                                                            |
| ln        | last name                                                                             |
| exp       | expiration date (seconds since Unix epoch)                                            |
| nbf       | not-valid-before date (seconds since Unix epoch)                                      |
| ap        | Auth provider, this value represents the auth integration name configured by an Admin |
| aud       | audience, his represents the Frame environment the token is for                       |
| sub       | subject, this represents a unique user ID the token is for                            |

### Glossary of Terms
| Term                 | Description                                                                                                                                           |
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| Session              | A session represents the total duration a remote system is in use by a user, from start to finish.                                                    |
| Terminal             | “Terminal” represents the instance of a session player delivered via the browser.                                                                     |
| Token                | A string (in JWT format) provided by Frame Services for authenticating Frame Sessions.                                                                |
| JWT                  | JSON Web Tokens are an open, industry standard method for representing claims securely between two parties.                                           |
| SSO                  | Single sign-on (SSO) is an authentication process that allows a user to access multiple applications with one set of login credentials.               |
| SAT                  | Secure Anonymous Token. For more information, see our [Secure Anonymous Token documentation](/books/platform-administrators-guide/page/secure-anonymous-tokens). |
| Environment Variable | An environment variable is a dynamic value that the operating system and other software can use to determine information specific to that system.     |