> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/unigetui/reference/ipc-api.md).

# Automation API (IPC)

The local HTTP API that powers the UniGetUI command line: transports, authentication, request bodies and every endpoint.

UniGetUI exposes a local HTTP API that the [command-line interface](/unigetui/reference/cli.md) uses to control a session. You can call it directly to integrate UniGetUI with your own scripts and tools. Every endpoint is under `/uniget/v1/`, and each one has a CLI equivalent.

{% hint style="danger" %}
The API is designed for local automation only. Don't expose it to the network.
{% endhint %}

## Transports

<table><thead><tr><th width="250">SETTING</th><th>DEFAULT</th></tr></thead><tbody><tr><td>Transport</td><td><code>named-pipe</code>: a Windows named pipe on Windows, a Unix domain socket on macOS and Linux.</td></tr><tr><td>Alternative transport</td><td><code>tcp</code>, bound to <code>localhost</code> only.</td></tr><tr><td>TCP port</td><td><code>7058</code></td></tr><tr><td>Pipe name</td><td><code>UniGetUI.IPC</code></td></tr><tr><td>Unix socket folder (macOS, Linux)</td><td><code>/tmp</code></td></tr></tbody></table>

On macOS and Linux, a relative pipe name such as `UniGetUI.IPC` resolves to `/tmp/UniGetUI.IPC`, and an absolute path is used as is. On Windows, absolute pipe paths are rejected and the default pipe name is used.

{% hint style="info" %}
In a desktop session, the API only runs when ***Enable background api (UniGetUI Widgets and Sharing, port 7058)*** is on in ***Settings*** – ***Experimental settings and developer options***. A session started with `--headless` always runs it.
{% endhint %}

### Server configuration

Read when UniGetUI starts the API.

<table><thead><tr><th width="250">ARGUMENT</th><th>ENVIRONMENT VARIABLE</th><th>WHAT IT DOES</th></tr></thead><tbody><tr><td><code>--ipc-api-transport {named-pipe|tcp}</code></td><td><code>UNIGETUI_IPC_API_TRANSPORT</code></td><td>Transport of the API.</td></tr><tr><td><code>--ipc-api-port &#x3C;port></code></td><td><code>UNIGETUI_IPC_API_PORT</code></td><td>TCP port, with the <code>tcp</code> transport.</td></tr><tr><td><code>--ipc-api-pipe-name &#x3C;name-or-path></code></td><td><code>UNIGETUI_IPC_API_PIPE_NAME</code></td><td>Pipe name or Unix socket path, with the <code>named-pipe</code> transport.</td></tr></tbody></table>

### Client configuration

Read by the CLI to find the session.

<table><thead><tr><th width="250">ARGUMENT</th><th>ENVIRONMENT VARIABLE</th><th>WHAT IT DOES</th></tr></thead><tbody><tr><td><code>--transport {named-pipe|tcp}</code></td><td><code>UNIGETUI_IPC_API_TRANSPORT</code></td><td>Transport used to reach the session.</td></tr><tr><td><code>--tcp-port &#x3C;port></code></td><td><code>UNIGETUI_IPC_API_PORT</code></td><td>TCP port of the session.</td></tr><tr><td><code>--pipe-name &#x3C;name-or-path></code></td><td><code>UNIGETUI_IPC_API_PIPE_NAME</code></td><td>Pipe name or Unix socket path of the session.</td></tr></tbody></table>

## Session discovery

Each session registers its endpoint and token in the user configuration folder. Without a transport option, the client:

1. Loads the registered sessions, headless sessions first, then newest first.
2. Connects to the first live session and uses its token automatically.

With a transport option, the client connects to that transport and waits up to 5 seconds for a matching token to appear.

## Authentication

<table><thead><tr><th width="250">ENDPOINT</th><th>AUTHENTICATION</th></tr></thead><tbody><tr><td><code>GET /uniget/v1/status</code></td><td>None.</td></tr><tr><td>All other endpoints</td><td><code>token</code> query parameter.</td></tr></tbody></table>

UniGetUI generates a new token each time the API starts and stores it with the session registration. The CLI adds it to requests automatically.

## Security

* TCP mode listens on `localhost` only, not on all network interfaces.
* On macOS and Linux, the Unix socket is readable and writable by its owner only (equivalent to `0600`).
* On Windows, the named pipe doesn't create a file on disk.

## Responses and errors

