API Documentation

API Documentation

Robopack v1 API documentation


Overview

Robopack provides versioned API access. This document describes the v1 API which is designed to be static even as features are added to Robopack. The v1 API supports a limited subset of Robopack functionality and has been simplified for ease of use.

The primary features of the v1 API relates to:

·       Searching for and retrieving information on repository applications.

·       Importing repository applications to the organization’s profile.

·       Retrieving information on and downloading imported repository applications.

Authentication

Accessing the v1 API requires the use of an API key. API keys can be created in Robopack under Settings -> API Integration. No roles are required to be assigned to the API key.

Note: When an API key is created, you need to copy and save the generated key immediately as it cannot later be recalled. If you lose the key, you can generate a new key to use instead.

The endpoint for the v1 API is:

·       Production: https://api.robopack.com/v1

·       Test: https://api-test.robopack.com/v1

To authenticate a request to the API, add a HTTP Header with the name X-API-Key and the value being the API key.

Paging

Endpoints that support paging takes a common set of optional parameters:

·       ItemsPerPage: The maximum number of results returned.

·       Page: The page number (0-indexed) of results to return.

·       SortBy: The property to use for sorting the results.

·       SortDesc: If set to true, will sort results in descending order.

A response from an endpoint that supports paging will return paging information in the header X-Pagination. This information is stored as JSON and contains information on the total number of results.

Example:

{

    "totalCount": 12512,

    "itemsPerPage": 50,

    "page": 1,

    "totalPages": 251,

    "hasNext": true,

    "hasPrevious": false

}

 

Repository application endpoints

Search applications

URI: /v1/app, method: GET

Supports paging.

Searches the repository database for apps that can be imported.

Returns an array of objects representing the matched applications with the following schema (not exclusive):

·       id: Unique identifier for the application.

·       publisherName: Name of the application publisher.

·       name: Name of the application.

·       storeApp: Is true if the application is from the Microsoft Store.

·       tags: An array of strings that represent search tags for the application.

·       lastUpdated: Timestamp for the latest time the application was updated.

·       version: Latest version of the application that is available. For Microsoft Store apps that have not been imported before this value can be empty.

·       description: Description of the application.

·       verified: Signifies if the application is on the Robopack list of verified applications that are guaranteed to work.

·       userScope and machineScope: Indicates if the application is available as a user-scope package, a machine-scope package, or both. Use these values to determine what scope of package to import.

Additionally, if the parameter logo is set to true an additional property exists:

·       logoData: Base-64 encoded data containing a PNG bitmap image that represents a logo for the application.

Example:

GET /v1/app?search=Firefox&logo=true

Example result:

[

    {

        "id": "a9b54f1b-442b-40bd-480f-08dba7f7f041",

        "publisherId": "7d5eda2c-57a7-47de-1b9f-08dba7f7f03d",

        "publisherName": "Mozilla",

        "name": "Mozilla Firefox",

        "identifier": "9NZVDKPMR9RD",

        "flags": 5,

        "storeApp": true,

        "verified": true,

        "logoData": "iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYA...",

        "tags": [],

        "lastUpdated": "2023-09-28T02:58:45.027712+00:00",

        "version": "118.0.0.0",

        "description": "Firefox Browser: fast, private & safe web browser\r\n\r\..."

    }, {

        "id": "92449a59-f695-4b90-4d92-08dbaee8a5cf",

        "publisherId": "7d5eda2c-57a7-47de-1b9f-08dba7f7f03d",

        "publisherName": "Mozilla",

        "name": "Mozilla Firefox",

        "identifier": "Mozilla.Firefox",

        "flags": 19,

        "storeApp": false,

        "logoData": "iVBORw0KGgoAAAANSUhEUgAAAQAAAAEA...",

        "tags": [

            "browser",

            "cross-platform",

            "foss",

            "gecko",

            "quantum",

            "spidermonkey",

            "web",

            "web-browser"

        ],

        "lastUpdated": "2023-11-21T15:09:00-08:00",

        "version": "120.0",

        "description": "Mozilla Firefox is free and open source software, built by a community of thousands from all over the world.",

        "userScope": false,

        "machineScope": true

    }

]

 

Get showcased applications

URI: /v1/app/showcase, method: GET

Supports paging.

Gets showcased repository applications.

