> ## Documentation Index
> Fetch the complete documentation index at: https://promptwatch.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Create content

> Starts AI content generation (CREATE or OPTIMIZE). Returns the new document id with status PENDING; use GET /content/:id to poll for status, fields, and body.



## OpenAPI

````yaml /v2/openapi.json post /content/create
openapi: 3.0.0
info:
  title: Promptwatch API v2
  description: >-
    API v2 for customer integrations with Promptwatch monitoring platform. This
    version provides improved structure, additional endpoints, and enhanced
    functionality.
  version: 2.0.0
  contact:
    name: Promptwatch Support
    email: team@promptwatch.com
    url: https://promptwatch.com
  license:
    name: Commercial
    url: https://promptwatch.com/terms-and-conditions
servers:
  - url: https://server.promptwatch.com/api/v2
    description: Promptwatch API v2
security: []
tags:
  - name: Authentication
    description: API key validation and authentication
  - name: Content
    description: >-
      AI content generation and optimization. Create content asynchronously and
      poll for results.
  - name: Content Gap
    description: Content gap analysis and recommendations
  - name: Models
    description: Available LLM models
  - name: Monitors
    description: Monitor management and CRUD operations
  - name: Page Tracker
    description: Track URLs and inspect citation stats, responses, and prompts
  - name: Prompts
    description: Prompt management and operations
  - name: Query Fanouts
    description: ChatGPT query fanout keywords
  - name: Responses
    description: LLM response data and analytics
  - name: Tags
    description: Tag management for prompts
  - name: Topics
    description: Topic management for prompts
  - name: Actions
    description: Action items (GEO suggestions and tasks)
  - name: Personas
    description: Persona configuration for monitors
  - name: Brands
    description: Brand management for competitive analysis
  - name: Visibility
    description: Brand visibility time series and competitor heatmaps
  - name: Citations
    description: Citation analytics from AI responses
  - name: Analytics
    description: Visitor analytics, AI crawler logs, sentiment, and brand visibility trends
  - name: Projects
    description: Project management (organization-level keys only)
  - name: Sitemap
    description: Sitemap crawl progress and discovered URLs
  - name: Site Health
    description: >-
      Crawled pages with SEO issues (titles, meta descriptions, H1, thin
      content)
  - name: Socials
    description: >-
      Social media citations (Reddit posts and YouTube videos) found in LLM
      responses
