# List posts

> Posts from every account in a profile, newest first.

Canonical: <https://www.tryadeli.com/docs/api/posts/list-posts>

`GET https://app.tryadeli.com/api/v1/posts`

Authorization: `Bearer <API key>` — see [Authentication](https://www.tryadeli.com/docs/authentication)

Lists posts from the Instagram accounts, Facebook Pages, TikTok accounts,
YouTube channels, and Bluesky accounts in one profile, newest first. Passing `platform=whatsapp` returns
`422 unsupported_platform`. Uses the
[aggregate response contract](https://www.tryadeli.com/docs/concepts#partial-responses), and follows
each provider's pagination internally. TikTok is read 20 posts per request and
rate-limited per account, so its listing stops at the 60 most recent posts.
YouTube reads cost quota shared by every Adeli customer, so its listing is the 50
most recent videos per channel. X bills every post it returns
([X API pricing](https://www.tryadeli.com/docs/pricing/x)), so X is listed only when you ask for it with
`platform=x` or an X `accountId`, and then only the 10 most recent posts.
Bluesky lists the 10 most recent top-level posts per account, without replies
or reposts; reposts are reported as `shares`.

**Query parameters**

| Name        | Type                                                        | Required | Description                                                                                     |
| ----------- | ----------------------------------------------------------- | -------- | ----------------------------------------------------------------------------------------------- |
| `platform`  | `"instagram" \| "facebook" \| "tiktok" \| "youtube" \| "x"` |          | Optional. Narrow to one provider. X is listed only when asked for.                              |
| `accountId` | `uuid`                                                      |          | Narrow to one connected account.                                                                |
| `profileId` | `uuid`                                                      |          | Required unless you pass accountId, which names its profile. If you pass both, they must agree. |

TikTok posts add `shares`, `views`, and `reach` to `engagement`, and their
`media[].url` is TikTok's embeddable player. For watch time and retention, pass
the `providerId` to
[TikTok post insights](https://www.tryadeli.com/docs/api/analytics/tiktok-post-insights).

YouTube videos add `views` to `engagement`; `caption` is the video's title and
`media[].url` its watch page. Pass the `providerId` to
[YouTube video insights](https://www.tryadeli.com/docs/api/analytics/youtube-video-insights)
for watch time.

X posts add `shares` (reposts) and `views` (impressions) to `engagement`;
`comments` counts replies, and `caption` is the post's text.

**Errors** — `401 unauthorized`, `400 invalid_request`,
`422 unsupported_platform`, `404 profile_not_found`, `404 account_not_found`,
`502 provider_error`.

## Request examples

**cURL**

```bash
curl --fail-with-body "https://app.tryadeli.com/api/v1/posts?profileId=00000000-0000-4000-8000-000000000001" \
  -H "Authorization: Bearer $ADELI_API_KEY"
```

**JavaScript**

```javascript
const response = await fetch("https://app.tryadeli.com/api/v1/posts?profileId=00000000-0000-4000-8000-000000000001", {
  headers: {
    Authorization: `Bearer ${process.env.ADELI_API_KEY}`,
  },
});
console.log(await response.json());
```

**Python**

```python
import os

import requests

response = requests.get(
    "https://app.tryadeli.com/api/v1/posts",
    headers={"Authorization": f"Bearer {os.environ['ADELI_API_KEY']}"},
    params={
        "profileId": "00000000-0000-4000-8000-000000000001",
    },
)
print(response.json())
```

## Responses

### 200

```json
{
  "status": "complete",
  "posts": [
    {
      "id": "instagram_post_00000000-0000-0000-0000-000000000000_17900000000000000",
      "platform": "instagram",
      "accountId": "00000000-0000-0000-0000-000000000000",
      "profileId": "00000000-0000-4000-8000-000000000001",
      "providerId": "17900000000000000",
      "caption": "Hello",
      "media": [{ "type": "IMAGE", "url": "https://...", "thumbnailUrl": "https://..." }],
      "permalink": "https://www.instagram.com/p/...",
      "engagement": { "likes": 12, "comments": 3 },
      "publishedAt": "2026-04-01T12:00:00.000Z"
    },
    {
      "id": "tiktok_post_00000000-0000-0000-0000-000000000002_7300000000000000000",
      "platform": "tiktok",
      "accountId": "00000000-0000-0000-0000-000000000002",
      "profileId": "00000000-0000-4000-8000-000000000001",
      "providerId": "7300000000000000000",
      "caption": "Backyard birds",
      "media": [{ "type": "VIDEO", "url": "https://www.tiktok.com/player/v1/7300000000000000000", "thumbnailUrl": "https://p16-sign-va.tiktokcdn.com/..." }],
      "permalink": "https://www.tiktok.com/@creator/video/7300000000000000000",
      "engagement": { "likes": 30, "comments": 6, "shares": 4, "views": 2400, "reach": 1900 },
      "publishedAt": "2026-03-30T12:00:00.000Z"
    }
  ],
  "errors": []
}
```

### 422

```json
{
  "error": {
    "code": "unsupported_platform",
    "message": "Only Instagram, Facebook, TikTok, YouTube, X, and Bluesky posts are listed by this endpoint"
  }
}
```