<table><thead><tr><th width="250">CONDITION</th><th>RESULT</th></tr></thead><tbody><tr><td>Missing or invalid token</td><td>HTTP <code>401</code>.</td></tr><tr><td>Invalid query or body arguments</td><td>HTTP <code>400</code> with a plain-text message.</td></tr><tr><td>Success</td><td>JSON with camelCase property names.</td></tr></tbody></table>

## Request parameters

Most endpoints take query parameters. The endpoints below take a JSON body with camelCase fields instead.

### Manager maintenance body

Used by `/managers/maintenance/reload`, `/executable/set`, `/executable/clear` and `/action`.

<table><thead><tr><th width="250">FIELD</th><th>TYPE</th><th>DESCRIPTION</th></tr></thead><tbody><tr><td><code>managerName</code></td><td>string</td><td>Required. Manager ID, such as <code>winget</code>.</td></tr><tr><td><code>action</code></td><td>string</td><td>Maintenance action, for <code>/action</code>.</td></tr><tr><td><code>path</code></td><td>string</td><td>Custom executable path, for <code>/executable/set</code>.</td></tr><tr><td><code>confirm</code></td><td>boolean</td><td>Confirms a destructive action.</td></tr></tbody></table>

### GitHub sign-in body

<table><thead><tr><th width="250">FIELD</th><th>TYPE</th><th>DESCRIPTION</th></tr></thead><tbody><tr><td><code>launchBrowser</code></td><td>boolean</td><td>Opens the verification URL in the browser automatically.</td></tr></tbody></table>

### Cloud backup body

<table><thead><tr><th width="250">FIELD</th><th>TYPE</th><th>DESCRIPTION</th></tr></thead><tbody><tr><td><code>key</code></td><td>string</td><td>Backup identifier.</td></tr><tr><td><code>append</code></td><td>boolean</td><td>Adds to the current bundle instead of replacing it.</td></tr></tbody></table>

### Bundle import body

<table><thead><tr><th width="250">FIELD</th><th>TYPE</th><th>DESCRIPTION</th></tr></thead><tbody><tr><td><code>path</code></td><td>string</td><td>Bundle file path.</td></tr><tr><td><code>content</code></td><td>string</td><td>Raw bundle content.</td></tr><tr><td><code>format</code></td><td>string</td><td><code>ubundle</code>, <code>json</code>, <code>yaml</code> or <code>xml</code>.</td></tr><tr><td><code>append</code></td><td>boolean</td><td>Adds the imported packages to the current bundle.</td></tr></tbody></table>

### Bundle export body

<table><thead><tr><th width="250">FIELD</th><th>TYPE</th><th>DESCRIPTION</th></tr></thead><tbody><tr><td><code>path</code></td><td>string</td><td>Optional output file path.</td></tr></tbody></table>

### Bundle package body

<table><thead><tr><th width="250">FIELD</th><th>TYPE</th><th>DESCRIPTION</th></tr></thead><tbody><tr><td><code>packageId</code></td><td>string</td><td>Package identifier.</td></tr><tr><td><code>managerName</code></td><td>string</td><td>Manager ID.</td></tr><tr><td><code>packageSource</code></td><td>string</td><td>Source name.</td></tr><tr><td><code>version</code></td><td>string</td><td>Requested version.</td></tr><tr><td><code>scope</code></td><td>string</td><td>Requested scope.</td></tr><tr><td><code>preRelease</code></td><td>boolean</td><td>Includes prerelease versions.</td></tr><tr><td><code>selection</code></td><td>string</td><td>How the package is found: <code>search</code>, <code>installed</code>, <code>updates</code> or <code>auto</code>.</td></tr></tbody></table>

### Bundle install body

<table><thead><tr><th width="250">FIELD</th><th>TYPE</th><th>DESCRIPTION</th></tr></thead><tbody><tr><td><code>includeInstalled</code></td><td>boolean</td><td>Also processes packages already installed.</td></tr><tr><td><code>elevated</code></td><td>boolean</td><td>Runs with administrator rights.</td></tr><tr><td><code>interactive</code></td><td>boolean</td><td>Runs installers interactively.</td></tr><tr><td><code>skipHash</code></td><td>boolean</td><td>Skips the hash check when supported.</td></tr></tbody></table>

### Package query parameters

Used by the package endpoints (details, versions, install, update, uninstall, download, ignored updates).

