publ betaReference (MCP guide)
Open publ console

papps_get

[Migration map](../reference/tool-name-migration.md).

# papps_get

Read the feature catalog, installed instances, plan-specific pricing options and install/remove restrictions before changing an existing channel. This tool does not install features, change pricing, refresh credentials or create a task.

| Input | Contract |
| --- | --- |
| `channelCode` | Required nonempty selected-channel code; `.` and `..` are rejected |
| `pAppCode` | Optional exact feature code containing ASCII letters, digits or underscores |
| `query` | Optional case-insensitive substring search in catalog code and friendly names; at most 200 characters, default empty |
| `offset` | Optional integer, at least 0; default 0 |
| `limit` | Optional integer 1–50; default 20 |

```json
{"channelCode":"selected-channel-code","query":"board","offset":0,"limit":20}
```

```json
{"channelCode":"selected-channel-code","pAppCode":"A00003"}
```

Codes and channels are illustrative; select real values from authorized discovery. OWNER or a selected-channel DELEGATEE with `MANAGE_P_APP_INSTALL_UNINSTALL` is required, even for this read. CREATOR is denied. Hosted account scope excludes this tool; a hosted channel must match its exact selected channel.

Success returns `code:PAPPS`, channel/current plan, nullable `accountType`, `apps`, `installed`, `detail`, `catalogCoverage`, `revision`, `total`, `nextOffset`, `removalImpact`, `paymentPolicy` and verification. The task-type label `papp-lifecycle` does not mean that a read created a task.

- `apps` contains the filtered catalog slice. It excludes X00001 and entries hidden from the store, but visible unreleased entries can remain with an `installBlock`. `pricingModels` are filtered by the current plan's class prefix. `directInstall` combines install eligibility, matching feature code and confirmed zero fees; it is not an unconditional authorization to install.
- `installed` contains current installed rows, excluding X00001 and optionally filtering by `pAppCode`. Query and pagination do not limit this array. Keep the numeric installed ID distinct from its feature code and pricing-model `ppmid`; `alias:null` stays null.
- `detail` is read only when a supplied `pAppCode` identifies an installed entry. Otherwise it is null. A missing or mismatched detail for an entry in the installed snapshot fails verification instead of reporting confirmed absence.
- `total` and `nextOffset` describe the filtered catalog, not installed-row pagination. `catalogCoverage.retainedCount` describes all retained catalog rows before display filtering. `omittedCodes` lists sorted placeholder identifiers; `allRowsUsable` is false when any were omitted. These fields do not prove store-wide availability or effective visitor access.

Only catalog rows with all three of `manifest`, `releaseControl` and `information` explicitly null may be omitted as placeholders. Invalid present metadata and duplicate identifiers still fail. Omission never supplies a free price or install eligibility; an installed feature whose catalog policy cannot be resolved cannot be removed automatically. Account type null is unknown, not PERSONAL or BUSINESS.

The revision covers the full received plan/currency/account/catalog/installed snapshot and nonempty omission diagnostics, with relevant arrays sorted for hashing. Search and pagination do not narrow it. Copy the returned hash into install/remove; do not hash only the displayed page. A client revision is not an atomic server write lock.

`installedPAppPricingModels.current` and `next` preserve current and scheduled states. A scheduled next plan is not active. Pricing values remain strings; direct installation requires verified zero installation, monthly and usage fees in the channel's currency. A FREE label alone is insufficient. See the [workflow guide](../guides/papps.md#costs-and-prerequisites).

`verification.confirmed:true` with method `catalog_and_installed_read` confirms the accepted stored observation; `effectiveVisitorUse:false` excludes visitor functionality. Response-shape errors use `PAPP_RESPONSE_UNVERIFIED`; list/detail disagreement uses `PAPP_DETAIL_UNVERIFIED`. These are not empty-list successes. The common navigation wrapper returns one appropriate store destination when resolvable, not one link per row.

[Install](publ_papp_install.md) · [Remove](publ_papp_remove.md) · [Human pricing/plan handoff](publ_billing_handoff.md) · [Workflow and evidence boundaries](../guides/papps.md)

## Selected installed identity

The detail response must match both the selected numeric installed ID and feature
code. The same feature code alone is insufficient. A mismatch returns the
existing detail/target error before exposing detail or a console destination. No
payment, installation, removal or credential refresh is performed by this check.

## Installed-feature availability

Installation enables the feature; there is no separate activation/deactivation
step. Raw `isActive` is a legacy observed value and must not be interpreted as an
activation prerequisite. Use `design_access_get` and `design_access_apply` for
supported visitor-access restrictions, and retain their paid-access limitations.
Uninstall destroys data and is not a substitute for restricting access. Catalog
publication, product availability, pricing and notification switches remain
separate settings.

## Inputs

| Field | Required here | Contract |
| --- | --- | --- |
| `app` | No | string; min length 1; max length 100; The feature: its code from papps_get (for example C00001) or its exact store name. |
| `query` | No | string; max length 200 |
| `offset` | No | integer; minimum 0 |
| `limit` | No | integer; minimum 1; maximum 50 |