# Get an app in the platform console

> The platform.apps.get operation: GET /api/v1/platform/apps/{id} in the REST API and the platform_apps_get tool in the MCP server.

One registered app, any organization's (spec §41.3): its publisher and owning organization, its listing, whether
its organization disabled it, the platform's suspension (in force or lifted, with the reasons), the history of
suspensions and reinstatements, and its installations by status: `installations.organizations` is how many
organizations a suspension would pause and notify. Never an organization's data. Platform staff.

## At a glance

- **REST:** `GET /api/v1/platform/apps/{id}`
- **MCP tool:** `platform_apps_get`
- **Operation ID:** `platform.apps.get`
- **Scope:** Platform
- **Permission:** `platform:read`
- **Risk tier:** `read`
- **Dry run:** Not supported
- **Idempotency:** Not needed (read only)
- **Modes:** Test and live
- **Authentication:** API key with the `platform:read` scope
- **Since:** M13

## Request

### Path parameters

| Field | Type       | Description |
| ----- | ---------- | ----------- |
| `id`  | `ocl_…` ID |             |

### Query parameters

This operation takes no query parameters.

## Response

`200 OK` with a JSON object:

| Field                              | Type                                                                           | Description |
| ---------------------------------- | ------------------------------------------------------------------------------ | ----------- |
| `id`                               | `ocl_…` ID                                                                     |             |
| `object`                           | `"platform_app"`                                                               |             |
| `name`                             | string                                                                         |             |
| `publisher`                        | string                                                                         |             |
| `org`                              | object                                                                         |             |
| `org.id`                           | `org_…` ID                                                                     |             |
| `org.slug`                         | string                                                                         |             |
| `org.name`                         | string                                                                         |             |
| `visibility`                       | one of `private`, `listed`                                                     |             |
| `listed`                           | boolean                                                                        |             |
| `reviewStatus`                     | one of `not_submitted`, `pending`, `changes_requested`, `approved`, `rejected` |             |
| `status`                           | one of `active`, `disabled`                                                    |             |
| `suspension`                       | object or null                                                                 |             |
| `createdAt`                        | date-time                                                                      |             |
| `updatedAt`                        | date-time                                                                      |             |
| `logoUrl`                          | string or null                                                                 |             |
| `websiteUrl`                       | string or null                                                                 |             |
| `installations`                    | object                                                                         |             |
| `installations.organizations`      | integer                                                                        |             |
| `installations.active`             | integer                                                                        |             |
| `installations.paused`             | integer                                                                        |             |
| `installations.pausedBySuspension` | integer                                                                        |             |
| `installations.revoked`            | integer                                                                        |             |
| `history`                          | array of object                                                                |             |
| `history[].action`                 | one of `suspended`, `reinstated`                                               |             |
| `history[].at`                     | date-time                                                                      |             |
| `history[].by`                     | `usr_…` ID                                                                     |             |
| `history[].reason`                 | string                                                                         |             |
| `history[].organizations`          | integer                                                                        |             |
| `history[].installationsPaused`    | integer or null                                                                |             |
| `version`                          | integer                                                                        |             |

## Examples

### A listed app installed in 12 organizations

```http
GET /api/v1/platform/apps/ocl_01m4ttwd3veh9apbewxheq5xha
Authorization: Bearer or_test_…
```

Response (`200`):

```json
{
  "id": "ocl_01m4ttwd3veh9apbewxheq5xha",
  "object": "platform_app",
  "name": "Ledgerly AI",
  "publisher": "Ledgerly AI B.V.",
  "org": {
    "id": "org_01m4ttwd3veh9apbewxheq5xhb",
    "slug": "ledgerly",
    "name": "Ledgerly"
  },
  "visibility": "listed",
  "listed": true,
  "reviewStatus": "approved",
  "status": "active",
  "suspension": null,
  "createdAt": "2026-10-25T09:00:00.000Z",
  "updatedAt": "2026-10-25T09:00:00.000Z",
  "logoUrl": null,
  "websiteUrl": "https://ledgerly.example",
  "installations": {
    "organizations": 12,
    "active": 11,
    "paused": 1,
    "pausedBySuspension": 0,
    "revoked": 2
  },
  "history": [],
  "version": 4
}
```

## Errors

| Code                                                                                     | HTTP status | When                           | What to do                                                                                           |
| ---------------------------------------------------------------------------------------- | ----------- | ------------------------------ | ---------------------------------------------------------------------------------------------------- |
| [`resource_not_found`](https://ownrecord.io/docs/reference/errors.md#resource_not_found) | 404         | No registered app has this ID. | Check the ID and that your credentials are scoped to the right organization, entity, brand and mode. |
| [`permission_denied`](https://ownrecord.io/docs/reference/errors.md#permission_denied)   | 403         | You aren't platform staff.     | Ask an organization owner or admin for a role or scope that allows this action.                      |

It can also return these [common errors](https://ownrecord.io/docs/reference.md#common-errors): [`validation_failed`](https://ownrecord.io/docs/reference/errors.md#validation_failed), [`api_version_unsupported`](https://ownrecord.io/docs/reference/errors.md#api_version_unsupported), [`authentication_required`](https://ownrecord.io/docs/reference/errors.md#authentication_required), [`api_key_invalid`](https://ownrecord.io/docs/reference/errors.md#api_key_invalid), [`dry_run_not_supported`](https://ownrecord.io/docs/reference/errors.md#dry_run_not_supported), [`rate_limited`](https://ownrecord.io/docs/reference/errors.md#rate_limited), [`internal_error`](https://ownrecord.io/docs/reference/errors.md#internal_error).