Returns an array of objects representing the applications that have been marked as showcased by Robopack – these are the most used applications and should be what are displayed by default to users who may want to import a new package.

The results from this endpoint are identical to those from /v1/app and it also supports the logo parameter.

 

Get verified applications

URI: /v1/app/verified, method: GET

Supports paging.

Gets verified repository applications.

Returns an array of objects representing the applications that have been marked as verified by Robopack – these have been thoroughly tested and are guaranteed to be working.

The results from this endpoint are identical to those from /v1/app and it also supports the logo parameter.

 

Get application information

URI: /v1/app/{appId}, method: GET

Gets information on a specific repository application, including available versions for the application.

The result from this endpoint is identical to those from /v1/app but only a single result is returned, and the following additional properties are available:

versions: A list of available versions for the application. Properties for each version include:

·       id: Unique identifier for the application version. Used when importing if a specific version is required

·       version: Version number for the application version

·       timestamp: Time the version was added

Example:

GET /v1/app/a9b54f1b-442b-40bd-480f-08dba7f7f041

{

        "id": "a9b54f1b-442b-40bd-480f-08dba7f7f041",

        "publisherId": "7d5eda2c-57a7-47de-1b9f-08dba7f7f03d",

        "publisherName": "Mozilla",

        "name": "Mozilla Firefox",

        "versions": [

            {

            "id": "07530ace-b6bb-4aa2-8916-08dc1f545595",

            "timestamp": "2023-11-21T15:09:00-08:00",

            "version": "120.0",

            "shortDescription": "Firefox Browser: fast, private & safe web browser\r\n\r\...",

            "userScope": false,

            "machineScope": true

            }

        ],

        … [+ other properties from app list]

}

 

 

Import application

URI: /v1/app/import/{appId}, method: POST

The appId identifier specifies what repository application should be imported. The request will start the operation to import the specified application in the newest version (if the versionId parameter is not specified) or the specified version (if the versionId parameter is specified).

The return value is the ID of the imported package, which can be used to query the import progress and download the package.

The scope parameter specifies the scope of the app to be imported, possible values are user and machine. Not all apps support both, check the return from /v1/app before deciding which to use.

If the scope parameter is not specified, machine scope is assumed.

The versionId parameter specifies the ID of a particular version of an application, indicating that this version should be imported rather than the newest version.

Example:

POST /v1/app/import/a9b54f1b-442b-40bd-480f-08dba7f7f041?scope=user

POST /v1/app/import/a9b54f1b-442b-40bd-480f-08dba7f7f041?scope=machine&versionId= e06fada3-ca55-4ddb-2f27-08dc1f545595

Example result:

1aed036c-d46a-41ae-9c58-08dbf7740142

 

Package endpoints

Get all packages

URI: /v1/package, method: GET

Supports paging.

Gets information on all packages in the account.

Example:

GET /v1/package

Example result:

Same as Get package information below except the importInfo property is not populated.

 

Get package information

URI: /v1/package/{id}, method: GET

Gets information on a specific package.

Example:

GET /v1/package/1aed036c-d46a-41ae-9c58-08dbf7740142

Example result:

{

    "id": "1aed036c-d46a-41ae-9c58-08dbf7740142",

    "appId": "a9b54f1b-442b-40bd-480f-08dba7f7f041",

    "created": "2023-12-07T23:29:41.345374+01:00",

    "productName": "Mozilla Firefox",

    "manufacturer": "Mozilla",

    "productVersion": "120.0",

    "state": "Completed",

    "downloadAvailable": true,

    "newVersionAvailable": true,

    "latestVersion": "121.0",

    "userScope": false,

    "machineScope": true,

    "fileName": "Mozilla Firefox 120.0.psadt.zip",

    "size": 116337499,

    "importInfo": {

        "app": {

            "publisher": "Mozilla",

            "name": "Mozilla Firefox",

            "description": null,

            "appVersion": "120.0",

            "categories": null,

            "isFeatured": false,

            "informationUrl": "https://www.mozilla.org/en-US/firefox/",

            "privacyUrl": "https://www.mozilla.org/en-US/privacy/websites",

            "developer": null,

            "owner": null,

            "notes": null

        },

        "program": {

            "installCommand": "Deploy-Application.exe -DeployMode Silent",

            "uninstallCommand": "Deploy-Application.exe Uninstall -DeployMode -Silent",

            "userContext": false,

            "restartBehavior": 0,

            "returnCodes": [{

                    "code": 0,

                    "type": 1

                }

            ],

            "processorArchitectures": 0,

            "diskSpaceRequired": null,

            "memoryRequired": null,

            "minimumCpuCount": null,

            "minimumCpuMhz": null

        },

        "detectionRules": [{

                "productCode": "{BC74D7B3-F268-3A05-926D-EBBE9E1340DC}",

                "matchVersion": true,

                "is32Bit": false,

                "operator": 1,

                "targetVersion": "120.0",

                "type": "MSI"

            }

        ]

    },

    "issues": [

        {

            "type": "InstallerRequiresInternetAccess",

            "level": "Info",

            "text": null

        },

        {

            "type": "InstallFailed",

            "level": "Fatal",

            "text": "Exit code 1168"

        }

    ],

    "errorDetails": {

        "type": "InstallFailed",

        "level": "Fatal",

        "text": "Exit code 1168"

    },

}

 

