---
title: "Plan feature reference"
description: "Each plan-gated Outpost feature, the plans that include it, and what the console, the tray, and the API show when your plan does not."
url: "https://support.outpostplatform.com/reference/plan-features/"
product: "platform"
type: "reference"
status: "draft"
ai_summary: "Plan-gated features in Outpost: service desk (including live chat), PSA, multiple clients, relayed remote desktop, session recording, roles, and Outpost Cloud Storage. Console behavior, the API 402 reason and limit, and 404 public links. The plan is checked every 15 minutes, and the last verified plan is used for up to 72 hours offline."
source: "https://gitlab.com/outpostplatform/docs/-/edit/main/src/content/docs/reference/plan-features.mdx"
license: "CC BY 4.0"
---

# Plan feature reference

data.features[key].plans.map((id) => data.plans[id].name).join(', ');

This page lists every feature that depends on your Outpost plan, which plans
include it, and exactly what you see when your plan does not: in the console,
on the endpoint, and from the API. It is for technicians who meet a refusal
and developers who need to handle one. For what each plan includes and costs,
see [Plans and limits](/account/plans-and-limits/).

## Scope

- Depot 0.8.0.
- Features every plan includes, such as endpoint management, remote desktop
  over direct connections, scripting, patching, backup, documentation,
  security framework baselines, and the audit log, are not listed. See
  [Features by plan](/account/plans-and-limits/#features-by-plan).
- Numeric limits on endpoints, unmanaged devices, and console users are on
  [Plans and limits](/account/plans-and-limits/#what-happens-at-a-limit).
- What the console looks like when a feature is locked, and how owners hide
  locked features, is on [Plan-locked features](/depot/plan-locked-features/).

## Features

<table>
  <thead>
    <tr>
      <th scope="col">Feature</th>
      <th scope="col">Plans</th>
      <th scope="col">Without it, in the console</th>
      <th scope="col">API refusal</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row"><a href="#service-desk">Service desk</a></th>
      <td>{plansFor('service-desk')}</td>
      <td>Tickets, incidents, status pages, SLAs, and the ticket list in the inbox are locked. The tray app does not offer live chat.</td>
      <td><code>402</code>, reason <code>plan_feature</code>, limit <code>feature:service_desk</code></td>
    </tr>
    <tr>
      <th scope="row"><a href="#psa">PSA</a></th>
      <td>{plansFor('psa')}</td>
      <td>Sales, projects, and client billing are locked.</td>
      <td><code>402</code>, reason <code>plan_feature</code>, limit <code>feature:psa</code></td>
    </tr>
    <tr>
      <th scope="row"><a href="#multiple-clients">Multiple client environments</a></th>
      <td>{plansFor('multi-client')}</td>
      <td>Adding a second client is refused with <strong>Plan limit reached</strong>.</td>
      <td><code>402</code>, reason <code>plan_limit</code>, limit <code>clients</code></td>
    </tr>
    <tr>
      <th scope="row"><a href="#relayed-remote">Relayed remote desktop</a></th>
      <td>{plansFor('relayed-remote')}</td>
      <td>Remote sessions use direct connections only.</td>
      <td>None. The session is set up without a relay.</td>
    </tr>
    <tr>
      <th scope="row"><a href="#session-recording">Session recording</a></th>
      <td>{plansFor('session-recording')}</td>
      <td>Recording is hidden in the profile editor. Profiles that require recording cannot be applied.</td>
      <td><code>402</code>, reason <code>plan_feature</code>, limit <code>feature:session_recording</code>, when applying one</td>
    </tr>
    <tr>
      <th scope="row"><a href="#roles">Roles and permissions</a></th>
      <td>{plansFor('roles')}</td>
      <td>Granting or removing a role is refused with <strong>Plan limit reached</strong>.</td>
      <td><code>402</code>, reason <code>plan_limit</code>, limit <code>roles</code></td>
    </tr>
    <tr>
      <th scope="row"><a href="#outpost-cloud-storage">Outpost Cloud Storage</a></th>
      <td>{plansFor('outpost-cloud-storage')}</td>
      <td>Storing a file is refused with <strong>Add your own storage</strong> until you add your own S3-compatible storage.</td>
      <td><code>402</code>, reason <code>own_storage_required</code>, limit <code>storage</code></td>
    </tr>
  </tbody>
</table>

Every `402` has the body described in
[For API clients](/depot/plan-locked-features/#for-api-clients). Its `detail`
is the sentence the console shows.

## Notes on individual features

### Service desk {#service-desk}

The console names this feature **Service desk**. Without it:

- **Tickets**, **Incidents**, **Estate status**, the ticket list in **Inbox**,
  and **Settings** > **SLA** are locked in the navigation. An owner sees them
  with a lock and a page that says which plan includes them. Everyone else does
  not see them.
- The API refuses ticket, ticket configuration, satisfaction survey, ticket
  automation, SLA, knowledge base, incident, maintenance window, and status
  page configuration requests with **Not included in your plan**.
- A help request sent from the tray app does not open a ticket. See
  [Use the Outpost tray app](/tray/using-the-tray/#tickets).
- Live chat is not offered. People cannot start a chat from the tray app or
  see their past chats there, and **Raise a ticket** on a chat is refused. A
  chat already running when the plan changes can finish. See
  [Live chat](/service-desk/live-chat/).
- Your public status page and satisfaction survey links answer `404 Not
  Found`, the same as an address that never existed.

### PSA {#psa}

The console names this feature **PSA**. It covers **Sales**, **Projects**, and
**Client billing**, which exist only in an MSP console. In any other console
these sections do not appear, and their API routes answer `404 Not Found`. On
an MSP console without the feature:

- The three sections are locked in the navigation, the same way as the service
  desk.
- The API refuses sales, project, and client billing requests with **Not
  included in your plan**.
- Quote acceptance links and project status links sent to your customers
  answer `404 Not Found`.

### Multiple client environments {#multiple-clients}

Without it, your Outpost holds one client. Creating another is refused with
**Plan limit reached** and a message that names your plan and says it
"includes one client environment". Clients that already exist are not
removed. See [Add and manage clients](/msp/clients/).

### Relayed remote desktop {#relayed-remote}

Without it, remote desktop sessions use direct connections only, and no relay
credentials are issued for them. Where your Outpost connects remote sessions
only through a relay, the session is refused with "Relayed remote desktop is
not included in your plan." See [Remote access](/remote-access/).

### Session recording {#session-recording}

Without it:

- `remote_access.recording_required` is hidden in the profile editor.
- Saving or assigning a profile that requires recording is refused with
  **Not included in your plan**, and so is restoring or rolling out a saved
  profile version that requires it.
- A profile that already required recording before the plan changed keeps
  working. Its sessions run unrecorded, the profile shows **This profile
  requires session recording, but your plan does not include it. Remote
  sessions run unrecorded.**, and the viewer shows **Policy requires session
  recording, which is not included in this plan. This session is not being
  recorded.** Each such session is recorded in the audit log.

Recordings made earlier stay listed and playable. See
[Record remote sessions](/remote-access/session-recording/).

### Roles and permissions {#roles}

On Home Lab, the one console user is the owner, and requests to grant or
remove a role are refused with "Home Lab has one console user, who is the
owner. Upgrade to Essentials to use roles." See
[Roles and permissions](/depot/roles-and-permissions/).

### Outpost Cloud Storage {#outpost-cloud-storage}

Home Lab stores files only in your own S3-compatible storage. Until you add
it, anything that would store a file in Outpost Cloud Storage is refused with
"Home Lab uses your own S3-compatible storage. Add your own S3-compatible
storage to store files." Files already stored stay readable. See
[Storage destinations](/depot/storage/).

## How your plan is checked {#plan-verification}

Your Outpost asks the Outpost service which plan you are on and keeps the
answer for 15 minutes before asking again, so a plan change can take up to
that long to unlock or lock a feature.

If your Outpost cannot reach the Outpost service, it keeps using the last plan
it verified, for up to 72 hours. After that, until the connection returns, it
treats your plan as unverified. The features on this page are refused, and so
are enrolling more endpoints, tracking more unmanaged devices, adding console
users, and storing files in Outpost Cloud Storage. Some of these refusals read
**Plan verification unavailable** (`503`, reason `plan_unavailable`).
Endpoints already enrolled, and features every plan includes, keep working.
Once your Outpost reaches the Outpost service again, the next check restores
your plan.

Self-hosted deployments and Remote Outpost check their plan differently. See
[Self-hosted and air-gapped deployments](/get-started/self-hosted-and-air-gapped/).

## Related

- [Plans and limits](/account/plans-and-limits/)
- [Plan-locked features](/depot/plan-locked-features/)
- [Upgrade or change your plan](/account/change-plan/)
