---
title: "Plan-locked features"
description: "What the console shows when your plan does not include a feature or you reach a plan limit, how to hide locked features, and what API clients receive."
url: "https://support.outpostplatform.com/depot/plan-locked-features/"
product: "depot"
type: "concept"
status: "draft"
ai_summary: "How the console handles features and limits outside your plan. Owners see locked navigation entries leading to a page naming the plan that has the feature; others do not see them. Live chat and inbound mailboxes are part of Service desk. Refusals read Plan limit reached, Not included in your plan, or Add your own storage. API clients receive HTTP 402 problem+json."
source: "https://gitlab.com/outpostplatform/docs/-/edit/main/src/content/docs/depot/plan-locked-features.md"
license: "CC BY 4.0"
---

# Plan-locked features

Each Outpost plan includes a set of features and a set of limits. When your
plan does not include a feature, or you reach one of its limits, the console
tells you so where you meet it, names the plan that has it, and, where you can
upgrade yourself, links to the Outpost portal. This page explains what that
looks like, who sees it, and what an API client receives.

What each plan includes is on [Plans and limits](/account/plans-and-limits/).

## Locked features in the navigation

The features a plan can lack, by the name the console uses for them:

| Feature | What it covers | Plans that include it |
| --- | --- | --- |
| **Service desk** | **Tickets**, **Incidents**, **Estate status**, **Chat queue** and live chat, the ticket list in **Inbox**, **Settings** > **Mailboxes**, and **Settings** > **SLA** | Enterprise, MSP |
| **PSA** | **Sales**, **Projects**, and **Client billing** | MSP |
| **Multiple client environments** | More than one client | MSP |
| **Relayed remote desktop** | Remote desktop through a relay when a direct connection cannot be made | Enterprise, MSP |
| **Session recording** | Recording remote sessions | Enterprise, MSP |

How a locked section appears depends on who you are:

- **Owners** see the section in the navigation with a lock beside it, and no
  pages under it. Selecting it opens a page named for the feature.
- **Everyone else** does not see the section at all. Only an owner can change
  the plan, so a lock would be something they can do nothing about.

The notifications menu in the header follows the same rule for incidents and
tickets.

### The plan-locked page

The page for a locked feature says which plan includes it, such as
**Available on Enterprise.** Below that it offers one of:

- **Upgrade**, when you can move to that plan yourself. It opens the Outpost
  portal in a new tab. See [Account and billing](/account/).
- **Contact Outpost to change plans.**, when the move is not self-serve.

Opening the address of a locked page directly, from a bookmark or a link, leads
to the same page.

### Hide unavailable features

An owner who does not want to see locked sections can hide them.

1. On a plan-locked page, select **Hide unavailable features**.
2. In **Hide unavailable features?**, select **Hide**.

Locked sections are then removed from the navigation for you. To show them
again, open **Account** from the profile menu and, on the
**Preferences** card, select **Show unavailable features**. The preference is
saved with your account, so it follows you to other browsers.

## Refusals where you work

When an action needs a feature or a limit your plan does not have, the console
refuses it where you made the request and says why, in a message that names
your plan and the plan that has more. Where you can upgrade yourself, the
message includes an **Upgrade** link.

| Message | When | Example |
| --- | --- | --- |
| **Plan limit reached** | Adding an endpoint, tracking an unmanaged device, inviting or enabling a console user, assigning roles, or adding a client would go past your plan's limit. | "Essentials includes 3 console users. Upgrade to Enterprise to invite more." |
| **Not included in your plan** | Using a feature your plan does not include. | "Service desk is available on Enterprise. Upgrade in the Outpost portal to use it." |
| **Add your own storage** | Storing a file in Outpost Cloud Storage on Home Lab. The message adds an **Add storage** link to **Settings** > **Storage**. | "Home Lab uses your own S3-compatible storage. Add your own S3-compatible storage to store files." |

Limits are enforced when you add something. Nothing you already have is
removed or switched off. Endpoints already enrolled keep working, existing
session recordings stay playable, and files already in Outpost Cloud Storage
stay readable.

During a free trial, the endpoint limit is the trial's. On an Enterprise trial,
for example: "Your trial includes 100 endpoints. Add a payment method and
upgrade in the Outpost portal to add more."

Two features are refused in other places:

- **Relayed remote desktop**: without it, remote desktop uses direct
  connections only. Where your Outpost connects remote sessions only through a
  relay, the session is refused with "Relayed remote desktop is not included
  in your plan."
- **Session recording**: without it, sessions are not recorded, even when a
  profile asks for recording.
- **Service desk** mailboxes: without it, Outpost does not read your inbound
  mailboxes, so no tickets are created from email. The messages stay unread in
  the mailbox, and Outpost starts reading them again once your plan includes
  the service desk.

## For API clients

The API refuses a plan-gated request with HTTP status `402 Payment Required`
and an `application/problem+json` body.

```json
{
  "type": "about:blank",
  "title": "Plan limit reached",
  "status": 402,
  "detail": "Home Lab includes 15 endpoints. Upgrade to Essentials to add more.",
  "reason": "plan_limit",
  "limit": "endpoints",
  "cap": 15,
  "plan": { "code": "homelab-2026", "displayName": "Home Lab" },
  "nextPlan": { "code": "essentials-2026", "displayName": "Essentials", "selfServe": true },
  "upgradeUrl": "https://<portal-address>/portal"
}
```

| Field | Values |
| --- | --- |
| `title` | `Plan limit reached`, `Not included in your plan`, or `Add your own storage` |
| `reason` | `plan_limit`, `plan_feature`, or `own_storage_required` |
| `limit` | `endpoints`, `unmanaged_devices`, `console_users`, `roles`, `clients`, `storage`, or `feature:` followed by a feature code: `service_desk`, `psa`, `multi_client`, `relayed_remote`, or `session_recording` |
| `cap` | The limit, for `plan_limit` only |
| `plan` | Your current plan |
| `nextPlan` | The plan that would allow the request, or `null` |
| `upgradeUrl` | The Outpost portal, when `nextPlan` is self-serve, otherwise `null` |

`detail` is a sentence written for a person. Show it as it is rather than
building your own from the other fields.

`GET /api/v1/organization/plan` returns your plan, its limits and features, and
which plan includes each feature you lack.

## Related

- [Plans and limits](/account/plans-and-limits/)
- [Account and billing](/account/)
- [Console preferences](/depot/console-preferences/)
