# Organization already holds a plan

> Canonical HTML: https://screenrig.ai/problems/app-store-plan-conflict

HTTP 409 · `app_store_plan_conflict`

## What it means

The API answers with HTTP 409 Conflict and an `application/problem+json` document when the condition is Organization already holds a plan. The document's `type` member is `https://screenrig.ai/problems/app-store-plan-conflict`, the address of this page, and its `code` member is `app_store_plan_conflict`.

## What to do

The organization already holds this plan or a higher one through another source: staff, invoicing or another App Store subscription. Cancel the App Store subscription under Manage subscription, or ask support.

## Should you retry?

The `retryable` member appears only on HTTP 5xx problems, so this one has none. Follow the steps under What to do before sending the request again.

## Example response

Most routes answer with the error in the first entry of `errors`, and the document members `instance` and `request_id` beside it. The `type`, `code`, `title` and `status` of this problem type are fixed; `detail` varies per request, and `hint` is the registry default unless the handler sets a more specific one.

~~~http
HTTP/1.1 409 Conflict
Content-Type: application/problem+json

{
  "errors": [
    {
      "status": 409,
      "code": "app_store_plan_conflict",
      "type": "https://screenrig.ai/problems/app-store-plan-conflict",
      "title": "Organization already holds a plan",
      "detail": "What went wrong in this request.",
      "hint": "The organization already holds this plan or a higher one through another source: staff, invoicing or another App Store subscription. Cancel the App Store subscription under Manage subscription, or ask support."
    }
  ],
  "instance": "INSTANCE",
  "request_id": "REQUEST_ID",
  "server_time": "2026-01-01T00:00:00Z"
}
~~~

## In the API contract

The OpenAPI contract describes this problem in these words:

> The app finishes the transaction after a 2xx or a definitive 4xx problem. Problems: app_store_transaction_invalid (422), app_store_account_mismatch (409), education_not_eligible (403), app_store_plan_conflict (409), billed_by_reseller (409, the organization is delegated to a reseller, which pays for its plan).

## Operations that name this problem

These operations name this problem in the API reference:

- [Record App Store Transaction](https://screenrig.ai/docs/api/billing#op-recordAppStoreTransaction) — `POST /api/organizations/{organization_id}/app-store/transactions`

## Related problems

The contract mentions these problems alongside this one:

- [The organization is billed through its reseller](https://screenrig.ai/problems/billed-by-reseller) — `billed_by_reseller`
- [App Store purchase could not be verified](https://screenrig.ai/problems/app-store-transaction-invalid) — `app_store_transaction_invalid`
- [Purchase belongs to another organization](https://screenrig.ai/problems/app-store-account-mismatch) — `app_store_account_mismatch`
- [Organization is not eligible for the Education plan](https://screenrig.ai/problems/education-not-eligible) — `education_not_eligible`

## Player action

This problem defines no Player action class. It belongs to a project, pairing or account flow that an agent or the dashboard drives.

## Reference

| Field | Value |
| --- | --- |
| Code | `app_store_plan_conflict` |
| HTTP status | `409 Conflict` |
| Type | `https://screenrig.ai/problems/app-store-plan-conflict` |
| Player action | `none` |

- [All problem types](https://screenrig.ai/problems)
- [API reference](https://screenrig.ai/docs/api#problems)
- [Problem registry YAML](https://screenrig.ai/docs/api/problems.yaml)