paths:
  /content/create:
    post:
      tags:
        - Content
      summary: Create content
      description: >-
        Starts AI content generation (CREATE or OPTIMIZE). Returns the new
        document id with status PENDING; use GET /content/:id to poll for
        status, fields, and body.
      operationId: createContent
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - type: object
                  properties:
                    mode:
                      type: string
                      description: >-
                        Create new content from a prompt (not optimizing an
                        existing page).
                      enum:
                        - CREATE
                    promptId:
                      type: string
                      format: uuid
                      description: >-
                        LLM prompt to anchor generation on (list via GET
                        /prompts).
                    personaId:
                      type: string
                      format: uuid
                      description: Persona for voice and audience (list via GET /personas).
                    type:
                      type: string
                      enum:
                        - ARTICLE
                        - BLOG_POST
                        - OPINION
                        - LISTICLE
                        - HOW_TO
                        - REVIEW
                        - COMPARISON
                        - CASE_STUDY
                        - INTERVIEW
                        - DOCUMENTATION
                        - WIKI
                        - PRODUCT_PAGE
                        - LANDING_PAGE
                        - PRESS_RELEASE
                        - GENERIC_CONTENT
                        - PRODUCT_COMPARISON
                      description: >-
                        Output format. Supports article/blog formats plus
                        on-site citation-aligned formats such as HOW_TO, REVIEW,
                        COMPARISON, CASE_STUDY, DOCUMENTATION, WIKI,
                        PRODUCT_PAGE, LANDING_PAGE, and PRESS_RELEASE.
                    contentLength:
                      type: string
                      enum:
                        - SHORT
                        - MEDIUM
                        - LONG
                      description: >-
                        Target length. SHORT ≈ 200–500 words; MEDIUM ≈
                        500–1,000; LONG ≈ 1,000–3,000.
                    contentGapRecommendationId:
                      type: string
                      format: uuid
                      description: >-
                        Optional recommendation from GET
                        /content-gap/prompts/:promptId/latest/recommendations.
                    toneOfVoice:
                      type: string
                      enum:
                        - PROFESSIONAL
                        - CASUAL
                        - TECHNICAL
                        - CONVERSATIONAL
                        - NEUTRAL
                        - AUTHORITATIVE
                        - FRIENDLY
                        - PERSUASIVE
                        - FORMAL
                        - WITTY
                        - CUSTOM
                      description: >-
                        Tone override; if omitted, the project default is used.
                        CUSTOM requires customToneOfVoice.
                    customToneOfVoice:
                      type: string
                      description: Required when toneOfVoice is CUSTOM; ignored otherwise.
                    languageCode:
                      type: string
                      enum:
                        - en-US
                        - en-GB
                        - en-IN
                        - en-AU
                        - en-CA
                        - en-NZ
                        - nl-NL
                        - nl-BE
                        - es-ES
                        - es-MX
                        - es-AR
                        - es-CO
                        - es-CL
                        - es-PE
                        - es-VE
                        - ca-ES
                        - fr-FR
                        - fr-BE
                        - fr-CA
                        - de-DE
                        - de-AT
                        - de-CH
                        - cs-CZ
                        - sk-SK
                        - no-NO
                        - sv-SE
                        - da-DK
                        - it-IT
                        - fi-FI
                        - pl-PL
                        - hu-HU
                        - ro-RO
                        - lt-LT
                        - lv-LV
                        - uk-UA
                        - el-GR
                        - tr-TR
                        - ar-SA
                        - ar-EG
                        - ar-AE
                        - he-IL
                        - pt-PT
                        - pt-BR
                        - ja-JP
                        - id-ID
                        - vi-VN
                        - th-TH
                        - km-KH
                        - en-KH
                        - ko-KR
                        - hi-IN
                        - ru-RU
                        - kk-KZ
                        - ms-MY
                        - fil-PH
                        - zh-SG
                        - zh-TW
                        - zh-HK
                      description: >-
                        BCP-47 language code from the supported enum (e.g.
                        "en-US", "es-ES"). Overrides the project default. Omit
                        to use the project default or en-US.
                    imageArtisticStyle:
                      type: string
                      enum:
                        - photo-realistic
                        - flat-illustration
                        - watercolor
                        - 3d-render
                        - minimalist
                        - isometric
                        - editorial
                        - abstract
                      nullable: true
                      description: >-
                        Visual style for AI-generated featured images when the
                        generate-article-image tool is enabled. Null inherits
                        the project default.
                    imagePromptInstructions:
                      type: string
                      maxLength: 200
                      nullable: true
                      description: >-
                        Additional instructions for the image generator (max 200
                        chars). Null inherits the project default.
                    blockedWords:
                      type: array
                      items:
                        type: string
                      description: >-
                        Words or phrases the generated content must not contain.
                        Overrides the project's default blocked-words list.
                    briefTitle:
                      type: string
                      maxLength: 150
                      description: >-
                        Exact title for the generated document. When provided,
                        the AI uses this string verbatim as the document title
                        (max 150 chars).
                    briefDescription:
                      type: string
                      maxLength: 250
                      description: >-
                        Exact meta description for the generated document. When
                        provided, the AI uses this string verbatim (max 250
                        chars).
                    briefObjective:
                      type: string
                      maxLength: 500
                      description: >-
                        Goal or purpose of the content piece — guides the AI on
                        what the article should achieve (max 500 chars).
                    briefCallToAction:
                      type: string
                      maxLength: 300
                      description: >-
                        Desired call-to-action the content should drive (e.g.
                        "Sign up for a free trial") (max 300 chars).
                    briefKeyPoints:
                      type: array
                      items:
                        type: string
                        maxLength: 200
                      maxItems: 10
                      description: >-
                        Key points the article must cover. Each item is a short
                        instruction for the AI writer (max 10 items).
                    briefContext:
                      type: string
                      maxLength: 500
                      description: >-
                        Additional context or background for the writer — e.g.
                        target audience nuances, tone guidance, competitor
                        positioning (max 500 chars).
                  required:
                    - mode
                    - promptId
                    - personaId
                    - type
                    - contentLength
                  additionalProperties: false
                - type: object
                  properties:
                    mode:
                      type: string
                      description: >-
                        Rewrite existing site page content; page must be in the
                        project sitemap with markdown.
                      enum:
                        - OPTIMIZE
                    promptId:
                      type: string
                      format: uuid
                      description: >-
                        LLM prompt to anchor optimization (list via GET
                        /prompts).
                    personaId:
                      type: string
                      format: uuid
                      description: Persona for voice and audience (list via GET /personas).
                    optimizationLevel:
                      type: string
                      enum:
                        - LOW
                        - MEDIUM
                        - HIGH
                      description: >-
                        LOW (Conservative): light edits; MEDIUM (Balanced):
                        rewrite sections; HIGH (Full Rewrite): rebuild for
                        maximum impact.
                    url:
                      type: string
                      format: uri
                      description: >-
                        Canonical page URL to load from the sitemap / page
                        index.
                    contentGapRecommendationId:
                      type: string
                      format: uuid
                      description: >-
                        Optional recommendation from GET
                        /content-gap/prompts/:promptId/latest/recommendations.
                    toneOfVoice:
                      type: string
                      enum:
                        - PROFESSIONAL
                        - CASUAL
                        - TECHNICAL
                        - CONVERSATIONAL
                        - NEUTRAL
                        - AUTHORITATIVE
                        - FRIENDLY
                        - PERSUASIVE
                        - FORMAL
                        - WITTY
                        - CUSTOM
                      description: >-
                        Tone override; if omitted, project default. CUSTOM
                        requires customToneOfVoice.
                    customToneOfVoice:
                      type: string
                      description: Required when toneOfVoice is CUSTOM.
                    languageCode:
                      type: string
                      enum:
                        - en-US
                        - en-GB
                        - en-IN
                        - en-AU
                        - en-CA
                        - en-NZ
                        - nl-NL
                        - nl-BE
                        - es-ES
                        - es-MX
                        - es-AR
                        - es-CO
                        - es-CL
                        - es-PE
                        - es-VE
                        - ca-ES
                        - fr-FR
                        - fr-BE
                        - fr-CA
                        - de-DE
                        - de-AT
                        - de-CH
                        - cs-CZ
                        - sk-SK
                        - no-NO
                        - sv-SE
                        - da-DK
                        - it-IT
                        - fi-FI
                        - pl-PL
                        - hu-HU
                        - ro-RO
                        - lt-LT
                        - lv-LV
                        - uk-UA
                        - el-GR
                        - tr-TR
                        - ar-SA
                        - ar-EG
                        - ar-AE
                        - he-IL
                        - pt-PT
                        - pt-BR
                        - ja-JP
                        - id-ID
                        - vi-VN
                        - th-TH
                        - km-KH
                        - en-KH
                        - ko-KR
                        - hi-IN
                        - ru-RU
                        - kk-KZ
                        - ms-MY
                        - fil-PH
                        - zh-SG
                        - zh-TW
                        - zh-HK
                      description: >-
                        BCP-47 language code from the supported enum (e.g.
                        "en-US", "es-ES"). Overrides the project default. Omit
                        to use the project default or en-US.
                    imageArtisticStyle:
                      type: string
                      enum:
                        - photo-realistic
                        - flat-illustration
                        - watercolor
                        - 3d-render
                        - minimalist
                        - isometric
                        - editorial
                        - abstract
                      nullable: true
                      description: >-
                        Visual style for AI-generated featured images when the
                        generate-article-image tool is enabled. Null inherits
                        the project default.
                    imagePromptInstructions:
                      type: string
                      maxLength: 200
                      nullable: true
                      description: >-
                        Additional instructions for the image generator (max 200
                        chars). Null inherits the project default.
                    blockedWords:
                      type: array
                      items:
                        type: string
                      description: >-
                        Words or phrases the generated content must not contain.
                        Overrides the project's default blocked-words list.
                  required:
                    - mode
                    - promptId
                    - personaId
                    - optimizationLevel
                    - url
                  additionalProperties: false
      responses:
        '201':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                example:
                  id: 6ba7b82c-9dad-11d1-80b4-00c04fd430c8
                  status: PENDING
                properties:
                  id:
                    type: string
                    format: uuid
                    description: Document id; poll GET /content/:id until terminal status.
                  status:
                    type: string
                    enum:
                      - PENDING
                    description: >-
                      Always PENDING immediately after enqueue; use GET
                      /content/:id for updates.
                required:
                  - id
                  - status
                additionalProperties: false
        '400':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                example:
                  code: CONTENT_NOT_FOUND
                  message: Content document not found
                properties:
                  code:
                    type: string
                    description: Machine-readable error code
                    enum:
                      - CONTENT_NOT_FOUND
                      - CONTENT_DRAFT_NOT_FOUND
                      - CONTENT_INVALID_PROMPT
                      - CONTENT_INVALID_PERSONA
                      - CONTENT_PAGE_FETCH_FAILED
                      - CONTENT_PAGE_NOT_FOUND
                      - CONTENT_PAGE_NO_CONTENT
                      - CONTENT_INVALID_TONE
                      - CONTENT_RECOMMENDATION_NOT_FOUND
                      - CONTENT_GENERATION_FAILED
                      - INTERNAL_ERROR
                    example: CONTENT_NOT_FOUND
                  message:
                    type: string
                    description: Human-readable error message
                    example: Content document not found
                required:
                  - code
                  - message
                additionalProperties: false
              examples:
                example1:
                  value:
                    code: CONTENT_NOT_FOUND
                    message: Content document not found
                example2:
                  value:
                    code: CONTENT_INVALID_PROMPT
                    message: Prompt not found or does not belong to this project
                example3:
                  value:
                    code: CONTENT_GENERATION_FAILED
                    message: Failed to start content generation
        '401':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                example:
                  error: Unauthorized
                  message: Missing or invalid X-API-Key header.
                properties:
                  error:
                    type: string
                    description: Error category (often aligned with HTTP semantics)
                  code:
                    type: string
                    description: Optional machine-readable code
                  message:
                    type: string
                    description: Human-readable explanation
                  details:
                    type: object
                    description: Optional structured detail (e.g. validation)
                    additionalProperties: true
                required:
                  - error
                  - message
                additionalProperties: false
        '402':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                example:
                  error: Payment Required
                  message: >-
                    Cannot create prompt. Your organization has 50 of 50 active
                    prompts. Please upgrade your plan to continue.
                  current: 50
                  limit: 50
                  available: 0
                properties:
                  error:
                    type: string
                    description: Fixed error label
                    enum:
                      - Payment Required
                  message:
                    type: string
                    description: Explanation including usage and limit
                  current:
                    type: integer
                    description: Current usage for this quota
                  limit:
                    type: integer
                    description: Maximum allowed on the current plan
                  available:
                    type: integer
                    description: Remaining quota (0 when blocked)
                required:
                  - error
                  - message
                  - current
                  - limit
                  - available
                additionalProperties: false
        '500':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                example:
                  code: CONTENT_NOT_FOUND
                  message: Content document not found
                properties:
                  code:
                    type: string
                    description: Machine-readable error code
                    enum:
                      - CONTENT_NOT_FOUND
                      - CONTENT_DRAFT_NOT_FOUND
                      - CONTENT_INVALID_PROMPT
                      - CONTENT_INVALID_PERSONA
                      - CONTENT_PAGE_FETCH_FAILED
                      - CONTENT_PAGE_NOT_FOUND
                      - CONTENT_PAGE_NO_CONTENT
                      - CONTENT_INVALID_TONE
                      - CONTENT_RECOMMENDATION_NOT_FOUND
                      - CONTENT_GENERATION_FAILED
                      - INTERNAL_ERROR
                    example: CONTENT_NOT_FOUND
                  message:
                    type: string
                    description: Human-readable error message
                    example: Content document not found
                required:
                  - code
                  - message
                additionalProperties: false
              examples:
                example1:
                  value:
                    code: CONTENT_NOT_FOUND
                    message: Content document not found
                example2:
                  value:
                    code: CONTENT_INVALID_PROMPT
                    message: Prompt not found or does not belong to this project
                example3:
                  value:
                    code: CONTENT_GENERATION_FAILED
                    message: Failed to start content generation
      security:
        - ApiKeyAuth: []
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        API key for authentication. Get yours from the Promptwatch dashboard
        under Settings > API Keys.

````