---
title: "Plan a Dev and Prod data assignment change"
method: POST
path: "/v1/projects/{project_id}/data-changes:plan"
---

# Plan a Dev and Prod data assignment change

`POST /v1/projects/{project_id}/data-changes:plan`

## Request

- Base URL: `https://app.ohmyho.st`
- URL: `https://app.ohmyho.st/v1/projects/{project_id}/data-changes:plan`
- Auth: HTTP bearer

Plans one of four Owner-only changes without copying data and issues a ten-minute action-bound confirmation token. shared remains the default at project creation. A Dev reset preserves secrets and access mode and renews a protected share link.

## Path parameters

- `project_id` string, required

## Headers

- `X-Request-Id` string

## Request body

- ProjectDataChangeRequest
  - `change` 'isolate_prod_keeps_data' | 'isolate_dev_keeps_data' | 'share_prod_keeps_data' | 'reset_dev', required: Owner-confirmed assignment change. No application data is copied; physical resources are provisioned lazily.

## Response `200`

The data assignment plan and its exact destructive effects.

- ProjectDataChangePlan: An action-bound ten-minute plan naming retained, retired and lazily created data areas. The workspace Owner confirms its destructive effects before execution.
  - `action` 'data_change', required
  - `project_id` string, required
  - `change` 'isolate_prod_keeps_data' | 'isolate_dev_keeps_data' | 'share_prod_keeps_data' | 'reset_dev', required: Owner-confirmed assignment change. No application data is copied; physical resources are provisioned lazily.
  - `data_mode_before` 'shared' | 'isolated', required
  - `data_mode_after` 'shared' | 'isolated', required
  - `effects` string[], required
  - `destructive_effects` string[], required
  - `redeploy_environments` string[], required
  - `risks` string[], required
  - `resource_etag` string, required: Send as If-Match with this plan's confirmation token.
  - `confirmation_token` string, required: Opaque, single-action token bound to the planned action, project, target resource, and resource ETag.
  - `created_at` string, date-time, required
  - `expires_at` string, date-time, required

## Other responses

- `400`: The request failed.
- `401`: The request failed.
- `403`: The request failed.
- `404`: The resource does not exist or is not visible to the authenticated principal.
- `409`: The request failed.
- `429`: The request failed.
- `503`: The request failed.

---

[API](https://skmtc.dev/ohmyho/apis/ohmyho-st-api.md) · [All operations](https://skmtc.dev/ohmyho/apis/ohmyho-st-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ohmyho/apis/ohmyho-st-api/revisions/d069888c0017?raw)
