---
title: "POST /posts"
method: POST
path: "/posts"
---

# POST /posts

`POST /posts`

## Request

- Base URL: `https://api.publinio.com/v1`
- URL: `https://api.publinio.com/v1/posts`
- Auth: HTTP bearer

Save a reviewable draft for a connected account, or supply platform to draft before connecting. Use existing media IDs. Does not publish or schedule. Reuse idempotencyKey on retry. Required scope: posts:write.

## Headers

- `Idempotency-Key` string, required

## Request body

- object
  - `brandId` string, required
  - `platform` 'facebook' | 'instagram' | 'tiktok' | 'youtube' | 'linkedin' | 'linkedin_company' | 'x' | 'threads' | 'pinterest' | 'wordpress' | 'bluesky' | 'reddit' | 'telegram' | 'mastodon'
  - `connectionId` string, uuid
  - `mediaAssetIds` string[]
  - `content` string, required
  - `mediaAssetId` string, uuid, nullable
  - `settings` object
    - `publishing_format` 'post' | 'reel' | 'story', nullable
    - `instagram_share_to_feed` boolean, nullable
    - `tiktok_privacy_level` 'PUBLIC_TO_EVERYONE' | 'MUTUAL_FOLLOW_FRIENDS' | 'FOLLOWER_OF_CREATOR' | 'SELF_ONLY', nullable
    - `tiktok_disable_comment` boolean
    - `tiktok_disable_duet` boolean
    - `tiktok_disable_stitch` boolean
    - `tiktok_brand_content` boolean
    - `tiktok_brand_organic` boolean
    - `youtube_title` string, nullable
    - `youtube_description` string
    - `youtube_tags` string[]
    - `youtube_category_id` string
    - `youtube_privacy_status` 'public' | 'private' | 'unlisted', nullable
    - `youtube_made_for_kids` boolean, nullable
    - `youtube_contains_synthetic_media` boolean
    - `youtube_notify_subscribers` boolean
    - `pinterest_board_id` string, nullable
    - `pinterest_board_name` string, nullable
    - `pinterest_title` string, nullable
    - `pinterest_link` string, nullable
    - `pinterest_alt_text` string, nullable
    - `pinterest_campaign` string, nullable
    - `bluesky_alt_text` string, nullable
    - `mastodon_settings` object, nullable
      - `visibility` 'public' | 'unlisted' | 'private' | 'direct', required
      - `spoilerText` string, required
      - `sensitive` boolean, required
      - `language` string, required
      - `mediaDescriptions` string[], required
    - `reddit_subreddit` string, nullable
    - `reddit_title` string, nullable
    - `reddit_kind` 'self' | 'link', nullable
    - `reddit_url` string, nullable
    - `reddit_flair_id` string, nullable
    - `wordpress_title` string, nullable
    - `wordpress_excerpt` string, nullable
    - `wordpress_slug` string, nullable
    - `wordpress_category_ids` integer[]
    - `wordpress_tag_ids` integer[]

## Response `201`

Result; lists contain data and nextCursor. Posts report their actual status and approval_state.

- object
  - `id` string, uuid, required
  - `status` string, required
  - `revision` integer, required
  - `approval_state` string
  - `scheduled_at` string, date-time, nullable

## Other responses

- `400`: Structured error with error.code, error.message and requestId.
- `401`: Structured error with error.code, error.message and requestId.
- `403`: Structured error with error.code, error.message and requestId.
- `404`: Structured error with error.code, error.message and requestId.
- `409`: Structured error with error.code, error.message and requestId.
- `422`: Structured error with error.code, error.message and requestId.
- `429`: Structured error with error.code, error.message and requestId.
- `500`: Structured error with error.code, error.message and requestId.

---

[API](https://skmtc.dev/publinio/apis/publinio-developer-api.md) · [All operations](https://skmtc.dev/publinio/apis/publinio-developer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/publinio/apis/publinio-developer-api/revisions/2a193fb6939b?raw)