<table><thead><tr><th width="250">PARAMETER</th><th>DESCRIPTION</th></tr></thead><tbody><tr><td><code>packageId</code></td><td>Package identifier.</td></tr><tr><td><code>manager</code></td><td>Manager ID.</td></tr><tr><td><code>packageSource</code></td><td>Source name.</td></tr><tr><td><code>version</code></td><td>Requested version.</td></tr><tr><td><code>scope</code></td><td>Install scope.</td></tr><tr><td><code>preRelease</code></td><td>Boolean. Includes prerelease versions.</td></tr><tr><td><code>elevated</code></td><td>Boolean. Runs with administrator rights.</td></tr><tr><td><code>interactive</code></td><td>Boolean. Runs the installer interactively.</td></tr><tr><td><code>skipHash</code></td><td>Boolean. Skips the hash check.</td></tr><tr><td><code>removeData</code></td><td>Boolean. Removes package data on uninstall.</td></tr><tr><td><code>wait</code></td><td>Boolean. Waits for the operation to finish.</td></tr><tr><td><code>architecture</code></td><td>Architecture to install.</td></tr><tr><td><code>location</code></td><td>Install folder.</td></tr><tr><td><code>outputPath</code></td><td>Download folder. Defaults to the download location set in the settings, or the user's Downloads folder.</td></tr></tbody></table>

### Other query parameters

<table><thead><tr><th width="250">PARAMETER</th><th>USED BY</th></tr></thead><tbody><tr><td><code>page</code>, <code>manager</code>, <code>helpAttachment</code></td><td><code>/app/navigate</code></td></tr><tr><td><code>tailLines</code></td><td><code>/operations/{operationId}/output</code></td></tr><tr><td><code>mode</code></td><td><code>/operations/{operationId}/retry</code></td></tr><tr><td><code>action</code></td><td><code>/operations/{operationId}/reorder</code></td></tr></tbody></table>

## Endpoints

Paths are relative to `/uniget/v1`. All except `/status` need the `token` query parameter.

### Session and application

<table><thead><tr><th width="250">METHOD</th><th>PATH</th><th>PARAMETERS</th><th>CLI EQUIVALENT</th></tr></thead><tbody><tr><td><code>GET</code></td><td><code>/status</code></td><td>None</td><td><code>status</code>, <code>version</code>. Returns <code>running</code>, <code>transport</code>, <code>tcpPort</code>, <code>namedPipeName</code>, <code>namedPipePath</code>, <code>baseAddress</code>, <code>version</code>, <code>buildNumber</code>.</td></tr><tr><td><code>GET</code></td><td><code>/app</code></td><td>None</td><td><code>app status</code></td></tr><tr><td><code>POST</code></td><td><code>/app/show</code></td><td>None</td><td><code>app show</code></td></tr><tr><td><code>POST</code></td><td><code>/app/navigate</code></td><td>Query: <code>page</code>, optional <code>manager</code>, <code>helpAttachment</code></td><td><code>app navigate</code></td></tr><tr><td><code>POST</code></td><td><code>/app/quit</code></td><td>None</td><td><code>app quit</code></td></tr></tbody></table>

### Operations

<table><thead><tr><th width="250">METHOD</th><th>PATH</th><th>PARAMETERS</th><th>CLI EQUIVALENT</th></tr></thead><tbody><tr><td><code>GET</code></td><td><code>/operations</code></td><td>None</td><td><code>operation list</code></td></tr><tr><td><code>GET</code></td><td><code>/operations/{operationId}</code></td><td>Route: <code>operationId</code></td><td><code>operation get</code></td></tr><tr><td><code>GET</code></td><td><code>/operations/{operationId}/output</code></td><td>Route: <code>operationId</code>, optional query <code>tailLines</code></td><td><code>operation output</code></td></tr><tr><td><code>POST</code></td><td><code>/operations/{operationId}/cancel</code></td><td>Route: <code>operationId</code></td><td><code>operation cancel</code></td></tr><tr><td><code>POST</code></td><td><code>/operations/{operationId}/retry</code></td><td>Route: <code>operationId</code>, optional query <code>mode</code></td><td><code>operation retry</code></td></tr><tr><td><code>POST</code></td><td><code>/operations/{operationId}/reorder</code></td><td>Route: <code>operationId</code>, query <code>action</code></td><td><code>operation reorder</code></td></tr><tr><td><code>POST</code></td><td><code>/operations/{operationId}/forget</code></td><td>Route: <code>operationId</code></td><td><code>operation forget</code></td></tr></tbody></table>

