---
title: "List comments on a content article"
method: GET
path: "/content/{id}/comments"
tags: ["Comments"]
---

# List comments on a content article

`GET /content/{id}/comments`

## Request

- Base URL: `https://next.frase.io/api/v1`
- URL: `https://next.frase.io/api/v1/content/{id}/comments`
- Auth: API key in header `X-API-KEY`

Returns a flat list of human + AI comments attached to an article. Clients can rebuild threads via `parent_comment_id` and `root_comment_id`. AI-authored comments visible to the caller are filtered by the same visibility rules used in the app: owners and admins see everything; other members only see AI comments they requested or were @-mentioned in (directly or anywhere in the same thread). API keys without a bound user are treated as admin-equivalent.

## Path parameters

- `id` string, uuid, required

## Query parameters

- `status` 'open' | 'resolved' | 'all'

## Response `200`

Flat array of comments for the article.

- object
  - `data` object
    - `comments` Comment[]
      - `id` string, uuid
      - `body` string: Markdown body. For AI comments, the AI-metadata prefix is already stripped.
      - `status` 'open' | 'resolved'
      - `selection_start` integer, nullable: Editor position (ProseMirror coordinates) where the anchored selection begins. AI comments created via the public `POST /content/{id}/ai-comments` endpoint return `null` here — use `selection_text` to locate the anchor.
      - `selection_end` integer, nullable: Editor position where the anchored selection ends. See `selection_start` for nullability notes.
      - `selection_text` string, nullable: Verbatim text excerpt the comment is anchored to.
      - `content_version` integer, nullable
      - `parent_comment_id` string, uuid, nullable
      - `root_comment_id` string, uuid, nullable
      - `mentioned_user_ids` string[]
      - `author` object
        - `id` string, uuid, nullable
        - `name` string, nullable
        - `email` string, nullable
        - `avatar_url` string, nullable
        - `is_system_user` boolean
      - `ai_suggestion` object, nullable: Present on AI-authored comments. `suggested_text` is the replacement copy that `POST /content/{id}/ai-comments/{commentId}/apply` will splice into the article body.
        - `category` 'structure' | 'clarity' | 'seo' | 'governance' | 'engagement' | 'authority'
        - `suggested_text` string
      - `created_at` string, date-time
      - `updated_at` string, date-time, nullable
      - `resolved_at` string, date-time, nullable
      - `resolved_by_id` string, uuid, nullable
  - `request_id` string

## Other responses

- `400`: Validation failed
- `401`: Authentication failed
- `404`: Resource not found
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/frase/apis/frase-api.md) · [All operations](https://skmtc.dev/frase/apis/frase-api/llms.txt) · [OpenAPI document](https://skmtc.dev/frase/apis/frase-api/revisions/7fb75d89f7a4?raw)
