GET/api/v4/posts/{postId}

Get a post

Returns a single social post campaign with its content, per-site publish status, and engagement analytics.

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

Parameters

Path

NameTypeRequiredDescription
postIdstringrequiredBase64-encoded social post ID (e.g. from the `id` field of a posts list, or the `socialPost.id` returned by POST /posts).

Responses

200The post's content, publish details, and analytics.
{
  "data": {
    "socialPostView": {
      "socialPostId": "U29jaWFsUG9zdDo0NDEyMg==",
      "socialPostInfo": {
        "id": "U29jaWFsUG9zdDo0NDEyMg==",
        "name": "Summer Hours Update",
        "status": "SUCCESS",
        "type": "ANNOUNCEMENT",
        "createdAt": "2026-06-28",
        "scheduledStartDate": "2026-06-28",
        "scheduledEndDate": "2026-07-28",
        "views": 128,
        "clicks": 14,
        "shares": 0,
        "reactions": 3,
        "comments": 1,
        "sites": ["GOOGLE"],
        "message": [
          { "site": "GOOGLE", "message": "We have extended our summer hours! Open until 9pm on weekdays." }
        ],
        "cta": [
          { "type": { "value": "LEARN_MORE", "label": "Learn more" }, "url": "https://jennyhome.example/hours", "site": "GOOGLE", "tinyUrl": "https://tiny.cc/jh-hours" }
        ],
        "contextInfo": null,
        "mediaUrl": [
          { "url": "https://cdn.listingsapi.com/posts/44122/summer.jpg", "site": "GOOGLE", "type": "IMAGE" }
        ],
        "publishDetails": [
          { "site": "GOOGLE", "status": "PUBLISHED", "createdDate": "2026-06-28", "publishedDate": "2026-06-28", "submissionError": null }
        ],
        "postLinks": [
          { "site": "GOOGLE", "link": "https://www.google.com/maps/place/?post=44122" }
        ],
        "locationIds": [1800289]
      },
      "publishedLocationsCount": 1,
      "socialPostAnalyticsBySite": [
        { "site": "GOOGLE", "views": 128, "clicks": 14, "reactions": 3, "shares": 0, "comments": 1 }
      ],
      "socialPostAnalyticsByLocationId": [
        {
          "locationId": 1800289,
          "siteStats": [
            { "site": "GOOGLE", "status": "PUBLISHED", "views": 128, "clicks": 14, "reactions": 3, "shares": 0, "comments": 1 }
          ]
        }
      ]
    }
  }
}
401Unauthenticated — missing or invalid API key.

Fetches one post campaign by its ID, including the message and CTA per site, the media attached, the live publish status on each site (publishDetails), and engagement broken down both by site (socialPostAnalyticsBySite) and by location (socialPostAnalyticsByLocationId).

Use case — post-publish verification. Right after creating an announcement with POST /posts, take the returned socialPost.id and poll GET /posts/{postId} until socialPostInfo.status flips from INPROGRESS to SUCCESS. If a site fails, publishDetails[].submissionError carries the reason and publishDetails[].status shows ERROR.

Use case — engagement dashboard. For a single-location post, read socialPostAnalyticsBySite to render a Google-vs-Facebook comparison of views and clicks without re-listing the whole location.

Notes.

  • postId is the Base64-encoded ID surfaced as id in the posts list or as socialPost.id in the create response — not a raw integer.
  • To fetch a multi-location (bulk) campaign, use GET /bulk-posts/{postId}, which returns the same shape with publishedLocationsCount > 1.

This example is built from the API schema. The live seed account (Jenny Home) has no posts, so there was no real post ID to fetch; an unknown or invalid ID returns {"data":null,"errors":[{"message":"An error occurred processing your request."}]}.

curl -X GET 'https://listingsapi.com/api/v4/posts/<postId>' \
  -H "Authorization: API $LISTINGSAPI_KEY"