---
title: "List visitor posts on a Facebook Page"
method: GET
path: "/v1/accounts/{accountId}/facebook-visitor-posts"
tags: ["Analytics"]
---

# List visitor posts on a Facebook Page

`GET /v1/accounts/{accountId}/facebook-visitor-posts`

## Request

- Base URL: `https://zernio.com/api`
- URL: `https://zernio.com/api/v1/accounts/{accountId}/facebook-visitor-posts`
- Auth: HTTP bearer

Returns the posts other people published on the connected Facebook Page,
newest first. Zernio reads the Page feed (Graph `/{page-id}/feed`, which
works on New Pages Experience Pages, unlike the deprecated `visitor_posts`
edge) and drops the posts the Page published itself and the posts other
people published on their own timeline that only tag the Page. A Page
without visitor posts returns an empty `data` array.

Cursor-paginated: pass `nextCursor` from the previous response as
`cursor` to read the next page. `limit` sets how many feed entries are
scanned, so a page can hold fewer posts than `limit`, or none, while
`nextCursor` is not null. `nextCursor` is null when there are no more
pages, and the final page can come back empty.

Works on `facebook` accounts with a Page selected. Meta requires the `pages_read_user_content`
permission, which Zernio requests with the comments scope: an account
connected without it receives Meta's refusal as `platform_api_error`.

## Path parameters

- `accountId` string, required

## Query parameters

- `limit` integer
- `cursor` string

## Response `200`

One page of visitor posts

- object
  - `data` FacebookVisitorPost[], required
    - `id` string, required: Facebook post ID (`{pageId}_{postId}`).
    - `message` string, nullable, required: Text of the post. Null for media-only posts.
    - `createdTime` string, nullable, required: Creation time as Meta returns it (ISO 8601).
    - `from` object, nullable, required: The person or Page that published the post. Null when Meta omits the author.
      - `id` string, required: App-scoped ID of the author.
      - `name` string, nullable, required
    - `permalinkUrl` string, nullable, required: Public Facebook URL of the post.
    - `media` object, nullable, required: Media of the first attachment, in the same shape as Facebook Page posts. Null when the post has no attachment.
      - `mediaType` 'image' | 'video' | 'carousel' | 'text', required
      - `thumbnailUrl` string, required: Temporary CDN URL of the cover image. Empty when there is none.
      - `mediaItems` object[], required
        - `type` 'image' | 'video', required
        - `url` string, required: Temporary CDN URL.
        - `thumbnail` string: Poster frame of a video.
  - `nextCursor` string, nullable, required: Pass as `cursor` to read the next page. Null when there are no more pages.

## Other responses

- `400`: Invalid accountId, limit or cursor, an account on another platform (`platform_not_supported`), or Meta refused the request (`platform_api_error`, for example the Page was connected without the `pages_read_user_content` permission).
- `401`: Missing or invalid API key. `code` is `missing_credentials` when no Authorization header was sent and `invalid_credentials` when the key is unknown, revoked or expired.
- `403`: The API key is not scoped to this account.
- `404`: The account is not reachable by the caller (`account_not_found`).
- `409`: The account exists but is inactive or needs reconnection. Reconnect it, then read GET /v1/accounts for its current account ID before retrying. Code: ads_connection_required.
- `422`: The connection has no Facebook Page selected (`linked_account_required`). Select a Page or reconnect the account.

## Changes

- **2026-10-24** `72c38c2e087c`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/accounts/:accountId/facebook-visitor-posts/get.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) - [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) - [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/870c96025f19?raw)
