---
title: "PATCH /v1/{org_id}/plans/{plan_id}/"
method: PATCH
path: "/v1/{org_id}/plans/{plan_id}/"
tags: ["Plans - By Org"]
---

# PATCH /v1/{org_id}/plans/{plan_id}/

`PATCH /v1/{org_id}/plans/{plan_id}/`

Retrieve / Update / Destroy view.

    Only PATCH is allowed for updating to avoid undesired deletion
    of nested relationships, due to the nested JSON API structure.

## Request body

- PlanDetail
  - `id` integer
  - `floor` PlanFloorSerializerV1
    - `id` integer
    - `name` string, required
    - `parent_id` integer, nullable
    - `status` 'planning' | 'live'
  - `created_at` string, date-time
  - `updated_at` string, date-time
  - `image_url` string
  - `source_pdf_url` string
  - `source_pdf_page` integer, nullable
  - `areas` AreaSerializerV1[]
    - `id` integer
    - `name` string, nullable
    - `shape` 'polygon' | 'circle'
    - `locked` boolean
    - `polygon_verticies` object, nullable
    - `circle_centroid_x_meters` number, nullable
    - `circle_centroid_y_meters` number, nullable
    - `circle_radius_meters` number, nullable
    - `space_id` integer
  - `reference_points` ReferencePoint[]
    - `id` integer
    - `enabled` boolean
    - `position_x_meters` number, required
    - `position_y_meters` number, required
  - `reference_rulers` ReferenceRulerSerializerV1[]
    - `id` integer
    - `enabled` boolean
    - `position_a_x_meters` number, required
    - `position_a_y_meters` number, required
    - `position_b_x_meters` number, required
    - `position_b_y_meters` number, required
    - `position_label_x_meters` number
    - `position_label_y_meters` number
  - `reference_heights` ReferenceHeightSerializerV1[]
    - `id` integer
    - `enabled` boolean
    - `position_x_meters` number, required
    - `position_y_meters` number, required
  - `plan_sensors` PlanSensorSerializerV1[]
    - `id` integer
    - `sensor_type` 'entry' | 'oa' | 'waffle'
    - `locked` boolean
    - `sensor_serial_number` string
    - `centroid_from_origin_x_meters` number, nullable
    - `centroid_from_origin_y_meters` number, nullable
    - `rotation` number, nullable
    - `height_meters` number, nullable
    - `diagnostic_info` string
    - `status` string
    - `last_heartbeat` string
    - `notes` string
    - `plan_sensor_index` integer
    - `cad_id` string
    - `bounding_box_filter` 'none' | 'cloud' | 'device'
    - `device_function` string
  - `photo_groups` PlanPhotoGroupSerialzer[]
    - `id` integer
    - `name` string, required
    - `notes` string
    - `photos` PlanPhoto[]
      - `id` integer
      - `name` string, required
      - `url` string, uri
      - `created_at` string, date-time
      - `updated_at` string, date-time
    - `photo_ids` string[]
    - `locked` boolean
    - `origin_x_pixels` number
    - `origin_y_pixels` number
    - `created_at` string, date-time
    - `updated_at` string, date-time
  - `floor_id` integer, required
  - `image_key` string
  - `source_pdf_key` string, nullable
  - `image_width_pixels` integer, required
  - `image_height_pixels` integer, required
  - `image_pixels_per_meter` number, required
  - `origin_x_pixels` number
  - `origin_y_pixels` number
  - `origin_angle_degrees` number
  - `floorplan_cad_origin_x` number
  - `floorplan_cad_origin_y` number
  - `floorplan_cad_rotation_degrees` number
  - `measurement_point_a_x_pixels` number, nullable
  - `measurement_point_a_y_pixels` number, nullable
  - `measurement_point_b_x_pixels` number, nullable
  - `measurement_point_b_y_pixels` number, nullable
  - `measurement_computed_length_meters` number, nullable
  - `measurement_user_entered_length_inches` string, nullable
  - `measurement_user_entered_length_feet` string, nullable
  - `ceiling_raster_key` string, nullable
  - `ceiling_raster_url` string, uri
  - `ceiling_raster_floorplan_origin_x` number
  - `ceiling_raster_floorplan_origin_y` number
  - `ceiling_raster_floorplan_angle_degrees` number
  - `ceiling_raster_opacity_percent` integer
  - `ceiling_raster_notes` string
  - `ceiling_raster_min_height_limit_meters` number
  - `ceiling_raster_max_height_limit_meters` number
  - `point_cloud_transformation_matrix` object, nullable
  - `point_cloud_transformation_steps` object, nullable
  - `last_oa_sensor_index` string
  - `last_entry_sensor_index` string
  - `active_dxf_id` integer, nullable
  - `active_dxf_full_raster_url` string
  - `latest_dxf` string

