# Resume a paused app

> The app_installations.resume operation: POST /api/v1/app_installations/{id}/resume in the REST API and the app_installations_resume tool in the MCP server.

Resumes a paused installation. After a manual pause the app must ask for authorization again (its tokens
were revoked). An installation paused because its installer left can only resume once its installer has access
again: re-assign it instead (`app_installations.reassign`), which also resumes it. Resuming an active
installation changes nothing; a revoked one can't be resumed.

While Ownrecord suspends the app (`pausedReason: platform_suspended`), it can't be resumed (`app_suspended`).
After a reinstatement, resuming it is your decision; the app then asks for authorization again.

An app disabled by the organization that registered it (`pausedReason: app_disabled`) never resumes
(`oauth_client_disabled`): uninstall it.

## At a glance

- **REST:** `POST /api/v1/app_installations/{id}/resume`
- **MCP tool:** `app_installations_resume`
- **Operation ID:** `app_installations.resume`
- **Scope:** Organization
- **Permission:** `agents:admin`
- **Risk tier:** `security`
- **Dry run:** Supported (send `Ownrecord-Dry-Run: true`)
- **Idempotency:** `Idempotency-Key` required
- **Modes:** Test and live
- **Authentication:** API key with the `agents:admin` scope
- **Since:** M10

## Request

### Path parameters

| Field | Type        | Description |
| ----- | ----------- | ----------- |
| `id`  | `ains_…` ID |             |

### Body

This operation takes no body.

## 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

### Resume an app

```http
POST /api/v1/app_installations/ains_01m4ttwd3veh9apbewxheq5xhc/resume
Authorization: Bearer or_test_…
Idempotency-Key: 3f1c9a52-7d0e-4b8f-9a61-0c2d5e8b7f14
```

Response (`200`):

```json
{
  "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_01m4ttwd3veh9apbewxheq5xh6",
  "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`](https://ownrecord.io/docs/reference/errors.md#validation_failed)           | 400         | The installation is revoked.                                                 | Fix the fields listed in `details.issues` and send the request again.                                                                                                                                                                                                                     |
| [`oauth_client_disabled`](https://ownrecord.io/docs/reference/errors.md#oauth_client_disabled)   | 409         | The organization that registered the app disabled it for good: uninstall it. | Register a new app, or create a new agent.                                                                                                                                                                                                                                                |
| [`app_suspended`](https://ownrecord.io/docs/reference/errors.md#app_suspended)                   | 409         | Ownrecord suspended the app: it can't be resumed until it is reinstated.     | The app can't be installed, resumed or authorized while the suspension lasts. Its organization's owners and admins, and those of every organization that installed it, were emailed the reason. Once Ownrecord reinstates it, resume its installation under Organization → Agents & apps. |
| [`installer_not_eligible`](https://ownrecord.io/docs/reference/errors.md#installer_not_eligible) | 400         | The installer still has no access: re-assign the app first.                  | Re-assign the app to an org_owner or org_admin of this organization.                                                                                                                                                                                                                      |
| [`resource_not_found`](https://ownrecord.io/docs/reference/errors.md#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`](https://ownrecord.io/docs/reference/errors.md#version_conflict)             | 409         | The installation changed at the same moment; retry.                          | Fetch the object again and retry the change.                                                                                                                                                                                                                                              |
| [`permission_denied`](https://ownrecord.io/docs/reference/errors.md#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](https://ownrecord.io/docs/reference.md#common-errors): [`api_version_unsupported`](https://ownrecord.io/docs/reference/errors.md#api_version_unsupported), [`invalid_json`](https://ownrecord.io/docs/reference/errors.md#invalid_json), [`unsupported_media_type`](https://ownrecord.io/docs/reference/errors.md#unsupported_media_type), [`authentication_required`](https://ownrecord.io/docs/reference/errors.md#authentication_required), [`api_key_invalid`](https://ownrecord.io/docs/reference/errors.md#api_key_invalid), [`idempotency_key_required`](https://ownrecord.io/docs/reference/errors.md#idempotency_key_required), [`idempotency_key_reused`](https://ownrecord.io/docs/reference/errors.md#idempotency_key_reused), [`idempotency_in_progress`](https://ownrecord.io/docs/reference/errors.md#idempotency_in_progress), [`approval_required`](https://ownrecord.io/docs/reference/errors.md#approval_required), [`approval_rejected`](https://ownrecord.io/docs/reference/errors.md#approval_rejected), [`approval_expired`](https://ownrecord.io/docs/reference/errors.md#approval_expired), [`stale_approval`](https://ownrecord.io/docs/reference/errors.md#stale_approval), [`approval_policy_denied`](https://ownrecord.io/docs/reference/errors.md#approval_policy_denied), [`rate_limited`](https://ownrecord.io/docs/reference/errors.md#rate_limited), [`internal_error`](https://ownrecord.io/docs/reference/errors.md#internal_error).
