---
title: "✨ List comments"
method: GET
path: "/api/comments/"
tags: ["Comments"]
---

# ✨ List comments

`GET /api/comments/`

<Card href="https://humansignal.com/goenterprise">
        <img style="pointer-events: none; margin-left: 0px; margin-right: 0px;" src="https://docs.humansignal.com/images/badge.svg" alt="Label Studio Enterprise badge"/>
        <p style="margin-top: 10px; font-size: 14px;">
            This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise)
        </p>
    </Card>
List all comments for a specific annotation ID.

## Query parameters

- `annotation` integer
- `annotators` string
- `draft` integer
- `expand_created_by` boolean
- `ordering` string
- `projects` string

## Response `200`

List of comments

- MaybeExpandedComment[]
  - union
    - Comment — Comment Serializer with FSM state support. Note: The 'state' field will be populated from the queryset annotation if present, preventing N+1 queries. Use .with_state() on your queryset. The state field display is controlled by both: - fflag_feat_fit_568_finite_state_management (FSM background calculations) - fflag_feat_fit_710_fsm_state_fields (state field display in APIs)
      - `annotation` integer, nullable
      - `classifications` unknown
      - `created_at` string, date-time, required — Creation time
      - `created_by` integer, required — User who made this comment
      - `draft` integer, nullable
      - `id` integer, required
      - `is_resolved` boolean — True if the comment is resolved
      - `project` integer, nullable, required
      - `region_ref` unknown
      - `resolved_at` string, date-time, nullable, required — Resolving time
      - `state` string, required
      - `task` integer, nullable, required
      - `text` string, nullable — Reviewer or annotator comment
      - `updated_at` string, date-time, required — Last updated time
    - CommentSerializerWithExpandedUser — Comment Serializer with FSM state support. Note: The 'state' field will be populated from the queryset annotation if present, preventing N+1 queries. Use .with_state() on your queryset. The state field display is controlled by both: - fflag_feat_fit_568_finite_state_management (FSM background calculations) - fflag_feat_fit_710_fsm_state_fields (state field display in APIs)
      - `annotation` integer, nullable
      - `classifications` unknown
      - `created_at` string, date-time, required — Creation time
      - `created_by` LseUser, required — A ModelSerializer that takes additional arguments for "fields", "omit" and "expand" in order to control which fields are displayed, and whether to replace simple values with complex, nested serializations
        - `active_organization` integer, nullable
        - `active_organization_meta` string, required
        - `allow_newsletters` boolean, nullable — Allow sending newsletters to user
        - `avatar` string, required
        - `custom_hotkeys` unknown
        - `date_joined` string, date-time
        - `email` string, email
        - `first_name` string
        - `id` integer, required
        - `initials` string, required
        - `last_activity` string, date-time, required
        - `last_name` string
        - `lse_fields` LseFields, required
          - `email_notification_settings` string, required
          - `invite_activated` boolean, nullable
          - `invite_expired` string, required
          - `invite_expired_at` string, required
          - `invited_at` string, date-time, nullable
          - `invited_by` integer, nullable
          - `onboarding_state` 'not_started' | 'signup' | 'trial_signup' | 'first_tutorial' | 'in_app_guidance' | 'complete' — * `not_started` - Not Started * `signup` - Signup * `trial_signup` - Trial Signup * `first_tutorial` - First Tutorial * `in_app_guidance` - In App Guidance * `complete` - Complete
          - `social_auth_finished` boolean, nullable — Is user finished social authentication
          - `trial_company` string, nullable
          - `trial_experience_labeling` string, nullable
          - `trial_license_enterprise` boolean, nullable
          - `trial_models_in_production` string, nullable
          - `trial_role` 'annotator' | 'annotator_team_manager' | 'business_analyst' | 'business_or_data_team_leadership' | 'data_engineer_platform_engineer' | 'data_scientist' | 'other' — * `annotator` - Annotator * `annotator_team_manager` - Annotator Team Manager * `business_analyst` - Business Analyst * `business_or_data_team_leadership` - Business Or Data Team Leadership * `data_engineer_platform_engineer` - Data Engineer Platform Engineer * `data_scientist` - Data Scientist * `other` - Other
        - `org_membership` OrganizationMembership[], required
          - `active` string, required
          - `organization_id` integer, required — Organization ID
          - `role` string, required
        - `organization_membership` OrganizationMembership, required
          - `active` string, required
          - `organization_id` integer, required — Organization ID
          - `role` string, required
        - `pause` string, required
        - `phone` string
        - `username` string, required
      - `draft` integer, nullable
      - `id` integer, required
      - `is_resolved` boolean — True if the comment is resolved
      - `project` integer, nullable, required
      - `region_ref` unknown
      - `resolved_at` string, date-time, nullable, required — Resolving time
      - `state` string, required
      - `task` integer, nullable, required
      - `text` string, nullable — Reviewer or annotator comment
      - `updated_at` string, date-time, required — Last updated time

---

[API](https://skmtc.dev/humansignal/apis/label-studio-api.md) · [All operations](https://skmtc.dev/humansignal/apis/label-studio-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/humansignal/label-studio-api/revisions/fa73fba01480/schema)
