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/appsLists 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) andstarting_after - Authentication: API key with the
agents:readscope - Since: M10
Request
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
limit | integer (1 to 100) | No | |
starting_after | ocl_… ID | No | |
status | one of active, disabled | No |
Response
200 OK with a JSON object, a page of the list (newest first):
| Field | Type | Description |
|---|---|---|
object | "list" | |
data | array of object | |
data[].id | ocl_… ID | |
data[].object | "app" | |
data[].ownerOrgId | org_… ID | |
data[].name | string | |
data[].publisher | string | |
data[].logoUrl | string or null | |
data[].websiteUrl | string or null | |
data[].privacyPolicyUrl | string or null | |
data[].redirectUris | array of string | |
data[].type | one of confidential, public | |
data[].visibility | one of private, listed | |
data[].review | object | |
data[].review.status | one of not_submitted, pending, changes_requested, approved, rejected | |
data[].review.at | string or null | |
data[].verified | boolean | |
data[].scopes | array of one of 84 values, e.g. org:read, org:write, org:admin (all in the OpenAPI document) | |
data[].secretPrefix | string or null | |
data[].dpopBoundAccessTokens | boolean | |
data[].status | one of active, disabled | |
data[].suspension | object or null | |
data[].createdAt | string | |
data[].updatedAt | string | |
has_more | boolean | |
next_cursor | ocl_… 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
| Code | HTTP status | When | What to do |
|---|---|---|---|
validation_failed | 400 | A filter or pagination value is invalid. | Fix the fields listed in details.issues and send the request again. |
permission_denied | 403 | You 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.