The state property indicates if the package import operation is in progress, has succeeded, or has failed. It has the following possible values (any other value should be considered an error):

·       Pending

·       Running

·       Completed

·       Error

The issues property contains a list of issues for the package, which can be both informational and indicate errors. If a fatal error has occurred, it will be present in the errorDetails property.

Some other properties of note:

·       downloadAvailable: indicates if the import is done, and the associated file is available for download.

·       newVersionAvailable: indicates if there is a newer version of the app available for import.

·       latestVersion: indicates the version of the newest version of the app.

·       size: Size of the package source in bytes. This will not be identical to the size of the downloaded package file but will be close to it.

·       fileName: Suggested file name for the downloaded package file.

·       userScope and machineScope: Indicates the scope of the package. One and only one of these is true for a package, unlike an application that may have both.

Importinfo contains information on how the package should be imported to deployment solutions:

·       app: basic information identifying the package.

·       program: information on how to install the package and requirements.

·       detectionRules: list of rules to be used for detecting the installation of the package.

 

Download package

URI: /v1/package/{id}/download?format={format}&noScriptWrap={value}&templateId={id}, method: GET

Downloads the contents of a package in a specified format.

The format parameter specifies in what format the package should be downloaded.

Available options are:

·       IntuneWin: The package, wrapped in an installation script, as an IntuneWin archive.

·       PSADT: The package, wrapped in an installation script, as a ZIP archive.

·       SourceFiles: The source files used to create the package.

·       AppV: The package as App-V (only if originally created as such)

In addition, the following options are available for MSIX packages:

·       MSIX: Downloads the package as an MSIX package.

·       CIM: The MSIX package expanded to a CimFS share packaged in a ZIP archive.

·       VHD: The MSIX package expanded to a VHD virtual disk.

·       VHDX: The MSIX package expanded to a VHDX virtual disk.

The noScriptWrap parameter should be set to true if you wish to download a package as IntuneWin without wrapping it in an installation script.

The optional templateId parameter can be used to indicate a specific configuration template to be used for the script used for wrapping the package. If not specified, the default template will be used.

Example:

GET /v1/package/1aed036c-d46a-41ae-9c58-08dbf7740142/download?format=IntuneWin&noScriptWrap=true

 

Package creation endpoints

Create package

URI: /v1/package/create, method: POST

Creates a new blank package, after which content can be uploaded for it.

The body of the request should be a JSON object, content type application/json as follows:

{

    "name": "7-Zip 23.01",

    "sourceType": "msi",

    "publisher": "7-Zip",

    "version": "23.01",

    "installCommand": "msiexec /i 7zip.7zip.23.01.X64.msi /qn",

    "uninstallCommand": "msiexec /x {23170F69-40C1-2702-2301-000001000000} /qn",

    "userContext": false,

    "logoData": "iVBORw0KGgoAAAANSUhEUg…",

    "detectionRules": [

        {

            "type": "msi",

            "productCode": "{23170F69-40C1-2702-2301-000001000000}"

        }

    ]

}

 

 

Properties:

·       name: Required in all cases. Name of the package as displayed.

·       sourceType: Type of source package. Possible values are: msi, zip and exe. zip should be specified when a single ZIP archive is uploaded as opposed to multiple files or a single installer.

