Skip to content

List the organization's registered apps

The apps.list operation: GET /api/v1/apps in the REST API and the apps_list tool in the MCP server.

GET/api/v1/apps

Lists the OAuth apps your organization registered for partners (Developers → Apps), newest first, with their review status. Never returns secrets. Filter by status; paginate with limit and starting_after.

At a glance

  • REST: GET /api/v1/apps
  • MCP tool: apps_list
  • Operation ID: apps.list
  • Scope: Organization
  • Permission: agents:read
  • Risk tier: read
  • Dry run: Not supported
  • Idempotency: Not needed (read only)
  • Modes: Test and live
  • Pagination: limit (at most 100) and starting_after
  • Authentication: API key with the agents:read scope
  • Since: M10

Request

Query parameters

FieldTypeRequiredDescription
limitinteger (1 to 100)No
starting_afterocl_… IDNo
statusone of active, disabledNo

Response

200 OK with a JSON object, a page of the list (newest first):

FieldTypeDescription
object"list"
dataarray of object
data[].idocl_… ID
data[].object"app"
data[].ownerOrgIdorg_… ID
data[].namestring
data[].publisherstring
data[].logoUrlstring or null
data[].websiteUrlstring or null
data[].privacyPolicyUrlstring or null
data[].redirectUrisarray of string
data[].typeone of confidential, public
data[].visibilityone of private, listed
data[].reviewobject
data[].review.statusone of not_submitted, pending, changes_requested, approved, rejected
data[].review.atstring or null
data[].verifiedboolean
data[].scopesarray of one of 84 values, e.g. org:read, org:write, org:admin (all in the OpenAPI document)
data[].secretPrefixstring or null
data[].dpopBoundAccessTokensboolean
data[].statusone of active, disabled
data[].suspensionobject or null
data[].createdAtstring
data[].updatedAtstring
has_moreboolean
next_cursorocl_… ID or null

Examples

Registered apps

HTTP
GET /api/v1/apps
Authorization: Bearer or_test_…

Response (200):

JSON
{
  "object": "list",
  "data": [
    {
      "id": "ocl_01m4ttwd3veh9apbewxheq5xha",
      "object": "app",
      "ownerOrgId": "org_01m4ttwd3veh9apbewxheq5xhb",
      "name": "Ledgerly AI",
      "publisher": "Ledgerly AI B.V.",
      "logoUrl": null,
      "websiteUrl": "https://ledgerly.example",
      "privacyPolicyUrl": "https://ledgerly.example/privacy",
      "redirectUris": ["https://ledgerly.example/oauth/callback"],
      "type": "confidential",
      "visibility": "listed",
      "review": {
        "status": "approved",
        "at": "2026-10-25T09:00:00.000Z"
      },
      "verified": true,
      "scopes": ["filings:read", "filings:write", "tasks:read", "tasks:write", "ledger:read"],
      "secretPrefix": "or_cs_Exampl",
      "dpopBoundAccessTokens": false,
      "status": "active",
      "suspension": null,
      "createdAt": "2026-10-25T09:00:00.000Z",
      "updatedAt": "2026-10-25T09:00:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

One per page

HTTP
GET /api/v1/apps?limit=1
Authorization: Bearer or_test_…

Response (200):

JSON
{
  "object": "list",
  "data": [
    {
      "id": "ocl_01m4ttwd3veh9apbewxheq5xha",
      "object": "app",
      "ownerOrgId": "org_01m4ttwd3veh9apbewxheq5xhb",
      "name": "Ledgerly AI",
      "publisher": "Ledgerly AI B.V.",
      "logoUrl": null,
      "websiteUrl": "https://ledgerly.example",
      "privacyPolicyUrl": "https://ledgerly.example/privacy",
      "redirectUris": ["https://ledgerly.example/oauth/callback"],
      "type": "confidential",
      "visibility": "listed",
      "review": {
        "status": "approved",
        "at": "2026-10-25T09:00:00.000Z"
      },
      "verified": true,
      "scopes": ["filings:read", "filings:write", "tasks:read", "tasks:write", "ledger:read"],
      "secretPrefix": "or_cs_Exampl",
      "dpopBoundAccessTokens": false,
      "status": "active",
      "suspension": null,
      "createdAt": "2026-10-25T09:00:00.000Z",
      "updatedAt": "2026-10-25T09:00:00.000Z"
    }
  ],
  "has_more": true,
  "next_cursor": "ocl_01m4ttwd3veh9apbewxheq5xha"
}

Errors

CodeHTTP statusWhenWhat to do
validation_failed400A filter or pagination value is invalid.Fix the fields listed in details.issues and send the request again.
permission_denied403You can't see the organization's apps.Ask an organization owner or admin for a role or scope that allows this action.

It can also return these common errors: api_version_unsupported, authentication_required, api_key_invalid, resource_not_found, dry_run_not_supported, rate_limited, internal_error.