### Package managers

<table><thead><tr><th width="250">METHOD</th><th>PATH</th><th>PARAMETERS</th><th>CLI EQUIVALENT</th></tr></thead><tbody><tr><td><code>GET</code></td><td><code>/managers</code></td><td>None</td><td><code>manager list</code></td></tr><tr><td><code>GET</code></td><td><code>/managers/maintenance</code></td><td>Query: <code>manager</code></td><td><code>manager maintenance</code></td></tr><tr><td><code>POST</code></td><td><code>/managers/maintenance/reload</code></td><td>Manager maintenance body</td><td><code>manager reload</code></td></tr><tr><td><code>POST</code></td><td><code>/managers/maintenance/executable/set</code></td><td>Manager maintenance body</td><td><code>manager set-executable</code></td></tr><tr><td><code>POST</code></td><td><code>/managers/maintenance/executable/clear</code></td><td>Manager maintenance body</td><td><code>manager clear-executable</code></td></tr><tr><td><code>POST</code></td><td><code>/managers/maintenance/action</code></td><td>Manager maintenance body</td><td><code>manager action</code></td></tr><tr><td><code>POST</code></td><td><code>/managers/set-enabled</code></td><td>Query: <code>manager</code>, <code>enabled</code></td><td><code>manager enable</code>, <code>manager disable</code></td></tr><tr><td><code>POST</code></td><td><code>/managers/set-update-notifications</code></td><td>Query: <code>manager</code>, <code>enabled</code></td><td><code>manager notifications enable</code>, <code>manager notifications disable</code></td></tr></tbody></table>

### Sources

<table><thead><tr><th width="250">METHOD</th><th>PATH</th><th>PARAMETERS</th><th>CLI EQUIVALENT</th></tr></thead><tbody><tr><td><code>GET</code></td><td><code>/sources</code></td><td>Optional query: <code>manager</code></td><td><code>source list</code></td></tr><tr><td><code>POST</code></td><td><code>/sources/add</code></td><td>Query: <code>manager</code>, <code>name</code>, optional <code>url</code></td><td><code>source add</code></td></tr><tr><td><code>POST</code></td><td><code>/sources/remove</code></td><td>Query: <code>manager</code>, <code>name</code>, optional <code>url</code></td><td><code>source remove</code></td></tr></tbody></table>

### Settings

<table><thead><tr><th width="250">METHOD</th><th>PATH</th><th>PARAMETERS</th><th>CLI EQUIVALENT</th></tr></thead><tbody><tr><td><code>GET</code></td><td><code>/settings</code></td><td>None</td><td><code>settings list</code></td></tr><tr><td><code>GET</code></td><td><code>/settings/item</code></td><td>Query: <code>key</code></td><td><code>settings get</code></td></tr><tr><td><code>POST</code></td><td><code>/settings/set</code></td><td>Query: <code>key</code>, optional <code>enabled</code>, optional <code>value</code></td><td><code>settings set</code></td></tr><tr><td><code>POST</code></td><td><code>/settings/clear</code></td><td>Query: <code>key</code></td><td><code>settings clear</code></td></tr><tr><td><code>POST</code></td><td><code>/settings/reset</code></td><td>None</td><td><code>settings reset</code></td></tr><tr><td><code>GET</code></td><td><code>/secure-settings</code></td><td>Optional query: <code>user</code></td><td><code>settings secure list</code></td></tr><tr><td><code>GET</code></td><td><code>/secure-settings/item</code></td><td>Query: <code>key</code>, optional <code>user</code></td><td><code>settings secure get</code></td></tr><tr><td><code>POST</code></td><td><code>/secure-settings/set</code></td><td>Query: <code>key</code>, <code>enabled</code>, optional <code>user</code></td><td><code>settings secure set</code></td></tr></tbody></table>

### Shortcuts

