GET/api/v4/social/brands/{brandId}/posts

List a brand's posts

Returns a paginated list of a brand's social posts with their content, schedule, platforms and per-channel status.

Requires an API key. See Authentication for header format and key rotation.

Parameters

Path

NameTypeRequiredDescription
brandIdstringrequiredBrand UUID whose posts should be listed.

Query

NameTypeRequiredDescriptionDefault
filtersstringoptionalJSON-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).
pageintegeroptional1-based page number. Defaults to 1.
sizeintegeroptionalRows per page. Defaults to 20.
fetchPostContentbooleanoptionalWhen `true`, each row carries its full `content` object. Leave it off for a lighter list.

Responses

200A page of posts plus `pageInfo` for paging.
Response
{  "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.

  • socialPostId is the plain UUID accepted by get, insights and cancel.
  • Filters travel as one JSON-encoded string in the filters query parameter, not as separate parameters. URL-encode it.
  • Paging is offset-based (page / size); pageInfo.total is the total number of matching posts, not the size of this page. totalPublishedPosts and totalEngagementPosts are 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}.
  • startDate and endDate filter on the post's schedule and are read in the brand's timezone, the same zone scheduleDate / scheduleTime are interpreted in.
  • publishedOn is null until at least one channel goes live. A post whose channels all failed keeps publishedOn: null and a status of FAILED.
  • approvalState, approver, actionOn and actionBy are populated only for accounts running a post-approval workflow; they stay null otherwise.
  • Set fetchPostContent=true only when you are rendering post bodies; the lighter default is enough for a calendar.
Request
curl -X GET 'https://listingsapi.com/api/v4/social/brands/<brandId>/posts' \  -H "Authorization: API $LISTINGSAPI_KEY"