Skip to content

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.

GET/api/v1/platform/app_reviews/{id}

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

FieldTypeDescription
idocl_… ID

Query parameters

This operation takes no query parameters.

Response

200 OK with a JSON object:

FieldTypeDescription
idocl_… ID
object"app_listing"
ownerOrgIdorg_… ID
namestring
publisherstring
visibilityone of private, listed
appStatusone of active, disabled
statusone of not_submitted, pending, changes_requested, approved, rejected
listedboolean
scopesarray of one of 84 values, e.g. org:read, org:write, org:admin (all in the OpenAPI document)
approvedScopesarray of one of 84 values, e.g. org:read, org:write, org:admin (all in the OpenAPI document) or null
pendingScopesarray of one of 84 values, e.g. org:read, org:write, org:admin (all in the OpenAPI document)
submittedAtdate-time or null
decidedAtdate-time or null
reasonstring or null
applicationobject or null
historyarray of object
history[].actionone of submitted, withdrawn, approved, rejected, changes_requested, scopes_added, identity_changed, unlisted
history[].atdate-time
history[].bystring or null
history[].reasonstring or null
history[].scopesarray of one of 84 values, e.g. org:read, org:write, org:admin (all in the OpenAPI document)
versioninteger
orgobject
org.idorg_… ID
org.slugstring
org.namestring
checklistobject or null
redirectUrisarray of string
websiteUrlstring or null
logoUrlstring or null
unjustifiedScopesarray of one of 84 values, e.g. org:read, org:write, org:admin (all in the OpenAPI document)
referenceobject
reference.questionnaireobject or null
reference.checklistobject
reference.checklist.versioninteger
reference.checklist.statusone of proposed, confirmed
reference.checklist.itemsarray of object
reference.checklist.items[].idstring
reference.checklist.items[].requiredboolean
reference.checklist.items[].textstring

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

CodeHTTP statusWhenWhat to do
resource_not_found404No registered app has this ID.Check the ID and that your credentials are scoped to the right organization, entity, brand and mode.
permission_denied403You 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: validation_failed, api_version_unsupported, authentication_required, api_key_invalid, dry_run_not_supported, rate_limited, internal_error.