The Start Menu endpoints are Windows only; the path and package rules are described in the CLI reference under [Start Menu shortcuts](/unigetui/reference/cli.md#start-menu-shortcuts) and [Start Menu folders](/unigetui/reference/cli.md#start-menu-folders). The response of `/start-menu-folders/set` lists the matching shortcuts in `matchingShortcuts`.

<table><thead><tr><th width="250">METHOD</th><th>PATH</th><th>PARAMETERS</th><th>CLI EQUIVALENT</th></tr></thead><tbody><tr><td><code>GET</code></td><td><code>/desktop-shortcuts</code></td><td>None</td><td><code>shortcut list</code></td></tr><tr><td><code>POST</code></td><td><code>/desktop-shortcuts/set</code></td><td>Query: <code>path</code>, <code>status</code></td><td><code>shortcut set</code></td></tr><tr><td><code>POST</code></td><td><code>/desktop-shortcuts/reset</code></td><td>Query: <code>path</code></td><td><code>shortcut reset</code></td></tr><tr><td><code>POST</code></td><td><code>/desktop-shortcuts/reset-all</code></td><td>None</td><td><code>shortcut reset-all</code></td></tr><tr><td><code>GET</code></td><td><code>/start-menu-shortcuts</code></td><td>None</td><td><code>start-menu shortcut list</code></td></tr><tr><td><code>POST</code></td><td><code>/start-menu-shortcuts/set</code></td><td>Query: <code>path</code>, <code>status</code></td><td><code>start-menu shortcut set</code></td></tr><tr><td><code>POST</code></td><td><code>/start-menu-shortcuts/reset</code></td><td>Query: <code>path</code></td><td><code>start-menu shortcut reset</code></td></tr><tr><td><code>POST</code></td><td><code>/start-menu-shortcuts/reset-all</code></td><td>None</td><td><code>start-menu shortcut reset-all</code></td></tr><tr><td><code>GET</code></td><td><code>/start-menu-folders</code></td><td>None</td><td><code>start-menu folder list</code></td></tr><tr><td><code>POST</code></td><td><code>/start-menu-folders/set</code></td><td>Query: <code>package</code>, <code>folder</code>, optional <code>relocate-existing</code></td><td><code>start-menu folder set</code></td></tr><tr><td><code>POST</code></td><td><code>/start-menu-folders/remove</code></td><td>Query: <code>package</code></td><td><code>start-menu folder remove</code></td></tr></tbody></table>

### Logs

<table><thead><tr><th width="250">METHOD</th><th>PATH</th><th>PARAMETERS</th><th>CLI EQUIVALENT</th></tr></thead><tbody><tr><td><code>GET</code></td><td><code>/logs/app</code></td><td>Optional query: <code>level</code></td><td><code>log app</code></td></tr><tr><td><code>GET</code></td><td><code>/logs/history</code></td><td>None</td><td><code>log operations</code></td></tr><tr><td><code>GET</code></td><td><code>/logs/manager</code></td><td>Optional query: <code>manager</code>, <code>verbose</code></td><td><code>log manager</code></td></tr></tbody></table>

### Backups

<table><thead><tr><th width="250">METHOD</th><th>PATH</th><th>PARAMETERS</th><th>CLI EQUIVALENT</th></tr></thead><tbody><tr><td><code>GET</code></td><td><code>/backups/status</code></td><td>None</td><td><code>backup status</code></td></tr><tr><td><code>POST</code></td><td><code>/backups/local/create</code></td><td>None</td><td><code>backup local create</code></td></tr><tr><td><code>POST</code></td><td><code>/backups/github/sign-in/start</code></td><td>GitHub sign-in body</td><td><code>backup github login start</code></td></tr><tr><td><code>POST</code></td><td><code>/backups/github/sign-in/complete</code></td><td>None</td><td><code>backup github login complete</code></td></tr><tr><td><code>POST</code></td><td><code>/backups/github/sign-out</code></td><td>None</td><td><code>backup github logout</code></td></tr><tr><td><code>GET</code></td><td><code>/backups/cloud</code></td><td>None</td><td><code>backup cloud list</code></td></tr><tr><td><code>POST</code></td><td><code>/backups/cloud/create</code></td><td>None</td><td><code>backup cloud create</code></td></tr><tr><td><code>POST</code></td><td><code>/backups/cloud/download</code></td><td>Cloud backup body</td><td><code>backup cloud download</code></td></tr><tr><td><code>POST</code></td><td><code>/backups/cloud/restore</code></td><td>Cloud backup body</td><td><code>backup cloud restore</code></td></tr></tbody></table>

### Bundles

<table><thead><tr><th width="250">METHOD</th><th>PATH</th><th>PARAMETERS</th><th>CLI EQUIVALENT</th></tr></thead><tbody><tr><td><code>GET</code></td><td><code>/bundles</code></td><td>None</td><td><code>bundle get</code></td></tr><tr><td><code>POST</code></td><td><code>/bundles/reset</code></td><td>None</td><td><code>bundle reset</code></td></tr><tr><td><code>POST</code></td><td><code>/bundles/import</code></td><td>Bundle import body</td><td><code>bundle import</code></td></tr><tr><td><code>POST</code></td><td><code>/bundles/export</code></td><td>Bundle export body</td><td><code>bundle export</code></td></tr><tr><td><code>POST</code></td><td><code>/bundles/add</code></td><td>Bundle package body</td><td><code>bundle add</code></td></tr><tr><td><code>POST</code></td><td><code>/bundles/remove</code></td><td>Bundle package body</td><td><code>bundle remove</code></td></tr><tr><td><code>POST</code></td><td><code>/bundles/install</code></td><td>Bundle install body</td><td><code>bundle install</code></td></tr></tbody></table>

### Packages

<table><thead><tr><th width="250">METHOD</th><th>PATH</th><th>PARAMETERS</th><th>CLI EQUIVALENT</th></tr></thead><tbody><tr><td><code>GET</code></td><td><code>/packages/search</code></td><td>Query: <code>query</code>, optional <code>manager</code>, <code>maxResults</code></td><td><code>package search</code></td></tr><tr><td><code>GET</code></td><td><code>/packages/installed</code></td><td>Optional query: <code>manager</code></td><td><code>package installed</code></td></tr><tr><td><code>GET</code></td><td><code>/packages/updates</code></td><td>Optional query: <code>manager</code></td><td><code>package updates</code></td></tr><tr><td><code>GET</code></td><td><code>/packages/details</code></td><td>Package query parameters</td><td><code>package details</code></td></tr><tr><td><code>GET</code></td><td><code>/packages/versions</code></td><td>Package query parameters</td><td><code>package versions</code></td></tr><tr><td><code>GET</code></td><td><code>/packages/ignored</code></td><td>None</td><td><code>package ignored list</code></td></tr><tr><td><code>POST</code></td><td><code>/packages/ignore</code></td><td>Package query parameters</td><td><code>package ignored add</code></td></tr><tr><td><code>POST</code></td><td><code>/packages/unignore</code></td><td>Package query parameters</td><td><code>package ignored remove</code></td></tr><tr><td><code>POST</code></td><td><code>/packages/download</code></td><td>Package query parameters</td><td><code>package download</code></td></tr><tr><td><code>POST</code></td><td><code>/packages/install</code></td><td>Package query parameters</td><td><code>package install</code></td></tr><tr><td><code>POST</code></td><td><code>/packages/reinstall</code></td><td>Package query parameters</td><td><code>package reinstall</code></td></tr><tr><td><code>POST</code></td><td><code>/packages/update</code></td><td>Package query parameters</td><td><code>package update</code></td></tr><tr><td><code>POST</code></td><td><code>/packages/uninstall</code></td><td>Package query parameters</td><td><code>package uninstall</code></td></tr><tr><td><code>POST</code></td><td><code>/packages/uninstall-then-reinstall</code></td><td>Package query parameters</td><td><code>package repair</code></td></tr><tr><td><code>POST</code></td><td><code>/packages/show</code></td><td>Query: <code>packageId</code>, <code>packageSource</code></td><td><code>package show</code></td></tr><tr><td><code>POST</code></td><td><code>/packages/update-all</code></td><td>None</td><td><code>package update-all</code></td></tr><tr><td><code>POST</code></td><td><code>/packages/update-manager</code></td><td>Query: <code>manager</code></td><td><code>package update-manager</code></td></tr></tbody></table>

## Headless limitations

In a headless session, these endpoints return HTTP `400` with a descriptive message:

* `POST /uniget/v1/app/show` and `POST /uniget/v1/app/navigate`: there's no window.
* `POST /uniget/v1/packages/update-all` and `POST /uniget/v1/packages/update-manager`: unless the host provides the handlers that start these updates.

## Try it with curl

Start a headless session in TCP mode:

```powershell
UniGetUI.exe --headless --ipc-api-transport tcp --ipc-api-port 7058
```

Then query the status endpoint, which needs no token:

```powershell
curl http://localhost:7058/uniget/v1/status
```

Other endpoints need the session token in the `token` query parameter. The CLI handles it for you.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.devolutions.net/unigetui/reference/ipc-api.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
