> For the complete documentation index, see [llms.txt](https://help.contouron.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.contouron.com/api/comments.md).

# Comments

> For the complete documentation index, see [llms.txt](https://help.contouron.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.contouron.com/api/comments.md).

## Comments

Contouron allows you to read and post comments on your published Instagram posts. Twitter/X, TikTok, Pinterest, Threads, Bluesky, and YouTube are not supported at this time. Three endpoints let you list, read, and post comments:

* [List Comments](#list-comments) — `GET /v2/comments`
* [Get Comment](#get-comment) — `GET /v2/comments/:commentId`
* [Post Comment](#post-comment) — `POST /v2/comments`

Comments are available on all plans.

Contouron does not backfill comments. It starts capturing comments once your account has comments enabled and you connect or reconnect your account. Comments left before then do not appear in these endpoints.

Contouron retains comments for up to 45 days. Comments older than 45 days are not available through these endpoints.

The `/comments` endpoints cover two directions:

* **Inbound comments** your audience leaves on your posts. These have `isAuthor: false`.
* **Outbound comments** you post through Contouron. These have `isAuthor: true`.

The comments API lists and posts top-level comments and one level of replies. You can reply to a top-level comment on your post, but you cannot reply to a reply.

### Before You Start

Contouron must have permissions to read and post comments on your account before you can use the Contouron comments endpoints.

If you connected your account before comments launched, reconnect it so Contouron has the new permission.

* For Instagram, see Connect Instagram.

***

### List Comments

#### Endpoint

**Base URL:** `https://backend.contouron.com/v2`

**URL:** `/comments`

**Method:** `GET`

#### Description

Returns your comments across connected accounts, ordered by creation time (most recent first). Use cursor-based pagination and the optional filters below.

#### Query Parameters

| Field             | Type      | Required | Description                                                         |
| ----------------- | --------- | -------- | ------------------------------------------------------------------- |
| `limit`           | `integer` | No       | Maximum comments to return (1-250). Default 50.                     |
| `cursor`          | `string`  | No       | Cursor from a previous response. Pass it to fetch the next page.    |
| `platform`        | `array`   | No       | Filter by platform. Value: `instagram`.                             |
| `accountId`       | `string`  | No       | Filter to a single connected account.                               |
| `parentCommentId` | `string`  | No       | Filter to direct replies to a single comment.                       |
| `postId`          | `string`  | No       | Filter to comments on a single Contouron-published post.            |
| `since`           | `string`  | No       | Only include comments created on or after this ISO 8601 timestamp.  |
| `until`           | `string`  | No       | Only include comments created on or before this ISO 8601 timestamp. |

#### Response

**Status Code:** `200 OK`

```json
{
  "items": [
    {
      "id": "cmt_abc123",
      "accountId": "98434",
      "platform": "instagram",
      "postId": "post_xyz789",
      "platformPostId": "17851234567890",
      "platformCommentId": "17899876543210",
      "authorId": "1784000000",
      "isAuthor": false,
      "text": "Love this!",
      "status": "posted",
      "errorCode": null,
      "errorMessage": null,
      "createdAt": "2026-07-01T12:34:56Z"
    }
  ],
  "cursor": "eyJz..."
}
```

| Field    | Type     | Description                                                       |
| -------- | -------- | ----------------------------------------------------------------- |
| `items`  | `array`  | List of comments. See [Comment Object](#comment-object).          |
| `cursor` | `string` | Cursor for the next page. Absent when there are no more comments. |

***

### Get Comment

#### Endpoint

**URL:** `/comments/:commentId`

**Method:** `GET`

#### Description

Fetches a single comment by its Contouron ID. The comment is an inbound reply from your audience or an outbound comment you posted through Contouron.

#### Path Parameters

| Field       | Type     | Required | Description                  |
| ----------- | -------- | -------- | ---------------------------- |
| `commentId` | `string` | Yes      | Contouron ID of the comment. |

#### Response

**Status Code:** `200 OK`

Returns a [Comment Object](#comment-object).

***

### Post Comment

#### Endpoint

**URL:** `/comments`

**Method:** `POST`

#### Description

Posts a comment on one of your published posts, or a reply to an existing top-level comment when you pass `parentCommentId`. Contouron queues the comment and posts it in the background, so the response returns status `queued`. Poll [Get Comment](#get-comment) with the returned `id` to confirm the comment reached `posted` or `failed`.

#### Request Body

```json
{
  "postId": "post_xyz789",
  "text": "Thanks everyone!"
}
```

| Field             | Type     | Required | Description                                                                                                             |
| ----------------- | -------- | -------- | ----------------------------------------------------------------------------------------------------------------------- |
| `postId`          | `string` | Yes      | Contouron ID of the published post to comment on. Get it from List Posts, from items whose `state.type` is `published`. |
| `text`            | `string` | Yes      | Plain-text comment body. Instagram allows up to 2200 characters.                                                        |
| `parentCommentId` | `string` | No       | Contouron ID of a top-level, posted comment on the same post to reply to. Replies to replies are not supported.         |

#### Response

**Status Code:** `201 Created`

Returns a [Comment Object](#comment-object) with status `queued`.

#### Errors

| Status | Reason                                                                                                                                                                                                           |
| ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `404`  | The published post or parent comment was not found, or comments are not enabled for your account.                                                                                                                |
| `422`  | The post's platform does not support comments, the comment exceeds the platform's character limit, the parent comment is invalid, or you reached your plan's monthly active-contacts limit (error code `20101`). |
| `429`  | Rate limit exceeded (30 requests per minute).                                                                                                                                                                    |

#### Replies and Your Contacts Limit

Replying to a comment from your audience counts the person as an active contact for the month, and your plan limits how many active contacts you reach. When you pass the limit, Post Comment returns `422` with error code `20101`. Replying to your own comment does not count.

See Active Contacts for the definition and per-plan limits.

***

### Comment Object

| Field               | Type              | Description                                                                                     |
| ------------------- | ----------------- | ----------------------------------------------------------------------------------------------- |
| `id`                | `string`          | Contouron comment ID.                                                                           |
| `accountId`         | `string`          | ID of the connected account the comment belongs to.                                             |
| `platform`          | `string`          | `instagram`.                                                                                    |
| `postId`            | `string or null`  | Contouron ID of the post, when published through Contouron.                                     |
| `parentCommentId`   | `string or null`  | Contouron ID of the parent comment when this comment is a reply. `null` for top-level comments. |
| `platformPostId`    | `string`          | Social platform (e.g. Instagram) ID of the parent post.                                         |
| `platformCommentId` | `string or null`  | Social platform (e.g. Instagram) ID of the comment.                                             |
| `authorId`          | `string or null`  | Social platform (e.g. Instagram) ID of the comment author.                                      |
| `isAuthor`          | `boolean`         | `true` when your connected account authored the comment. `false` for an audience reply.         |
| `text`              | `string`          | Comment text.                                                                                   |
| `status`            | `string`          | Comment status. See [Status Values](#status-values).                                            |
| `errorCode`         | `integer or null` | Set only when status is `failed`. See Comments Errors.                                          |
| `errorMessage`      | `string or null`  | Set only when status is `failed`.                                                               |
| `createdAt`         | `string`          | ISO 8601 timestamp when the comment was created.                                                |

#### Status Values

| Status       | Meaning                           |
| ------------ | --------------------------------- |
| `queued`     | Accepted and waiting to post.     |
| `processing` | Posting to the social platform.   |
| `posted`     | Live on the social platform.      |
| `failed`     | Did not post. See `errorMessage`. |
| `deleted`    | Removed from the social platform. |

#### Rate Limits

| Endpoint                   | Limit    |
| -------------------------- | -------- |
| `GET /comments`            | 60 / min |
| `GET /comments/:commentId` | 60 / min |
| `POST /comments`           | 30 / min |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://help.contouron.com/api/comments.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
