---
title: "List posts on a platform"
method: GET
path: "/api/businesses/{business_id}/integrations/{integration_id}/posts"
tags: ["integrations"]
---

# List posts on a platform

`GET /api/businesses/{business_id}/integrations/{integration_id}/posts`

## Request

- Base URL: `https://api.mymarky.ai`
- URL: `https://api.mymarky.ai/api/businesses/{business_id}/integrations/{integration_id}/posts`
- Auth: HTTP bearer

List posts published to a connected platform account, with stats.

Live-fetches the most recent posts on the connected account (Marky-posted
or otherwise) plus each post's metrics. Works across Facebook, Instagram,
LinkedIn, Twitter/X, TikTok, Pinterest, and YouTube. Pagination via the
returned `next_cursor` for platforms that support it.

Some accounts cannot be listed at all — a LinkedIn personal profile, or a
platform whose reads we have turned off on cost grounds. Those return 200
with `posts: []` and a populated `unavailable_reason`, NOT an error. Read
that field before concluding the account has no posts.

`unavailable_reason` is also set when the posts ARE returned but their stats
could not be: an Instagram account holding media from before it became a
business account gets its posts with every metric null. Null means UNKNOWN,
never zero — do not report it as no engagement.

Errors:
    400 invalid_value: The integration_id is not a valid UUID.
    400 invalid_request: The date range or pagination cursor was rejected.
    401 authentication_required: API key or token is missing, invalid, or revoked.
    401 SOCIAL_TOKEN_EXPIRED: The connected account's token expired and could not be refreshed — the response's reconnect_url points to where to reconnect.
    403 permission_denied: Your plan does not include API access.
    404 resource_not_found: No integration with that ID exists, or it is not in your org.
    429 rate_limit_exceeded: You sent too many requests this minute.
    502 UPSTREAM_PROVIDER_ERROR: The social platform returned an error while fetching posts.

## Path parameters

- `business_id` string, required: A UUID identifier.
- `integration_id` string, required: A UUID identifier.

## Query parameters

- `since` string, nullable: Start date (ISO 8601 or Unix timestamp). Platform-dependent.
- `until` string, nullable: End date (ISO 8601 or Unix timestamp). Platform-dependent.
- `limit` integer: Max posts per page
- `cursor` string, nullable: Pagination cursor. Pass the `next_cursor` from a previous response.

## Headers

- `Marky-Version` '2026-04-08' | '2026-07-17' | '2026-08-02' | '2026-08-04' | '2026-08-06'

## Response `200`

Successful Response

- PaginatedPostStats: Paginated response for post stats. Used for both API responses and internal service communication.
  - `posts` SrcVendorsSocialsAnalyticsModelsPostWithStats[], required
    - `publish_id` string, required
    - `platform` string, nullable
    - `created_time` string, required
    - `caption` string
    - `permalink_url` string, nullable
    - `title` string, nullable
    - `thumbnail_url` string, nullable
    - `media_url` string, nullable
    - `media_urls` string[], nullable
    - `alt_text` string, nullable
    - `media_type` string, nullable
    - `stats` PostStats, required: Statistics for a single post.
      - `fetched_at` string, date-time
      - `likes` integer, nullable
      - `comment_count` integer, nullable
      - `impressions` integer, nullable
      - `shares` integer, nullable
      - `reach` integer, nullable
      - `saves` integer, nullable
      - `clicks` integer, nullable
      - `views` integer, nullable
      - `video_duration_ms` integer, nullable
      - `avg_watch_time_ms` integer, nullable
      - `total_watch_time_ms` integer, nullable
      - `completion_rate` number, nullable
      - `video_views_organic` integer, nullable
      - `video_views_paid` integer, nullable
    - `type` string: Type of social media post.
  - `next_cursor` string, nullable
  - `total_count` integer, nullable
  - `unavailable_reason` string, nullable

## Other responses

- `400`: Bad request — the input was malformed or otherwise invalid.
- `401`: Authentication failed — the API key is missing or invalid.
- `403`: Forbidden — the key is valid but may not access this resource.
- `404`: Not found — no resource matches the id in the path.
- `422`: Validation error — one or more fields failed validation.
- `429`: Rate limited — retry after the window resets (see Retry-After).
- `500`: Server error — something failed on our side; retry or quote X-Request-Id.

---

[API](https://skmtc.dev/mymarky/apis/marky-public-api.md) · [All operations](https://skmtc.dev/mymarky/apis/marky-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/mymarky/apis/marky-public-api/revisions/25aeacae455c?raw)
