Skip to main content
Return up to 50 recent posts or videos per platform for the current workspace. Data is unified into the same post shape across LinkedIn, Facebook, Instagram, TikTok, YouTube, Threads, Pinterest, and Bluesky.

Base URL & auth

https://backend.postsiva.com
curl "https://backend.postsiva.com/unified/posts?limit=10&stats=true" \
  -H "X-API-Key: psk_live_YOUR_KEY"
HeaderRequiredNotes
X-API-KeyYes (or Bearer)Workspace from key. See Authentication.
X-Workspace-IdJWT onlyRequired with JWT login
Omit platforms to return slices for all connected accounts (token-presence scan, plus Threads). Unsupported platform names return 400.

GET /unified/posts

Query parameters

ParameterTypeDefaultDescription
limitinteger10Posts per platform, 1–50
statsbooleantrueInclude per-post engagement where supported (LinkedIn stats API, etc.)
refresh_postsbooleanfalsePull latest post/media lists from platform APIs where supported
refresh_statsbooleanfalseRefresh per-post insights/stats where supported
platformsstring[]all connectedFilter: linkedin, facebook, instagram, tiktok, youtube, threads, pinterest, bluesky
facebook_page_idsstring[]Only fetch/return posts from these Facebook Page IDs
linkedin_organization_idsstring[]Include org/page posts for these LinkedIn organization IDs (URN or numeric)
board_idstringPinterest board id — fetch pins only from this board
Repeat array params in query strings: ?platforms=linkedin&platforms=facebook.

Example — filter platforms and refresh

curl -G "https://backend.postsiva.com/unified/posts" \
  -H "X-API-Key: psk_live_YOUR_KEY" \
  --data-urlencode "limit=20" \
  --data-urlencode "refresh_posts=true" \
  --data-urlencode "platforms=linkedin" \
  --data-urlencode "platforms=instagram" \
  --data-urlencode "linkedin_organization_ids=10987654321"

Response structure

Top-level fields:
FieldDescription
successtrue on success
messageOptional human-readable summary
sourcee.g. fetched — connection flags match GET /unified/oauth/token
last_updatedNewest platform refresh timestamp (ISO)
Each connected platform appears as a slice key: linkedin, facebook, instagram, tiktok, youtube, threads, pinterest, bluesky.

Platform slice

FieldDescription
postsArray of unified post objects
sourceredis_cache, database, or api
last_updatedISO timestamp for this platform
messageOptional status from platform service
errorSet when fetch failed for this platform
platform_metaExtra platform-specific data (e.g. Facebook pages list)

Unified post object

Every platform returns the same shape:
FieldTypeDescription
post_idstringPlatform-native post or video id
commentarystringCaption, message, or description
published_atstringISO publish time
typestringimage, video, text, or carousel
imagesobject[]{ url, width?, height? }
videosobject{ videoUrl, thumbnailUrl } or null
permalinkstringPublic link to the post
like_countintegerLikes/reactions (0 if unavailable)
comment_countintegerComments/replies
share_countintegerShares
impression_countintegerImpressions/views
source_page_idstringFacebook page or LinkedIn org id when relevant
ai_watcher_enabledbooleanAI comment watcher enabled for this post

Example response

{
  "success": true,
  "source": "fetched",
  "last_updated": "2026-07-08T12:00:00Z",
  "linkedin": {
    "posts": [
      {
        "post_id": "urn:li:share:7123456789012345678",
        "commentary": "Launch day thread 🚀",
        "published_at": "2026-07-01T09:00:00Z",
        "type": "text",
        "images": [],
        "videos": null,
        "permalink": "https://www.linkedin.com/feed/update/...",
        "like_count": 42,
        "comment_count": 5,
        "share_count": 3,
        "impression_count": 1200,
        "source_page_id": null,
        "ai_watcher_enabled": false
      }
    ],
    "source": "database",
    "last_updated": "2026-07-08T11:55:00Z"
  },
  "instagram": {
    "posts": [],
    "source": "api",
    "message": "Refreshed from Instagram Graph API"
  }
}

GET /unified/posts/

Fetch a single post with force refresh. Requires query params:
ParameterRequiredDescription
platformYesPlatform name
organization_idLinkedIn org postsLinkedIn organization id
page_idFacebook page postsFacebook page id

API key scope: linkedin_posts

Keys with scope linkedin_posts are read-only and restricted to GET /unified/posts (LinkedIn data only). They cannot call posting, OAuth, or other write endpoints.
Use this scope for analytics dashboards or reporting integrations that only need post history. See Authentication for all scope values.

Refresh behavior

FlagEffect
refresh_posts=falsePrefer cached/DB lists (faster)
refresh_posts=trueCall platform APIs to update post lists where supported
refresh_stats=trueRefresh per-post metrics (may use DB-backed posts as input)
When platforms=["linkedin"] with no org ids and refresh_posts=true, live LinkedIn personal refresh is expensive (Apify) and limit is capped at 2. Prefer cached data unless you explicitly need a live sync.
TikTok video metrics are included on each video from the Business API; the stats flag does not strip TikTok like/comment/view fields.

MCP equivalent

MCP toolREST
get_user_postsGET /unified/posts
Same query semantics: limit, refresh_posts, refresh_stats, platforms, Facebook page ids, LinkedIn org ids. Connect at https://mcp.postsiva.com/mcp — see MCP tools.
  • Analytics — workspace totals from stored metrics (no live API fan-out)
  • Comments — comments on recent posts
  • Posting — create new posts
  • OAuth — connection status drives which platforms appear