---
title: "Update brief"
method: PUT
path: "/briefs/{id}"
tags: ["Briefs"]
---

# Update brief

`PUT /briefs/{id}`

## Request

- Base URL: `https://next.frase.io/api/v1`
- URL: `https://next.frase.io/api/v1/briefs/{id}`
- Auth: one of:
  - API key in header `X-API-KEY`
  - HTTP bearer

Update brief metadata and/or set a custom outline. To set a custom outline, include the `outline` array. To update only metadata (topic, keywords, etc.), omit `outline`. Cannot update outline while brief generation is in progress (status='pending', 'generating', or 'research').

## Path parameters

- `id` string, uuid, required

## Request body

- object
  - `topic` string
  - `target_keywords` string[]
  - `content_type` 'blog' | 'guide' | 'landing' | 'product' | 'comparison' | 'listicle'
  - `search_intent` 'informational' | 'navigational' | 'transactional' | 'commercial': Search intent classification
  - `target_word_count` integer
  - `outline` ContentOutlineSection[]: Custom content outline sections. When provided, replaces the entire outline. Each section defines a heading for content generation.
    - `heading` string, required: The section heading text
    - `level` integer, required: Heading level (1=H1, 2=H2, 3=H3, 4=H4)
    - `key_points` string[]: Key points to cover in this section
    - `suggested_word_count` integer: Suggested word count for this section
    - `generation_mode` 'ai' | 'manual': Whether AI generates this section ('ai') or user provides content ('manual')
  - `variation_overrides` object: Override content variation parameters (tone, voice, angle).
    - `tone` string: Writing tone (e.g. 'professional', 'conversational')
    - `voice_persona` string: Voice persona for content generation
    - `angle` string: Content angle or perspective
  - `audience_context` object: Target audience context for content generation.
    - `role` string
    - `expertise` 'beginner' | 'intermediate' | 'expert'
    - `pain_point` string
    - `funnel_stage` 'awareness' | 'consideration' | 'decision'
  - `topic_guardrails` object: Topic guardrails for content generation.
    - `required` string[], required: Topics that must be covered
    - `excluded` string[], required: Topics to avoid

## Response `200`

Brief updated

- object
  - `data` object
    - `id` string, uuid
    - `topic` string
    - `target_keywords` string[]
    - `content_type` string
    - `status` string
    - `outline_section_count` integer: Returned when outline is updated
    - `updated_at` string, date-time
  - `request_id` string

## Other responses

- `400`: Validation failed
- `401`: Authentication failed
- `404`: Resource not found
- `500`: Internal server error

---

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