---
title: "Update compliance policy"
method: PATCH
path: "/v1/policies/{id}"
tags: ["Policies"]
---

# Update compliance policy

`PATCH /v1/policies/{id}`

Update compliance policy details or content while keeping policy workflows connected to controls, tasks, and approvals.

## Path parameters

- `id` string, required

## Headers

- `X-Organization-Id` string

## Request body

- UpdatePolicyDto
  - `name` string — Name of the policy
  - `description` string — Description of the policy
  - `status` 'draft' | 'published' | 'needs_review' — Status of the policy
  - `content` object[] — Content of the policy as TipTap JSON (array of nodes)
  - `frequency` 'monthly' | 'quarterly' | 'yearly' — Review frequency of the policy
  - `department` string — Department this policy applies to. Built-in values: none, admin, gov, hr, it, itsm, qms. Custom department names are also accepted.
  - `isRequiredToSign` boolean — Whether this policy requires a signature
  - `reviewDate` string — Review date for the policy
  - `assigneeId` string — ID of the user assigned to this policy
  - `approverId` string — ID of the user who approved this policy
  - `policyTemplateId` string — ID of the policy template this policy is based on
  - `signedBy` string[] — List of user IDs who have signed this policy
  - `isArchived` boolean — Whether to archive this policy
  - `displayFormat` 'EDITOR' | 'PDF' — Display format for this policy

## Response `200`

Policy updated successfully

- PolicyResponseDto
  - `id` string, required — The policy ID
  - `name` string, required — Name of the policy
  - `description` string, nullable, required — Description of the policy
  - `status` 'draft' | 'published' | 'needs_review', required — Status of the policy
  - `content` object[], required — Content of the policy as TipTap JSON (array of nodes)
  - `frequency` 'monthly' | 'quarterly' | 'yearly', nullable, required — Review frequency of the policy
  - `department` string, nullable, required — Department this policy applies to. May be one of the built-in values (none, admin, gov, hr, it, itsm, qms) or a custom department name.
  - `isRequiredToSign` boolean, required — Whether this policy requires a signature
  - `signedBy` string[], required — List of user IDs who have signed this policy
  - `reviewDate` string, date-time, nullable, required — Review date for the policy
  - `isArchived` boolean, required — Whether this policy is archived
  - `archivedAt` string, date-time, nullable, required — When the policy was archived by framework sync
  - `createdAt` string, date-time, required — When the policy was created
  - `updatedAt` string, date-time, required — When the policy was last updated
  - `lastArchivedAt` string, date-time, nullable, required — When the policy was last archived
  - `lastPublishedAt` string, date-time, nullable, required — When the policy was last published
  - `organizationId` string, required — Organization ID this policy belongs to
  - `assigneeId` string, nullable, required — ID of the user assigned to this policy
  - `approverId` string, nullable, required — ID of the user who approved this policy
  - `policyTemplateId` string, nullable, required — ID of the policy template this policy is based on

## Other responses

- `400` — Bad Request - Invalid update data
- `401` — Unauthorized - Invalid authentication or insufficient permissions
- `404` — Policy not found

## Changes

- **2026-06-05** `33c685841b7a` — 7 breaking, 1 warning, 7 info
  - removed the enum value `admin` of the request property `department`
  - removed the enum value `gov` of the request property `department`
  - removed the enum value `hr` of the request property `department`
  - removed the enum value `it` of the request property `department`
  - …11 more
- **2026-06-05** `7ca7c363a732` — 1 breaking, 7 warning, 7 info
  - request property `department` was restricted to a list of enum values
  - added the new `admin` enum value to the `department` response property for the response status `200`
  - added the new `gov` enum value to the `department` response property for the response status `200`
  - added the new `hr` enum value to the `department` response property for the response status `200`
  - …11 more
- **2026-06-05** `d0f58f24175b` — 7 breaking, 1 warning, 7 info
  - removed the enum value `admin` of the request property `department`
  - removed the enum value `gov` of the request property `department`
  - removed the enum value `hr` of the request property `department`
  - removed the enum value `it` of the request property `department`
  - …11 more
- **2026-06-04** `d7d0199d846f` — 1 info
  - the endpoint scheme security `oauth2` was removed from the API
- **2026-05-30** `55a8e5ee94f5` — 1 info
  - added the required property `archivedAt` to the response with the `200` status

[Full history](https://skmtc.dev/trycompai/apis/comp-ai-api/changes/v1/policies/:id/patch.md)

---

[API](https://skmtc.dev/trycompai/apis/comp-ai-api.md) · [All operations](https://skmtc.dev/trycompai/apis/comp-ai-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/trycompai/comp-ai-api/revisions/726b9523fb22/schema)
