Posts

List posts

Lists workspace posts, filterable by status/profile/text search. 'scheduled' only returns posts that actually have a live publish_queue entry (guards against stale status left by legacy bugs).

GET/api/public/posts
cURLGET /api/public/posts
curl "https://postiv.ai/api/public/posts?status=...&search=launch&limit=10" \
  -H "Authorization: Bearer pk_postiv_..."
200Response
{
  "success": true,
  "posts": [
    {
      "id": "post1...",
      "title": null,
      "type": "document",
      "status": "draft",
      "contentPreview": "Most founders think content strategy...",
      "integrationId": 1234,
      "profile": {
        "id": 1234,
        "name": "Jan",
        "headline": "Founder",
        "picture": null
      },
      "scheduledTime": null,
      "queueStatus": null,
      "tags": [],
      "openInPostivUrl": "https://postiv.ai/app/create?postId=post1..."
    }
  ],
  "pagination": {
    "limit": 50,
    "offset": 0,
    "count": 1
  }
}

Authorization

Requires an organization API key with the posts:read scope, sent as Authorization: Bearer or x-api-key.

Query parameters

statusstring|string[]

draft, scheduled, published, failed, cancelled, pending_approval, approval_denied, changes_requested. Comma-separated or repeated param. Alias: statuses (both are merged).

integrationIdint

Alias: integration_id.

searchstring

Case-insensitive title/content search, max 200 chars.

limitintdefault: 50

1-100.

offsetintdefault: 0

0-5000.

Response

Paginated post list with content previews (not full content).

posts[].iduuid
posts[].titlestring|null
posts[].typestring
posts[].statusstring
posts[].contentPreviewstring

First 300 chars of content (public API's own trim; the MCP tool trims separately).

posts[].integrationIdint|null
posts[].templateIduuid|null
posts[].planItemIduuid|null
posts[].profileobject|null

{ id, name, headline, picture }: picture uses a cheap non-LinkedIn-CDN-only URL; full resolution happens on GET one post.

posts[].scheduledTimetimestamp|null
posts[].queueStatusstring|null
posts[].latestVersionint|null
posts[].hasImageboolean|null
posts[].tagsarray
posts[].authorobject|null

{ name } only: no email.

posts[].openInPostivUrlstring

Deeplink into the Postiv editor.

posts[].createdAt / updatedAttimestamp
paginationobject

{ limit, offset, count }

Errors

400invalid_integration_id

Good to know

  • REST route response doesn't include contentLength (the MCP tool's version adds that field; REST's list route computes contentPreview server-side identically but the field set differs slightly per code path: see notes above).