·       logoData: Optional; can contain a Base64-encoded PNG image to use for representing the package. If not specified, Robopack will automatically extract a logo from the package content.

The other properties are optional but importing the package to Intune through Robopack, or wrapping the package in an installation script will not work without installation commands and detection rules.

If the package is an MSI package, detection rule and installation commands are automatically created after the package content has been uploaded.

Returns an object representing the created package, identical to the result from /v1/package/{id}

Example result:

{

    "id": "076464a7-926a-4970-7e2c-08dc3934024c",

    "appId": null,

    "created": "2024-02-29T15:55:01.8852841+01:00",

    "productName": "7zip.7zip.23.01.X64.msi",

    "manufacturer": "7zip.7zip.23.01.X64.msi",

    "productVersion": "",

    "state": "WaitingForContent",

    "fullProductName": "7zip.7zip.23.01.X64.msi",

    "fileName": "7zip.7zip.23.01.X64.msi.psadt.zip",

    "size": 1933312,

    "downloadAvailable": false,

    "newVersionAvailable": false,

    "importInfo": null,

    "latestVersion": null,

    "userScope": false,

    "machineScope": true

}

 

Upload package content

URI: /v1/package/content/{id}?index={x}&size={x}&chunk={x}&offset={x}, method: POST

Uploads content for a package after it has been created and is the WaitingForContent state.

Parameters:

·       id: ID of the package to upload content for.

·       index: 0-based index of the file to be uploaded, as multiple files can be uploaded for one package.

·       size: Size in bytes of the chunk of data being uploaded.

An entire file can be uploaded in one request, but for large files chunked upload is recommended by adding the following parameters:

·       chunk: 0-based index of the chunk being uploaded for the file.

·       offset: Position in the source file where the chunk to be uploaded starts.

Multiple chunks can be uploaded concurrently for the same file if all are completed before the upload is finalized (see below).

Finalize package upload

URI: /v1/package/content/{id}/finalize, method: POST

Completes the package after all content has been uploaded.

The body of the request should be a JSON object, content type application/json as follows:

{

    "files": [

        {

            "fileName": "7zip.7zip.23.01.X64.msi",

            "fileSize": 1933312

        },

        {

            "fileName": "transform.mst",

            "fileSize": 4323

        }

    ]

}

 

The entries in files must be an exact match for files uploaded and be in the same order as the index used to upload them. The file names should be relative to the root of the package content.

 

Intune tenant endpoints

List tenants

URI: /v1/tenant, method: GET

Gets information on all available Intune tenants in your organization.

Example:

GET /v1/tenant

Returns a list of tenant objects identical to the Get tenant information request below.

 

Get tenant information

URI: /v1/tenant/{id}, method: GET

Gets information on a specific Intune tenant.

Properties:

·       displayName: Name of the tenant

·       adminConsentGranted: True if admin consent has been granted for this tenant, and operations can be run towards it using the API.

·       defaultDomain: The default domain name for the tenant

Example:

GET /v1/tenant/25f9d0be-a9f5-4f4e-857f-a60202f95b01

Example result:

{

    "id": "25f9d0be-a9f5-4f4e-857f-a60202f95b01",

    "created": "2024-08-14T19:17:44.5993361+02:00",

    "displayName": "Robopack",

    "defaultDomain": "robopack.com",

    "backgroundColor": "#6c3d88",

    "flags": 7,

    "adminConsentGranted": true

}

 

Start upload of package to tenant

URI: /v1/tenant/{id}/upload?packageId={id}&uploadMsixAsWin32=true&wait=false, method: POST

Starts an upload a completed package to an Intune tenant.

Parameters:

·       id: ID of the tenant to upload the package to

·       packageId: ID of the package to upload to the tenant.

·       wait: (defaults to false) If the request should wait for the upload to complete before completing. If false, will return immediately without waiting for the upload to complete. Status for the operation can then be queried with the Get status of tenant upload operation endpoint below.

If waiting for the upload and the upload fails, the request will return a status code of 400.

·       uploadMsixAsWin32: (defaults to true) If the package is an MSIX package, denotes that it should be wrapped in an installation script and created as a Win32 app rather than a Line-of-Business (LoB) app in Intune.

 

Example:

POST /v1/tenant/25f9d0be-a9f5-4f4e-857f-a60202f95b01/upload?packageId=076464a7-926a-4970-7e2c-08dc3934024c