## Response `200`

Updated

- OptionalPlanDetailSerializer
  - `id` integer
  - `floor` PlanFloorSerializerV1
    - `id` integer
    - `name` string, required
    - `parent_id` integer, nullable
    - `status` 'planning' | 'live'
  - `created_at` string, date-time
  - `updated_at` string, date-time
  - `image_url` string
  - `source_pdf_url` string
  - `source_pdf_page` integer, nullable
  - `areas` AreaSerializerV1[]
    - `id` integer
    - `name` string, nullable
    - `shape` 'polygon' | 'circle'
    - `locked` boolean
    - `polygon_verticies` object, nullable
    - `circle_centroid_x_meters` number, nullable
    - `circle_centroid_y_meters` number, nullable
    - `circle_radius_meters` number, nullable
    - `space_id` integer
  - `reference_points` ReferencePoint[]
    - `id` integer
    - `enabled` boolean
    - `position_x_meters` number, required
    - `position_y_meters` number, required
  - `reference_rulers` ReferenceRulerSerializerV1[]
    - `id` integer
    - `enabled` boolean
    - `position_a_x_meters` number, required
    - `position_a_y_meters` number, required
    - `position_b_x_meters` number, required
    - `position_b_y_meters` number, required
    - `position_label_x_meters` number
    - `position_label_y_meters` number
  - `reference_heights` ReferenceHeightSerializerV1[]
    - `id` integer
    - `enabled` boolean
    - `position_x_meters` number, required
    - `position_y_meters` number, required
  - `plan_sensors` PlanSensorSerializerV1[]
    - `id` integer
    - `sensor_type` 'entry' | 'oa' | 'waffle'
    - `locked` boolean
    - `sensor_serial_number` string
    - `centroid_from_origin_x_meters` number, nullable
    - `centroid_from_origin_y_meters` number, nullable
    - `rotation` number, nullable
    - `height_meters` number, nullable
    - `diagnostic_info` string
    - `status` string
    - `last_heartbeat` string
    - `notes` string
    - `plan_sensor_index` integer
    - `cad_id` string
    - `bounding_box_filter` 'none' | 'cloud' | 'device'
    - `device_function` string
  - `photo_groups` PlanPhotoGroupSerialzer[]
    - `id` integer
    - `name` string, required
    - `notes` string
    - `photos` PlanPhoto[]
      - `id` integer
      - `name` string, required
      - `url` string, uri
      - `created_at` string, date-time
      - `updated_at` string, date-time
    - `photo_ids` string[]
    - `locked` boolean
    - `origin_x_pixels` number
    - `origin_y_pixels` number
    - `created_at` string, date-time
    - `updated_at` string, date-time
  - `floor_id` integer, required
  - `image_key` string
  - `source_pdf_key` string, nullable
  - `image_width_pixels` integer
  - `image_height_pixels` integer
  - `image_pixels_per_meter` number
  - `origin_x_pixels` number
  - `origin_y_pixels` number
  - `origin_angle_degrees` number
  - `floorplan_cad_origin_x` number
  - `floorplan_cad_origin_y` number
  - `floorplan_cad_rotation_degrees` number
  - `measurement_point_a_x_pixels` number, nullable
  - `measurement_point_a_y_pixels` number, nullable
  - `measurement_point_b_x_pixels` number, nullable
  - `measurement_point_b_y_pixels` number, nullable
  - `measurement_computed_length_meters` number, nullable
  - `measurement_user_entered_length_inches` string, nullable
  - `measurement_user_entered_length_feet` string, nullable
  - `ceiling_raster_key` string, nullable
  - `ceiling_raster_url` string, uri
  - `ceiling_raster_floorplan_origin_x` number
  - `ceiling_raster_floorplan_origin_y` number
  - `ceiling_raster_floorplan_angle_degrees` number
  - `ceiling_raster_opacity_percent` integer
  - `ceiling_raster_notes` string
  - `ceiling_raster_min_height_limit_meters` number
  - `ceiling_raster_max_height_limit_meters` number
  - `point_cloud_transformation_matrix` object, nullable
  - `point_cloud_transformation_steps` object, nullable
  - `last_oa_sensor_index` string
  - `last_entry_sensor_index` string
  - `active_dxf_id` integer, nullable
  - `active_dxf_full_raster_url` string
  - `latest_dxf` string

## Other responses

- `400` — Bad Request
- `403` — Forbidden

---

[API](https://skmtc.dev/density/apis/your-project-api.md) · [All operations](https://skmtc.dev/density/apis/your-project-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/density/your-project-api/revisions/eab10fe035e6/schema)
