List Content Items
Changed onReturns every content item in a website's Content Hub, published or not: in-flight drafts, briefs, snipes, optimize and slice runs, scheduled and failed items, plus tracked pages. This is the enumeration path from a sheet_id to its unpublished rows. POST /api/v1/content lists only finished pipeline rows, with citation and impression metrics, so a sheet full of generated drafts appears empty there; use this endpoint to see them.
Returns identity fields only (id, title, type, stage, sheet, URL, timestamps, target prompt ids), no metrics. Reads from the primary store and is uncached, so an item is listable the moment POST /api/v1/content/generate returns its content_id. Read a row's text with GET /api/v1/content/{content_id}.
stage is the raw pipeline workflow state, not a publication flag: null means no pipeline record (most external and imported tracked pages), and manual editor items carry generated. Treat an item as published only when its stage is done (or it is an external or imported page) and it has a url; done without a url is an unpublished orphan.
Passing the sheet_id of a view-type tab (see sheet_type on GET /api/v1/content/sheets) lists the shared main pool without the view's saved filters. Hidden content (is_hidden = true) is excluded. Pagination uses page_size + 1 lookahead: pagination.has_more === true means the next page exists; there is no total-count field. Pass an unknown sheet_id or prompt_id (or one from another website) and the endpoint returns 403.
Also exposed as the MCP tool list_content.
Request
- Base URLhttps://api.athenahq.ai
- AuthAPI key in header x-api-key
Query parameters
The website whose Content Hub to enumerate.
Restrict to a single Content Hub tab. Use GET /api/v1/content/sheets to discover IDs. A view-type tab resolves to the shared main pool. Omit to span every tab.
Restrict to a single content type. athena_created is a shortcut for the four Athena-generated subtypes (draft, snipe, optimize, slice). Omit to span every type.
Restrict to a single pipeline stage. Matches the pipeline record only, so it can never match rows without one (most external and imported pages). Omit to span every stage.
Restrict to items written for this prompt (their targeting, the same prompt ids POST /api/v1/content/generate takes). Soft-deleted prompts still match.
Zero-indexed page number.
Number of items per page (1-100).
Response
Successful response with the page of content items.
Example response
{
"content": [
{
"content_id": "11111111-2222-3333-4444-555555555555",
"title": "How to Apply Foundation on Mature Skin",
"type": "draft",
"stage": "generated",
"sheet_name": "Drafts - sprint 1",
"topic_name": "Makeup for Mature Skin",
"prompt_count": 1,
"created_at": "2026-09-01T20:59:53.000Z",
"updated_at": "2026-09-01T21:09:04.000Z"
}
],
"pagination": {
"page_size": 50,
"has_more": true
}
}Changes
- info
endpoint added
- info