Returns an object representing the upload operation, which can be used to retrieve status for the upload operation. (see below)

Example result:

{

    "id": "1b6a8fcc-edfd-4f94-6fb6-08dce53d2546",

    "created": "2024-10-05T14:56:39.1582263+02:00",

    "startedAt": null,

    "completedAt": null,

    "supportsProgress": false,

    "progress": null,

    "state": "Pending"

}

 

Get status of tenant upload operation

URI: /v1/tenant/upload/{uploadId}, method: GET

Gets information representing an operation to upload a package to an Intune tenant.

Parameters:

·       uploadId: ID representing the upload operation

Example:

GET /v1/tenant/upload/1b6a8fcc-edfd-4f94-6fb6-08dce53d2546

Returns an object representing the upload operation.

Example result:

{

    "id": "1b6a8fcc-edfd-4f94-6fb6-08dce53d2546",

    "created": "2024-10-05T14:56:39.1582263+02:00",

    "startedAt": "2024-10-05T14:56:41.651377+02:00",

    "completedAt": "2024-10-05T14:57:03.9959046+02:00",

    "supportsProgress": false,

    "progress": 100,

    "state": "Completed"

}

 

Properties:

·       id: ID of the upload operation

·       supportsProgress: If the current state of the operation supports percentage progress

·       progress: (if supported) the percentage of the operation, in percent

·       state: State of the operation, one of the following: Pending, Running, Completed, Error, Canceled.

When an upload has been created (and the wait property has not been specified) you should periodically query the status of the upload operation until the status is no longer Pending (which indicates that the upload is waiting to start) or Running (which indicates it is in progress).

Configuration template endpoints

List templates

URI: /v1/template, method: GET

Gets information on all available configuration templates, both shared and private templates. Configuration templates configure how PSADT installation scripts are created when downloading or uploading packages.

Example:

GET /v1/template

Returns a list of template objects identical to the Get template information request below.

 

Get template information

URI: /v1/template/{id}, method: GET

Gets information on a specific template.

Properties:

·       name: Name of the template

·       shared: True if the template is created by Robopack, false if the template was created in the account

·       scriptTemplate: Contains information on the settings contained in the template

·       hasBannerImage: If the template contains a replacement banner image for the script

·       scriptSource.name: Name of the script used by the template

Example:

GET /v1/template/1ed46a4d-2190-43a9-f4e1-08dc394952be

Example result:

{

    "id": "1ed46a4d-2190-43a9-f4e1-08dc394952be",

    "created": "2024-02-29T18:10:26.341664+01:00",

    "updated": "2024-04-08T18:39:35.6964509+02:00",

    "name": "Robopack template",

    "enabled": true,

    "organizationId": "47fea920-33ce-4f28-af59-08dbff1c2c38",

    "organizationName": "Robopack",

    "shared": false,

    "flags": 10,

    "scriptSourceId": "da0070c2-bc31-4ca2-5ee5-08dbff1c2c99",

    "scriptSource": {

        "id": "da0070c2-bc31-4ca2-5ee5-08dbff1c2c99",

        "name": "PSADT 3.9.2d",

        "type": 1,

        "created": "2023-12-17T17:21:07.5882441+01:00",

        "updated": "2024-02-20T21:34:40.151233+01:00",

        "public": true,

        "organizationId": null,

        "organizationName": null,

        "scriptFileId": "b61320dd-8a38-4294-2557-08dbff1c2c9b"

    },

    "scriptTemplate": {

        "flags": 1,

        "psadtInstallationProgress": {

            "show": false,

            "statusMessage": "App is on the way!"

        },

        "psadtInstallationWelcome": {

            "show": false,

            "appsToClose": [],

            "persistPrompt": false,

            "allowDefer": true,

            "deferTimes": 8,

            "deferDeadline": null,

            "closeAppsCountdown": null,

            "forceCloseAppsCountdown": null,

            "customText": "Here are your new applications!"

        }

    },

    "hasBannerImage": true

}

 

Get template banner image

URI: /v1/template/{id}/banner, method: GET

Gets the banner image data for a specific template.

Example:

GET /v1/template/1ed46a4d-2190-43a9-f4e1-08dc394952be/banner

Returns:

