Guides

Post workflow

The recommended flow for drafting and scheduling a LinkedIn or X post through the Public API: pick an account, ground the draft, create, refine, schedule.

The API mirrors how Postiv itself creates content: pick the account that will publish (a LinkedIn profile, company page or X account), ground the draft in the workspace voice and knowledge, then move the draft through the publish queue.

  1. 1
    Call GET /api/public/workspace and choose an account id from workspace.accounts, which lists LinkedIn profiles, company pages and X accounts when the key has profiles:read. GET /api/public/linkedin-profiles lists LinkedIn only.
  2. 2
    Read that account's writing style and search the knowledge base before drafting original content. Optionally search templates or select a Bob plan item.
  3. 3
    Call POST /api/public/posts to create a draft. Pass templateId or planItemId when applicable so attribution stays linked.
  4. 4
    Optionally patch the draft content or profile assignment.
  5. 5
    Call POST /api/public/posts/:id/schedule with an ISO scheduled time.

Verbatim by default, humanize on demand

Content is stored verbatim by default. Pass "humanize": true on create to run Postiv's humanizer over the content before saving: the same anti-AI-pattern pass the in-app assistant uses. Updates are always verbatim.

Scheduling rules

  • Scheduling never publishes immediately: scheduledTime must be at least 2 minutes in the future.
  • If the target account has approvers configured, the post waits for their approval; check requiresApproval in the response.
  • If a LinkedIn post has an image, video, PDF or carousel saved in Postiv and you omit all media inputs, the saved media is included automatically. A saved carousel must be rendered first, as with carouselId. X posts carry their images inside the post, so the media fields do not apply to them.

Posting to X

Pass the integrationId of an X account and write the post as tweets instead of content. Send exactly one of content (plain text, split into tweets automatically), tweets (a string, or an array for a thread) or article ({ headline, body }). humanize and templateId are LinkedIn only. X drafts are saved as written: a tweet over 280 characters (a link counts 23) can sit in a draft but cannot be scheduled. Add images with POST /api/public/posts/:id/media and place them with tweetIndex or articlePlacement. Scheduling an X post uses the same schedule call as LinkedIn; the LinkedIn media fields return x_media_not_supported.

Create an X thread
curl -X POST https://postiv.ai/api/public/posts \
  -H "Authorization: Bearer pk_postiv_..." \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Launch thread",
    "tweets": ["We just launched.", "Here is what we learned."],
    "integrationId": 456
  }'

End-to-end example

Create a draft
curl -X POST https://postiv.ai/api/public/posts \
  -H "Authorization: Bearer pk_postiv_..." \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Launch lessons",
    "content": "Three things we learned from launch week...",
    "integrationId": 123,
    "humanize": true
  }'
Schedule the draft
curl -X POST https://postiv.ai/api/public/posts/POST_ID/schedule \
  -H "Authorization: Bearer pk_postiv_..." \
  -H "Content-Type: application/json" \
  -d '{
    "integrationId": 123,
    "scheduledTime": "2026-08-01T09:30:00.000Z",
    "mediaType": "text"
  }'