/api/v4/social/brands/{brandId}/postsList a brand's posts
Returns a paginated list of a brand's social posts with their content, schedule, platforms and per-channel status.
Parameters
Path
| Name | Type | Required | Description |
|---|---|---|---|
| brandId | string | required | Brand UUID whose posts should be listed. |
Query
| Name | Type | Required | Description | Default |
|---|---|---|---|---|
| filters | string | optional | JSON-encoded filter object. Fields: `name` (substring match on the post's internal name), `platforms` (array of the platform enum), `status` (array of `DRAFT`, `PENDING`, `SCHEDULED`, `PUBLISHED`, `FAILED`, `ARCHIVED`, `REJECTED`), `startDate` and `endDate` (`YYYY-MM-DD`, filtering on the post's schedule in the brand's timezone), `socialConnectedChannelId` (one connection), `approvalState` (array of workflow states), `viewMode` (string) and `filterByUser` (boolean, defaults to false). | — |
| page | integer | optional | 1-based page number. Defaults to 1. | — |
| size | integer | optional | Rows per page. Defaults to 20. | — |
| fetchPostContent | boolean | optional | When `true`, each row carries its full `content` object. Leave it off for a lighter list. | — |
Responses
200A page of posts plus `pageInfo` for paging.
{ "data": { "getSocialMediaPostByList": { "socialPosts": [ { "socialPostId": "c47a1e58-2b93-4f10-a6d7-58e0c9b12345", "name": "Autumn collection launch", "status": "PUBLISHED", "platforms": ["INSTAGRAM", "FACEBOOK", "LINKEDIN"], "socialPlatformIds": [2, 1, 4], "socialProfileDetailsId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "createdAt": "2026-09-28T14:02:11Z", "createdBy": 40122, "author": "Dana Reyes", "approver": null, "approvalState": null, "actionOn": null, "actionBy": null, "publishedOn": "2026-10-02T13:30:04Z", "postAutomationId": null, "content": { "message": "Our autumn collection lands today. Solid oak, hand-finished, made two blocks from the shop.", "images": ["https://cdn.example.com/social/autumn-collection.jpg"], "video": [], "liveLink": "https://www.instagram.com/p/CxYz1234abc/", "boosted": false }, "connectedChannels": [ { "id": "b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7", "platform": "INSTAGRAM", "displayName": "Jenny Home", "status": "SUCCESS", "liveLink": "https://www.instagram.com/p/CxYz1234abc/", "error": null } ] } ], "pageInfo": { "total": 64, "hasNextPage": true, "totalEngagementPosts": 41, "totalPublishedPosts": 47 } } }}401Unauthenticated, missing or invalid API key.
404No brand with that ID on this account (`SY95043`).
Lists one brand's posts, newest first, with filters for name, platform, status, approval state and schedule window. Each row carries enough to render a calendar or a feed without a second call per post.
Use case: a content calendar. Filter with
filters={"status":["SCHEDULED"],"startDate":"2026-10-01","endDate":"2026-10-31"}
and place each row at its publishedOn or, for a post that has not gone out yet,
at the schedule you sent. Give each entry a cancel action
wired to POST /social/posts/cancel, and open
the detail view with
GET /social/posts/{postId}.
Use case: a failure sweep. Run a nightly pass with
filters={"status":["FAILED"]} across each brand and alert on the rows that come
back. connectedChannels[].error tells you which platform refused and why; a
channel reporting an expired authorization needs a fresh
connection link, not a retry.
Notes.
socialPostIdis the plain UUID accepted by get, insights and cancel.- Filters travel as one JSON-encoded string in the
filtersquery parameter, not as separate parameters. URL-encode it. - Paging is offset-based (
page/size);pageInfo.totalis the total number of matching posts, not the size of this page.totalPublishedPostsandtotalEngagementPostsare brand-wide counters, useful as dashboard tiles. - The row carries the post-level status only. For the resolved schedule instant
and the per-channel outcome, open the post with
GET /social/posts/{postId}. startDateandendDatefilter on the post's schedule and are read in the brand's timezone, the same zonescheduleDate/scheduleTimeare interpreted in.publishedOnis null until at least one channel goes live. A post whose channels all failed keepspublishedOn: nulland astatusofFAILED.approvalState,approver,actionOnandactionByare populated only for accounts running a post-approval workflow; they stay null otherwise.- Set
fetchPostContent=trueonly when you are rendering post bodies; the lighter default is enough for a calendar.
curl -X GET 'https://listingsapi.com/api/v4/social/brands/<brandId>/posts' \ -H "Authorization: API $LISTINGSAPI_KEY"