# Get a listed app's review

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

One app of the listed-app review queue (spec §41.3): its application (publisher identity, privacy policy, the
questionnaire's answers, each scope's justification), its redirect URIs and links, the scopes already approved,
the history of submissions and decisions, and the owning organization. `reference` has the questionnaire
version the application answered (with its questions) and the current review checklist to tick with
`platform.app_reviews.decide`. Platform admins only.

## At a glance

- **REST:** `GET /api/v1/platform/app_reviews/{id}`
- **MCP tool:** `platform_app_reviews_get`
- **Operation ID:** `platform.app_reviews.get`
- **Scope:** Platform
- **Permission:** `platform:write`
- **Risk tier:** `read`
- **Dry run:** Not supported
- **Idempotency:** Not needed (read only)
- **Modes:** Test and live
- **Authentication:** API key with the `platform:write` 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`                               | `"app_listing"`                                                                                                              |             |
| `ownerOrgId`                           | `org_…` ID                                                                                                                   |             |
| `name`                                 | string                                                                                                                       |             |
| `publisher`                            | string                                                                                                                       |             |
| `visibility`                           | one of `private`, `listed`                                                                                                   |             |
| `appStatus`                            | one of `active`, `disabled`                                                                                                  |             |
| `status`                               | one of `not_submitted`, `pending`, `changes_requested`, `approved`, `rejected`                                               |             |
| `listed`                               | boolean                                                                                                                      |             |
| `scopes`                               | array of one of 84 values, e.g. `org:read`, `org:write`, `org:admin` (all in the OpenAPI document)                           |             |
| `approvedScopes`                       | array of one of 84 values, e.g. `org:read`, `org:write`, `org:admin` (all in the OpenAPI document) or null                   |             |
| `pendingScopes`                        | array of one of 84 values, e.g. `org:read`, `org:write`, `org:admin` (all in the OpenAPI document)                           |             |
| `submittedAt`                          | date-time or null                                                                                                            |             |
| `decidedAt`                            | date-time or null                                                                                                            |             |
| `reason`                               | string or null                                                                                                               |             |
| `application`                          | object or null                                                                                                               |             |
| `history`                              | array of object                                                                                                              |             |
| `history[].action`                     | one of `submitted`, `withdrawn`, `approved`, `rejected`, `changes_requested`, `scopes_added`, `identity_changed`, `unlisted` |             |
| `history[].at`                         | date-time                                                                                                                    |             |
| `history[].by`                         | string or null                                                                                                               |             |
| `history[].reason`                     | string or null                                                                                                               |             |
| `history[].scopes`                     | array of one of 84 values, e.g. `org:read`, `org:write`, `org:admin` (all in the OpenAPI document)                           |             |
| `version`                              | integer                                                                                                                      |             |
| `org`                                  | object                                                                                                                       |             |
| `org.id`                               | `org_…` ID                                                                                                                   |             |
| `org.slug`                             | string                                                                                                                       |             |
| `org.name`                             | string                                                                                                                       |             |
| `checklist`                            | object or null                                                                                                               |             |
| `redirectUris`                         | array of string                                                                                                              |             |
| `websiteUrl`                           | string or null                                                                                                               |             |
| `logoUrl`                              | string or null                                                                                                               |             |
| `unjustifiedScopes`                    | array of one of 84 values, e.g. `org:read`, `org:write`, `org:admin` (all in the OpenAPI document)                           |             |
| `reference`                            | object                                                                                                                       |             |
| `reference.questionnaire`              | object or null                                                                                                               |             |
| `reference.checklist`                  | object                                                                                                                       |             |
| `reference.checklist.version`          | integer                                                                                                                      |             |
| `reference.checklist.status`           | one of `proposed`, `confirmed`                                                                                               |             |
| `reference.checklist.items`            | array of object                                                                                                              |             |
| `reference.checklist.items[].id`       | string                                                                                                                       |             |
| `reference.checklist.items[].required` | boolean                                                                                                                      |             |
| `reference.checklist.items[].text`     | string                                                                                                                       |             |

## Examples

### An application

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

Response (`200`):

```json
{
  "id": "ocl_01m4ttwd3veh9apbewxheq5xha",
  "object": "app_listing",
  "ownerOrgId": "org_01m4ttwd3veh9apbewxheq5xhb",
  "name": "Ledgerly AI",
  "publisher": "Ledgerly AI B.V.",
  "visibility": "listed",
  "appStatus": "active",
  "status": "pending",
  "listed": false,
  "scopes": ["filings:read", "filings:write", "tasks:read", "tasks:write", "ledger:read"],
  "approvedScopes": null,
  "pendingScopes": ["filings:read", "filings:write", "tasks:read", "tasks:write", "ledger:read"],
  "submittedAt": "2026-10-30T09:00:00.000Z",
  "decidedAt": null,
  "reason": null,
  "application": {
    "publisher": {
      "legalName": "Ledgerly AI B.V.",
      "country": "NL",
      "websiteUrl": "https://ledgerly.example",
      "contact": {
        "name": "Mira de Vries",
        "email": "partners@ledgerly.example"
      }
    },
    "privacyPolicyUrl": "https://ledgerly.example/privacy",
    "questionnaire": {
      "version": 1,
      "answers": [
        {
          "questionId": "data_location",
          "answer": null,
          "details": "AWS eu-central-1 (Frankfurt), Germany"
        },
        {
          "questionId": "encryption_in_transit",
          "answer": "yes",
          "details": null
        },
        {
          "questionId": "encryption_at_rest",
          "answer": "yes",
          "details": null
        },
        {
          "questionId": "credential_storage",
          "answer": "yes",
          "details": null
        },
        {
          "questionId": "staff_access",
          "answer": "yes",
          "details": null
        },
        {
          "questionId": "incident_response",
          "answer": "yes",
          "details": null
        },
        {
          "questionId": "subprocessors",
          "answer": "yes",
          "details": "AWS (hosting), Postmark (email)"
        },
        {
          "questionId": "model_training",
          "answer": "no",
          "details": null
        },
        {
          "questionId": "data_deletion",
          "answer": "yes",
          "details": "Within 30 days of uninstalling"
        },
        {
          "questionId": "vulnerability_management",
          "answer": "yes",
          "details": null
        }
      ]
    },
    "scopeJustifications": [
      {
        "scope": "filings:read",
        "justification": "Reads filing periods to prepare each return."
      },
      {
        "scope": "filings:write",
        "justification": "Records the prepared return and its submission."
      },
      {
        "scope": "tasks:read",
        "justification": "Finds the filing tasks assigned to the app."
      },
      {
        "scope": "tasks:write",
        "justification": "Claims and completes filing tasks."
      },
      {
        "scope": "ledger:read",
        "justification": "Reconciles the return with the tax payable accounts."
      }
    ],
    "partnerTermsVersion": "1.0",
    "submittedBy": "usr_01m4ttwd3veh9apbewxheq5xhf"
  },
  "history": [
    {
      "action": "submitted",
      "at": "2026-10-30T09:00:00.000Z",
      "by": "usr_01m4ttwd3veh9apbewxheq5xhf",
      "reason": null,
      "scopes": []
    }
  ],
  "version": 3,
  "org": {
    "id": "org_01m4ttwd3veh9apbewxheq5xhb",
    "slug": "ledgerly",
    "name": "Ledgerly AI"
  },
  "checklist": null,
  "redirectUris": ["https://ledgerly.example/oauth/callback"],
  "websiteUrl": "https://ledgerly.example",
  "logoUrl": null,
  "unjustifiedScopes": [],
  "reference": {
    "questionnaire": {
      "version": 1,
      "status": "proposed",
      "questions": [
        {
          "id": "data_location",
          "type": "text",
          "required": true,
          "text": "Where do you store and process organizations' data? Name the countries and hosting providers.",
          "detailsRequiredWhen": null,
          "hint": null
        }
      ]
    },
    "checklist": {
      "version": 1,
      "status": "proposed",
      "items": [
        {
          "id": "publisher_identity",
          "required": true,
          "text": "The publisher's legal name, country and website belong to a real company."
        }
      ]
    }
  }
}
```

## 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 a platform admin.   | 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).
