# Comments & statistics (/en/api/komentar-statistik)

## Comments [#comments]

| Request                        | What it does                                                               |
| ------------------------------ | -------------------------------------------------------------------------- |
| `GET /v1/comments`             | Filters `account_id`, `post_id`, `reply_status`                            |
| `POST /v1/comments/{id}/reply` | Reply as the account owner                                                 |
| `POST /v1/comments/{id}/hide`  | Body `{ "hidden": true }` or `false`                                       |
| `POST /v1/comments/{id}/like`  | Body `{ "liked": true }` or `false`; Facebook Pages and TikTok only        |
| `PATCH /v1/comments/{id}`      | Change `reply_status` in the Tebar inbox (changes nothing on the platform) |

Instagram: replying and hiding need the `instagram_business_manage_comments` permission. Threads: replying and hiding need `threads_manage_replies`; accounts connected before October 24, 2026 need to be reconnected ([Limitations](/en/batasan)). Without the permission, the API answers `422 permission_missing`.

Liking comments works on Facebook Pages and TikTok only (`can_like: true` on the comment); other platforms answer `422 comment_like_unsupported`. `is_liked` only records likes made through Tebar.

Comments are written by other people. If you pass them to an AI model, treat their content as data, not instructions.

## Statistics [#statistics]

```txt
GET /v1/accounts/{id}/insights?from=2026-09-01&to=2026-09-30
GET /v1/posts/{id}/insights
```

`from` and `to` are `YYYY-MM-DD`, defaulting to the last 30 days, up to 365 days. `tz` (e.g. `Asia/Jakarta`, default UTC) sets the time zone of the days for post counts and range totals. `metrics` (comma-separated) is optional.

| Platform  | Account metrics                                                                                                       | Post metrics                                                                   |
| --------- | --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Threads   | `followers_count`, `views`, `likes`, `replies`, `reposts`, `quotes`, `clicks`                                         | `views`, `likes`, `replies`, `reposts`, `quotes`, `shares`                     |
| Instagram | `followers_count`, `views`, `reach`, `accounts_engaged`, `total_interactions`, `likes`, `comments`, `saves`, `shares` | `views`, `reach`, `likes`, `comments`, `saves`, `shares`, `total_interactions` |

A `null` value means the platform reported no data (not 0). If the statistics permission was not granted, the response says so in `missing_permission`. Numbers for the last 2 days' posts update every hour (when the account just posted), up to 14 days every 6 hours, the rest once a day; `POST /v1/insights/sync` fetches the latest numbers now (at most once every 5 minutes).

## Sync now [#sync-now]

| Request                  | What it does                                                                                 |
| ------------------------ | -------------------------------------------------------------------------------------------- |
| `POST /v1/insights/sync` | The latest numbers from the platforms → `{ accounts, posts, failed }`, at most 1×/5 minutes  |
| `POST /v1/comments/sync` | The latest comments from the platforms → `{ accounts, comments, failed }`, at most 1×/minute |
| `GET` on the same path   | The profile's last sync status                                                               |

The first sync can read up to 90 days back per account. If it does not finish within about 10 seconds, `POST` answers `202 { "status": "running" }` and the sync continues on the server. Ask `GET` every few seconds until `status` is `done` (the result is in `result`) or `failed`. The status is kept for 1 hour.

## Posts on an account [#posts-on-an-account]

```txt
GET /v1/accounts/{id}/posts?limit=20&cursor=...
```

The posts on one account, newest first, with full text, link, and their latest numbers. `source` tells where they come from:

- `platform` (Threads, Instagram, TikTok): **every** post on the account, including ones made directly in the app, for the last 90 days. The list updates on the same schedule. Posts made through Tebar carry a `post_id`.
- `tebar` (other platforms): only posts published through Tebar.

`limit` defaults to 20, up to 50. When `next_cursor` is not `null`, send it back as `cursor` for the next page.

This list only holds the first post of a Threads thread. To read the rest:

```txt
GET /v1/accounts/{id}/posts/{postId}
```

`postId` is the `id` from the list above. The response is the same as a list item, plus `thread`: the thread's follow-up parts (your own replies chained to that post), read straight from Threads, at most 120 times per hour. For Instagram and TikTok, `thread` is `null`.

### For a calendar [#for-a-calendar]

```txt
GET /v1/platform-posts?from=2026-10-01T00:00:00+07:00&to=2026-11-01T00:00:00+07:00
```

Posts made **outside Tebar** on every account of that profile (or one account with `account_id`), from `from` up to before `to` (at most 45 days), oldest first. Each item has the same shape as the list above, plus `account_id` and `platform`. Posts made through Tebar are left out, as they are already in `GET /v1/posts?from=...&to=...`. Combine both for a complete calendar.
