---
title: "Get Content Detail"
method: GET
path: "/api/v1/content/{content_id}"
tags: ["Content"]
---

# Get Content Detail

`GET /api/v1/content/{content_id}`

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.

## Path parameters

- `content_id` string, uuid, required

## Query parameters

- `website_id` string, uuid, required

## Response `200`

Successful response with the content item's full detail.

- ContentDetailResponse
  - `content_id` string, uuid, required — The content item's id.
  - `title` string, nullable, required — The content's title.
  - `url` string, nullable, required — The content's display URL.
  - `normalized_url` string, nullable, required — The normalized URL — the value joined against citation data.
  - `type` string, nullable, required — 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).
  - `sheet_id` string, uuid, nullable, required — The Content Hub sheet the item belongs to. See `GET /api/v1/content/sheets`.
  - `status` 'done' | 'generated' | 'failed' | 'pending' | 'generated_brief' | 'pending_brief' | 'pending_article' | 'scheduled', nullable, required — 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` string, nullable, required — The content brief, as markdown. Available once `status` reaches `generated_brief`.
  - `body` string, nullable, required — 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` string, nullable, required — The generated meta description.
  - `cited_urls` string[], nullable, required — 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` string[], nullable, required — Internal URLs linked from the body.
  - `brief_cited_urls` string[], nullable, required — External source URLs referenced by the brief.
  - `brief_internal_links` string[], nullable, required — Internal URLs suggested by the brief.
  - `optimize_summary` object, nullable, required — For `optimize` items: a summary of what the rewrite changed. `null` for other types or when no rewrite has completed.
    - `overview` string, required — One-paragraph overview of the rewrite.
    - `changes` object[], required — Individual changes made by the rewrite.
      - `description` string, required
  - `linkedin_post` string, nullable, required — Latest completed LinkedIn post generated for this content; falls back to legacy stored values for older content.
  - `x_post` string, nullable, required — Latest completed X post generated for this content; falls back to legacy stored values for older content.
  - `facebook_post` string, nullable, required — Latest completed Facebook post generated for this content; falls back to legacy stored values for older content.
  - `instagram_post` string, nullable, required — Latest completed Instagram post generated for this content; falls back to legacy stored values for older content.
  - `reddit_post` string, nullable, required — Latest completed Reddit post generated for this content; falls back to legacy stored values for older content.
  - `topic_name` string, nullable, required — Name of the topic the content targets, when assigned.
  - `mark_as_done_time` string, date-time, nullable, required — When the item was marked done/published.
  - `created_at` string, date-time, required — When the content item was created.
  - `updated_at` string, date-time, required — When the content item or its generated text last changed (the newer of the row and generation timestamps).

## Other responses

- `400` — Bad request — invalid parameters.
- `401` — Unauthorized — invalid or missing API key.
- `403` — Forbidden — you don't have access to this website.
- `404` — Content not found for this website.
- `500` — Internal server error.

---

[API](https://skmtc.net/athenahq/apis/athenahq-api.md) · [All operations](https://skmtc.net/athenahq/apis/athenahq-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/athenahq/athenahq-api/versions/6c5d71622cb9/schema)
