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

# Get Content Detail

> Fetch the full detail of a single tracked content item — including the actual text: the content brief (`brief`) and the article/page body (`body`). `body` holds generated drafts, optimize rewrites, snipe articles, authored text, and scraped tracked-page bodies alike.

Use this after listing tracked content (`POST /api/v1/content`) to read the text behind a `content_id`, or to poll `status` while generation runs — `generated_brief` means the brief is ready while the article is still being written. Also exposed as the MCP tool `get_content_detail`.

Tracked pages that have not been scraped yet return `null` text fields. Unknown or hidden `content_id` returns 404.



## OpenAPI

````yaml /api-reference/openapi.json get /api/v1/content/{content_id}
openapi: 3.1.0
info:
  title: AthenaHQ API
  description: >-
    AthenaHQ API provides programmatic access to manage your websites and
    prompts for AI-powered content optimization.
  version: 1.0.0
  contact:
    email: support@athenahq.ai
servers:
  - url: https://api.athenahq.ai
    description: Production server
security:
  - apiKey: []
tags:
  - name: Basics
    description: Core API operations for managing websites and prompts
  - name: Metrics
    description: Metrics and analytics endpoints for tracking AI visibility
  - name: Billing
    description: Billing and credits endpoints for managing usage
  - name: Team Management
    description: Endpoints for managing team members and invitations
  - name: Groups
    description: Endpoints for managing groups of websites
  - name: Content
    description: >-
      Endpoints for accessing Content Hub data — tabs, tracked URLs, and per-URL
      prompt breakdowns.
  - name: Pitch Workspace
    description: >-
      Endpoints for accessing pitch workspace reports — org-scoped pitch runs
      with competitors, prompts, attributes, and aggregate metrics.
