---
title: "Generate Policy"
method: POST
path: "/policies"
tags: ["policies"]
---

# Generate Policy

`POST /policies`

## Request

- Base URL: `https://api.openproof.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.openproof.io/policies`
- Auth: HTTP bearer

Generate a compliance policy document using Claude. Editor+ role
required (Tier 4, 7 Aug 2026) -- this costs real API tokens and
creates a persisted document, so viewers can't trigger it.

Plan check, company_name, and grievance-officer contact all resolve
from the BUSINESS OWNER's User row (owner_user, fetched via
business_id) rather than current_user directly -- the plan is the
business's paid plan, not the individual teammate's, and the
generated document should reflect the business's own identity/
contact info regardless of which teammate clicked generate.

## Request body

- PolicyGenRequest
  - `assessment_id` string, required
  - `policy_type` string, required
  - `language` string, nullable
  - `force_regenerate` boolean

## Response `200`

Successful Response

- PolicyResponse
  - `id` string, required
  - `policy_type` string, required
  - `content_html` string, required
  - `generated_at` string, required
  - `version_stamp` string, nullable, required
  - `language` string

## Other responses

- `422`: Validation Error

---

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