---
title: "Update a content brief"
method: PATCH
path: "/v1/projects/{projectId}/geo/briefs/{briefId}"
tags: ["GEO"]
---

# Update a content brief

`PATCH /v1/projects/{projectId}/geo/briefs/{briefId}`

## Request

- Base URL: `https://api.usenotra.com`
- URL: `https://api.usenotra.com/v1/projects/{projectId}/geo/briefs/{briefId}`
- Auth: HTTP bearer

Edits the brief's outline and planning fields. Omitted fields keep their current value; list fields replace the whole list. Only briefs in `draft` or `failed` can be edited, and the draft post's plan is updated with them. Anything else returns 409. Editing drops research notes such as the baseline and recommended angle, as the dashboard editor does.

## Path parameters

- `projectId` string, required
- `briefId` string, required

## Request body

- UpdateGeoContentBriefRequest
  - `expectedUpdatedAt` string, date-time: The brief's updatedAt from your last read. When set, the update fails with 409 if the brief changed since. Omit to overwrite the latest version.
  - `workingTitle` string
  - `targetPrompt` string
  - `intent` string
  - `audience` string
  - `jobToBeDone` string
  - `sections` object[]: The outline. Replaces every section; send the full list in order.
    - `heading` string, required
    - `goal` string, required
    - `claims` string[], required
  - `questionsToAnswer` string[]: FAQ questions. Replaces the whole list.
  - `internalLinks` object[]: Replaces the whole list.
    - `url` string, required
    - `anchor` string, required
    - `why` string, required
  - `acceptanceChecklist` string[]: Replaces the whole list.

## Response `200`

Brief updated successfully

- GeoContentBriefResponse
  - `brief` GeoContentBriefDetail, required
    - `id` string, required
    - `topic` string, required
    - `brief` GeoContentBriefDocument, required
      - `targetPrompt` string, required
      - `intent` string, required
      - `contentSubtype` 'guide' | 'comparison' | 'listicle' | 'how-to' | 'faq' | 'alternatives', required
      - `workingTitle` string, required
      - `audience` string, required
      - `jobToBeDone` string, required
      - `sections` object[], required
        - `heading` string, required
        - `goal` string, required
        - `claims` string[], required
      - `questionsToAnswer` string[], required
      - `internalLinks` object[], required
        - `url` string, required
        - `anchor` string, required
        - `why` string, required
      - `acceptanceChecklist` string[], required
      - `recommendedAngle` string
      - `competitorsToCounter` string[]
      - `sourcesToReference` string[]
      - `missingCoverage` string[]
      - `baseline` object, nullable
        - `sourcePromptId` string, required
        - `mentionedEngines` number, required
        - `totalEngines` number, required
        - `engines` object[], required
          - `engine` string, required
          - `mentioned` boolean, required
          - `position` number, nullable, required
        - `competitorMentions` object[], required
          - `name` string, required
          - `engines` number, required
        - `citedDomains` object[], required
          - `domain` string, required
          - `engines` number, required
        - `capturedAt` string, nullable, required
    - `status` 'draft' | 'approved' | 'writing' | 'completed' | 'failed', required
    - `autoApproved` boolean, required
    - `runId` string, nullable, required
    - `postId` string, nullable, required
    - `humanized` boolean, required
    - `error` string, nullable, required
    - `createdAt` string, required
    - `updatedAt` string, required
    - `completedAt` string, nullable, required
  - `organization` object, required
    - `id` string, required
    - `slug` string, required
    - `name` string, required
    - `logo` string, nullable, required

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid API key
- `402`: GEO plan or available AI credits required
- `403`: Forbidden
- `404`: Organization, project or resource not found
- `409`: Conflict
- `500`: Internal server error
- `503`: Authentication or billing service unavailable

## Changes

- **2026-10-20** `0332a6e10b77`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/usenotra/apis/notra-api/changes/v1/projects/:projectId/geo/briefs/:briefId/patch.md)

---

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