Disable a registered app
The apps.disable operation: POST /api/v1/apps/{id}/disable in the REST API and the apps_disable tool in the MCP server.
/api/v1/apps/{id}/disableDisables an app for good, in every organization at once, in one transaction:
- every access and refresh token, authorization code and grant it holds is deleted, and so are the tokens of the agents it owns;
- every installation that isn't uninstalled is paused (
pausedReason: app_disabled, whatever it was before); it never resumes (app_installations.resumeanswersoauth_client_disabled), and it can still be uninstalled; - from then on the OAuth server issues the app and its agents nothing and refuses their tokens, and nothing installs it.
Your organization and every organization with the app installed get the APP_DISABLED alert (high: their
owners and admins are emailed); other organizations aren't told who disabled it. Nothing re-enables an app:
register a new one instead. Disabling a disabled app changes nothing.
At a glance
- REST:
POST /api/v1/apps/{id}/disable - MCP tool:
apps_disable - Operation ID:
apps.disable - Scope: Organization
- Permission:
agents:admin - Risk tier:
security - Dry run: Supported (send
Ownrecord-Dry-Run: true) - Idempotency:
Idempotency-Keyrequired - Modes: Test and live
- Authentication: API key with the
agents:adminscope - Since: M10
Request
Path parameters
| Field | Type | Description |
|---|---|---|
id | ocl_… ID |
Body
This operation takes no body.
Response
200 OK with a JSON object:
| Field | Type | Description |
|---|---|---|
id | ocl_… ID | |
object | "app" | |
ownerOrgId | org_… ID | |
name | string | |
publisher | string | |
logoUrl | string or null | |
websiteUrl | string or null | |
privacyPolicyUrl | string or null | |
redirectUris | array of string | |
type | one of confidential, public | |
visibility | one of private, listed | |
review | object | |
review.status | one of not_submitted, pending, changes_requested, approved, rejected | |
review.at | string or null | |
verified | boolean | |
scopes | array of one of 84 values, e.g. org:read, org:write, org:admin (all in the OpenAPI document) | |
secretPrefix | string or null | |
dpopBoundAccessTokens | boolean | |
status | one of active, disabled | |
suspension | object or null | |
createdAt | string | |
updatedAt | string |
Examples
Disable an app
POST /api/v1/apps/ocl_01m4ttwd3veh9apbewxheq5xha/disable
Authorization: Bearer or_test_…
Idempotency-Key: 3f1c9a52-7d0e-4b8f-9a61-0c2d5e8b7f14
Response (200):
{
"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": "disabled",
"suspension": null,
"createdAt": "2026-10-25T09:00:00.000Z",
"updatedAt": "2026-10-26T14:30:00.000Z"
}
Errors
| Code | HTTP status | When | What to do |
|---|---|---|---|
resource_not_found | 404 | Your organization registered no app with this ID. | Check the ID and that your credentials are scoped to the right organization, entity, brand and mode. |
version_conflict | 409 | The app or one of its installations changed at the same moment; retry. | Fetch the object again and retry the change. |
permission_denied | 403 | You can't manage 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: validation_failed, api_version_unsupported, invalid_json, unsupported_media_type, authentication_required, api_key_invalid, idempotency_key_required, idempotency_key_reused, idempotency_in_progress, approval_required, approval_rejected, approval_expired, stale_approval, approval_policy_denied, rate_limited, internal_error.