---
title: "Per-Content Prompt Citation Breakdown"
method: POST
path: "/api/v1/content/prompts"
tags: ["Content"]
---

# Per-Content Prompt Citation Breakdown

`POST /api/v1/content/prompts`

For a single tracked content item, returns every prompt whose AI responses cite the URL — with citations, citation %, and estimated impressions for the date range.

Use this to drill into a specific URL after `POST /api/v1/content`. Works for both 1st-party (topic-attached) and 3rd-party / Reddit content without topic assignment.

When the URL exists but has no normalized form (legacy unnormalized rows) the response is a successful 200 with `prompts: []`. Unknown `content_id` returns 404.

## Request body

- ContentPromptBreakdownRequest — Request body for drilling into the prompts that cite a single content item.
  - `website_id` string, uuid, required — The website that owns the content item. Must match the content's website.
  - `content_id` string, uuid, required — The `content_id` returned by `POST /api/v1/content`. The endpoint resolves this server-side to a normalized URL and queries every prompt whose responses cite it.
  - `filters` ApiFilters, required — Filters for querying responses and metrics. Pass location filters in the JSON body as `filters.location_ids`.
    - `start_date` string, date-time, required — Filter start date (UTC)
    - `end_date` string, date-time — Filter end date (UTC)
    - `models` string[] — Filter by AI models
    - `prompt_ids` string[] — Filter by specific prompt IDs
    - `competitor_ids` string[] — Filter by specific competitor IDs
    - `location_ids` string[] — Filter by location IDs. Pass this in the JSON body as `filters.location_ids`, even when filtering by a single location. Use IDs returned by `GET /api/v1/locations`.
    - `prompt_status` 'active' | 'paused' — Filter by prompt status
    - `prompt_type` 'branded' | 'non_branded' — Filter by prompt type
  - `mentioned` boolean — If `true`, only count responses that mention your brand. If `false`, only responses that don't. Omit to count every response.

## Response `200`

Successful response with the list of citing prompts.

- ContentPromptBreakdownResponse
  - `content_id` string, uuid, required — The `content_id` that was queried.
  - `content_url` string, nullable, required — The content's display URL (may be null for legacy rows).
  - `content_normalized_url` string, nullable, required — The content's normalized URL — the value joined against citation data. `null` for legacy rows that were never normalized; in that case `prompts` is always `[]`.
  - `prompts` ContentPrompt[], required
    - `prompt_id` string, uuid, required — Unique identifier for the prompt.
    - `prompt` string, required — Prompt text.
    - `citation_percent` number, required — Percentage of this prompt's responses (in the date range) that cite the content URL.
    - `citations` number, required — Count of this prompt's responses (in the date range) that cite the content URL.
    - `estimated_impressions` number, nullable, required — Estimated impressions attributable to this prompt across the date range. May be null when impression modeling is not available.

## 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)