Binary PNG bitmap data.

 

Regarding detection rules

If there is more than one detection rule, they must all match for the package to be considered installed.

The following comparison operators are supported:

·       1: Equals

·       2: Does not equal

·       3: Greater than or equal to

·       4: Greater than

·       5: Less than or equal to

·       6: Less than

There are three types of detection rules supported by Robopack:

Windows Installer (type = “MSI”):

Check for the presence of a Windows Installer package:

·       productCode: The WindowsInstaller product code to detect.

·       matchVersion: If the version of the installed product should be compared to determine if it is installed. If not true, then the presence of the product code is enough to determine that the package is installed.

·       is32Bit: If true, then the target package is installed in the 32-bit area on 64-bit versions of Windows.

·       targetVersion: The version to compare against when matchVersion is true.

·       operator: The method with which to compare the version string.

Example:

{

    "productCode": "{BC74D7B3-F268-3A05-926D-EBBE9E1340DC}",

    "matchVersion": true,

    "is32Bit": false,

    "operator": 1,

    "targetVersion": "120.0",

    "type": "MSI"

}

 

File/directory detection (type = “File”)

Checks for the presence of a file or a directory.

·       isFile: True if the item to be checked for is a file, false if it is a directory.

·       path: Path to where the item to be checked for resides.

·       fileOrFolderName: Name of the file or folder to check.

·       is32Bit: If true, then the target package is installed in the 32-bit area on 64-bit versions of Windows.

·       operator: The method with which to compare the file version/modification date/creation date.

·       targetValue: The value to check against.

·       option: How to check for the presence of the item – see below

The option value determines how the file system should be checked:

·       0: Only check that the file or folder exists. The operator and targetValue properties should be ignored.

·       1: Compares the last modification date of the file or folder with the targetValue.

·       2: Compares the creation date of the file or folder with the targetValue.

·       3: Compares the file version of the file with the targetValue.

·       4: Compares the file size with the targetValue.

Example:

{

    "fileOrFolderName": "Mozilla.Firefox_1.120.10.0_x64__ft77jbtkeccna",

    "isFile": false,

    "path": "%ProgramFiles%\\WindowsApps",

    "is32Bit": false,

    "operator": 0,

    "option": 0,

    "targetValue": null,

    "type": "File"

}

 

 

Registry detection (type = “Registry”)

Checks for the presence of a registry key or value.

·       keyPath: Path to the registry key to detect or that contains the value to detect.

·       valueName: Name of the registry value to detect. If empty, the registry key itself should be checked instead.

·       targetValue: Target value for the registry value/key

·       is32Bit: If true, then the registry key resides in the 32-bit area of registry on 64-bit versions of Windows.

·       operator: The method with which to compare the registry value.

·       option: How to check for the presence of the item – see below

The option value determines how the file system should be checked:

·       0: Only check that the registry value or key exists.

·       1: Check that the registry value or key does not exist.

·       2: Compares the registry value with the targetValue using string comparison.

·       3: Compares the registry value with the targetValue using version string comparison.

·       4: Compares the registry value with the targetValue using integer comparison.

Example:

{

    "is32Bit": false,

    "keyPath": "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Firefox 120.0 (x64 en-US)",

    "valueName": "DisplayVersion",

    "targetValue": "120.0",

    "option": 2,

    "operator": 1,

    "type": "Registry"

}

 


    • Related Articles

    • How to get started with Robopack

      1. Create a Robopack account You can request a trial at www.robopack.com or go directly to the signup page at https://app.robopack.com/trial You can use your Microsoft Entra ID to sign in or choose an email/password account. If you use the ...
    • Robopack Trial Guide

      Robopack Trial Guide Welcome to the Robopack Trial! This form is designed to ensure you get the most out of your Robopack trial. By filling out this form and testing features listed in this guide, we can ensure that you experience the full range of ...
    • How to Use Instant Apps in Robopack

      How to Use Instant Apps in Robopack Robopack’s Instant Apps feature makes it easy to find software, keep it automatically updated, and control how new versions are deployed across your organization. This guide walks you through searching, analyzing, ...
    • Rolebased Access Control and Permissions

      Robopack permissions and roles Overview Robopack supports limiting access to areas of the product and to Intune tenants. This document describes the ways in which users can sign in to Robopack and how their access can be managed. User account types ...