paths:
  /api/v1/content/{content_id}:
    get:
      tags:
        - Content
      summary: Get Content Detail
      description: >-
        Fetch the full detail of a single tracked content item — including the
        actual text: the content brief (`brief`) and the article/page body
        (`body`). `body` holds generated drafts, optimize rewrites, snipe
        articles, authored text, and scraped tracked-page bodies alike.


        Use this after listing tracked content (`POST /api/v1/content`) to read
        the text behind a `content_id`, or to poll `status` while generation
        runs — `generated_brief` means the brief is ready while the article is
        still being written. Also exposed as the MCP tool `get_content_detail`.


        Tracked pages that have not been scraped yet return `null` text fields.
        Unknown or hidden `content_id` returns 404.
      operationId: getContentDetail
      parameters:
        - name: content_id
          in: path
          description: The UUID of the content item to fetch.
          required: true
          schema:
            type: string
            format: uuid
        - name: website_id
          in: query
          description: The website the content item belongs to.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Successful response with the content item's full detail.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContentDetailResponse'
              example:
                content_id: 11111111-2222-3333-4444-555555555555
                title: Best CRMs for early-stage startups
                url: https://example.com/blog/best-crms
                normalized_url: example.com/blog/best-crms
                type: draft
                sheet_id: 22222222-3333-4444-5555-666666666666
                status: generated
                brief: |-
                  ## Brief

                  Target the comparison angle for early-stage buyers…
                body: |-
                  # Best CRMs for early-stage startups

                  Choosing a CRM before product-market fit…
                meta_description: A practical comparison of CRMs for early-stage startups.
                cited_urls:
                  - https://example.org/2026-crm-report
                internal_links:
                  - https://example.com/blog/crm-migration
                brief_cited_urls:
                  - https://example.org/2026-crm-report
                brief_internal_links:
                  - https://example.com/blog/crm-migration
                optimize_summary: null
                linkedin_post: null
                x_post: null
                facebook_post: null
                instagram_post: null
                reddit_post: null
                topic_name: CRM
                mark_as_done_time: null
                created_at: '2026-06-01T12:00:00.000Z'
                updated_at: '2026-06-02T08:30:00.000Z'
        '400':
          description: Bad request — invalid parameters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                missing_website_id:
                  value:
                    error: website_id is required
                invalid_content_id:
                  value:
                    error: content_id must be a uuid
        '401':
          description: Unauthorized — invalid or missing API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden — you don't have access to this website.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: Unauthorized access to this website
        '404':
          description: Content not found for this website.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: Content not found
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - apiKey: []
components:
  schemas:
    ContentDetailResponse:
      type: object
      required:
        - content_id
        - title
        - url
        - normalized_url
        - type
        - sheet_id
        - status
        - brief
        - body
        - meta_description
        - cited_urls
        - internal_links
        - brief_cited_urls
        - brief_internal_links
        - optimize_summary
        - linkedin_post
        - x_post
        - facebook_post
        - instagram_post
        - reddit_post
        - topic_name
        - mark_as_done_time
        - created_at
        - updated_at
      properties:
        content_id:
          type: string
          format: uuid
          description: The content item's id.
        title:
          type: string
          nullable: true
          description: The content's title.
        url:
          type: string
          nullable: true
          description: The content's display URL.
        normalized_url:
          type: string
          nullable: true
          description: The normalized URL — the value joined against citation data.
        type:
          type: string
          nullable: true
          description: >-
            How the content entered the hub: `draft` (Athena-written article),
            `optimize` (rewrite of an existing page), `snipe`, `slice`, `manual`
            (authored in the editor), `external` (added manually), `imported`
            (via GA4).
          example: draft
        sheet_id:
          type: string
          format: uuid
          nullable: true
          description: >-
            The Content Hub sheet the item belongs to. See `GET
            /api/v1/content/sheets`.
        status:
          type: string
          nullable: true
          enum:
            - done
            - generated
            - failed
            - pending
            - generated_brief
            - pending_brief
            - pending_article
            - scheduled
          description: >-
            Generation lifecycle status.
            `pending`/`pending_brief`/`pending_article` mean work is in flight;
            `generated_brief` means the brief is ready while the article is
            still being written; `generated` means the text is ready; `done`
            means published/marked done; `scheduled` means a publish is
            scheduled. `null` when the item has no generation record yet (e.g. a
            tracked page that has not been scraped).
        brief:
          type: string
          nullable: true
          description: >-
            The content brief, as markdown. Available once `status` reaches
            `generated_brief`.
        body:
          type: string
          nullable: true
          description: >-
            The article/page body, as markdown. Holds the generated draft, the
            optimize rewrite, the snipe article, authored text, or the scraped
            body of a tracked page — depending on `type`.
        meta_description:
          type: string
          nullable: true
          description: The generated meta description.
        cited_urls:
          type: array
          items:
            type: string
          nullable: true
          description: >-
            External source URLs cited by the body. Not to be confused with
            `citations` on `POST /api/v1/content`, which is the count of AI
            responses citing this URL.
        internal_links:
          type: array
          items:
            type: string
          nullable: true
          description: Internal URLs linked from the body.
        brief_cited_urls:
          type: array
          items:
            type: string
          nullable: true
          description: External source URLs referenced by the brief.
        brief_internal_links:
          type: array
          items:
            type: string
          nullable: true
          description: Internal URLs suggested by the brief.
        optimize_summary:
          type: object
          nullable: true
          description: >-
            For `optimize` items: a summary of what the rewrite changed. `null`
            for other types or when no rewrite has completed.
          required:
            - overview
            - changes
          properties:
            overview:
              type: string
              description: One-paragraph overview of the rewrite.
            changes:
              type: array
              description: Individual changes made by the rewrite.
              items:
                type: object
                required:
                  - description
                properties:
                  description:
                    type: string
        linkedin_post:
          type: string
          nullable: true
          description: >-
            Latest completed LinkedIn post generated for this content; falls
            back to legacy stored values for older content.
        x_post:
          type: string
          nullable: true
          description: >-
            Latest completed X post generated for this content; falls back to
            legacy stored values for older content.
        facebook_post:
          type: string
          nullable: true
          description: >-
            Latest completed Facebook post generated for this content; falls
            back to legacy stored values for older content.
        instagram_post:
          type: string
          nullable: true
          description: >-
            Latest completed Instagram post generated for this content; falls
            back to legacy stored values for older content.
        reddit_post:
          type: string
          nullable: true
          description: >-
            Latest completed Reddit post generated for this content; falls back
            to legacy stored values for older content.
        topic_name:
          type: string
          nullable: true
          description: Name of the topic the content targets, when assigned.
        mark_as_done_time:
          type: string
          format: date-time
          nullable: true
          description: When the item was marked done/published.
        created_at:
          type: string
          format: date-time
          description: When the content item was created.
        updated_at:
          type: string
          format: date-time
          description: >-
            When the content item or its generated text last changed (the newer
            of the row and generation timestamps).
    Error:
      type: object
      description: Error response object
      required:
        - error
      properties:
        error:
          type: string
          description: Error message describing what went wrong
          example: Unauthorized
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        API key for authentication. You can create one
        [here](https://app.athenahq.ai/organization?tab=api).

````