---
title: "Generate a policy draft"
method: POST
path: "/api/v1/policies"
tags: ["Policies"]
---

# Generate a policy draft

`POST /api/v1/policies`

## Request

- Base URL: `https://policyforge.co`
- URL: `https://policyforge.co/api/v1/policies`
- Auth: HTTP bearer

Generate a policy draft from the supplied business facts and jurisdiction choice. The policy is saved, hosted at a public URL by default, and returned in the response. Review generated content before publication.

## Request body

- PolicyCreateRequest
  - `type` 'privacy_policy' | 'terms_of_service' | 'cookie_policy' | 'refund', required: The type of policy to generate
  - `business_type` 'e-commerce' | 'saas' | 'healthcare' | 'education' | 'financial' | 'real-estate' | 'non-profit' | 'consulting' | 'media' | 'other', required: Your business category
  - `jurisdiction` 'gdpr' | 'ccpa' | 'pipeda' | 'us' | 'eu' | 'ca' | 'uk' | 'global', required: Primary legal jurisdiction for compliance
  - `company_name` string, required: Your company or organization name
  - `contact_email` string, email, required: Contact email for privacy/legal inquiries
  - `website_url` string, uri: Your website URL
  - `service_description` string: Brief description of your service or product
  - `data_collection` string[]: Types of data your service collects
  - `third_party_integrations` string[]: Third-party services you integrate with
  - `data_retention` string: How long you retain user data
  - `user_accounts` boolean: Whether your service has user accounts
  - `payments` boolean: Whether your service processes payments
  - `marketing` boolean: Whether you send marketing communications
  - `analytics` boolean: Whether you use analytics tracking
  - `cookies` boolean: Whether your website uses cookies
  - `children_data` boolean: Whether your service collects data from children under 13
  - `hosting_enabled` boolean: Whether to host the policy at a public URL

## Response `201`

Policy created successfully

- PolicyResponse
  - `id` string, uuid: Unique policy identifier
  - `type` string: Policy type (privacy, terms, cookies, refund)
  - `policy_type` string: Alias of `type` (same value), for naming consistency with the list endpoint
  - `title` string: Generated policy title
  - `content` string: Full policy content in HTML format
  - `created_at` string, date-time
  - `status` 'draft' | 'published' | 'archived': Policy publication status
  - `hosting_enabled` boolean
  - `hosted_url` string, uri: Public URL where the policy is hosted (if hosting is enabled)
  - `url_slug` string: URL slug for the hosted policy
  - `metadata` object: Generation metadata (word count, compliance level, etc.)
  - `subscription_info` SubscriptionInfo
    - `tier` 'free' | 'pro' | 'enterprise'
    - `can_create_more` boolean
    - `remaining_policies` integer

## Other responses

- `400`: Validation error
- `401`: Missing or invalid API key
- `402`: Monthly policy quota exhausted
- `429`: Rate limit exceeded
- `500`: Internal server error

---

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