Re-assign an installed app
The app_installations.reassign operation: POST /api/v1/app_installations/{id}/reassign in the REST API and the app_installations_reassign tool in the MCP server.
/api/v1/app_installations/{id}/reassignMakes another organization owner or admin the installer of an app: its calls are attributed to them and limited
to their access from now on. An installation paused because its installer left resumes, with the same tokens.
The new installer must be an org_owner or org_admin of the organization.
At a glance
- REST:
POST /api/v1/app_installations/{id}/reassign - MCP tool:
app_installations_reassign - Operation ID:
app_installations.reassign - 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 | ains_… ID |
Body
A JSON object (Content-Type: application/json):
| Field | Type | Required | Description |
|---|---|---|---|
userId | usr_… ID | Yes |
Response
200 OK with a JSON object:
| Field | Type | Description |
|---|---|---|
id | ains_… ID | |
object | "app_installation" | |
orgId | org_… ID | |
app | object | |
app.id | ocl_… ID | |
app.name | string | |
app.publisher | string | |
app.logoUrl | string or null | |
app.verified | boolean | |
app.status | one of active, disabled | |
app.suspension | object or null | |
installedBy | usr_… ID | |
scopes | array of one of 84 values, e.g. org:read, org:write, org:admin (all in the OpenAPI document) | |
limitTo | object | |
limitTo.entityIds | array of ent_… ID | |
limitTo.brandIds | array of brd_… ID | |
limits | object | |
limits.rps | integer or null | |
limits.mutationsPerDay | integer or null | |
limits.amountLimits | array of object | |
limits.amountLimits[].operationId | string | |
limits.amountLimits[].perCall | money or null | |
limits.amountLimits[].perDay | money or null | |
status | one of active, paused, revoked | |
pausedReason | one of manual, installer_lost_access, platform_suspended, app_disabled or null | |
pausedAt | string or null | |
revokedAt | string or null | |
createdAt | string | |
updatedAt | string |
Examples
Re-assign after the installer left
POST /api/v1/app_installations/ains_01m4ttwd3veh9apbewxheq5xhc/reassign
Authorization: Bearer or_test_…
Idempotency-Key: 3f1c9a52-7d0e-4b8f-9a61-0c2d5e8b7f14
Content-Type: application/json
{
"userId": "usr_01m4ttwd3veh9apbewxheq5xh7"
}
Response (200):
{
"id": "ains_01m4ttwd3veh9apbewxheq5xhc",
"object": "app_installation",
"orgId": "org_01m4ttwd3veh9apbewxheq5xh3",
"app": {
"id": "ocl_01m4ttwd3veh9apbewxheq5xha",
"name": "Ledgerly AI",
"publisher": "Ledgerly AI B.V.",
"logoUrl": null,
"verified": true,
"status": "active",
"suspension": null
},
"installedBy": "usr_01m4ttwd3veh9apbewxheq5xh7",
"scopes": ["filings:read", "filings:write", "tasks:read", "tasks:write"],
"limitTo": {
"entityIds": ["ent_01m4ttwd3veh9apbewxheq5xh4"],
"brandIds": []
},
"limits": {
"rps": null,
"mutationsPerDay": null,
"amountLimits": []
},
"status": "active",
"pausedReason": null,
"pausedAt": null,
"revokedAt": null,
"createdAt": "2026-10-25T09:00:00.000Z",
"updatedAt": "2026-10-26T14:30:00.000Z"
}
Errors
| Code | HTTP status | When | What to do |
|---|---|---|---|
validation_failed | 400 | The installation is revoked. | Fix the fields listed in details.issues and send the request again. |
installer_not_eligible | 400 | The person isn't an active org_owner or org_admin of the organization. | Re-assign the app to an org_owner or org_admin of this organization. |
resource_not_found | 404 | No installation with this ID exists in the organization. | Check the ID and that your credentials are scoped to the right organization, entity, brand and mode. |
version_conflict | 409 | The installation 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: 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.