---
title: "Create (schedule or immediately publish) a post"
method: POST
path: "/api/posts"
---

# Create (schedule or immediately publish) a post

`POST /api/posts`

## Request

- Base URL: `https://api.seenpaid.com`
- URL: `https://api.seenpaid.com/api/posts`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://api.seenpaid.com/authorize`, token URL `https://api.seenpaid.com/token`, scopes: `posts:write`)

Create a post targeting one or more connected social accounts. Omit `scheduledFor` to publish immediately; otherwise it is queued for the given time.

## Request body

- CreatePostRequest
  - `caption` string
  - `mediaIds` string[]
  - `socialAccountIds` string[], required: Must not contain duplicates.
  - `scheduledFor` string, date-time: Omit to publish immediately. Must be in the future.
  - `captions` object: Optional per-account caption overrides, keyed by socialAccountId. Accounts not listed use the shared `caption`.

## Response `201`

Created

- object
  - `success` true
  - `data` Post
    - `id` string, uuid
    - `orgId` string, uuid
    - `caption` string
    - `status` 'draft' | 'scheduled' | 'publishing' | 'published' | 'failed' | 'canceled'
    - `scheduledFor` string, date-time, nullable
    - `mediaIds` string[]
    - `createdAt` string, date-time
    - `targets` object[]: One per social account this post targets, with the per-platform publish result once attempted.
      - `socialAccountId` string, uuid
      - `platform` 'x' | 'bluesky' | 'linkedin' | 'instagram' | 'facebook' | 'tiktok' | 'discord' | 'telegram' | 'mastodon' | 'nostr' | 'devto' | 'hashnode' | 'medium' | 'reddit' | 'threads' | 'tumblr' | 'pinterest' | 'vk' | 'slack' | 'wordpress' | 'ghost' | 'lemmy' | 'webhook' | 'microblog' | 'matrix'
      - `status` 'pending' | 'published' | 'failed'
      - `url` string, uri, nullable
      - `error` string, nullable

## Other responses

- `400`: Request body failed Zod validation.
- `401`: Missing or invalid credential (API key or OAuth token).
- `403`: Authenticated, but the caller's role/scope lacks the required permission.

---

[API](https://skmtc.dev/seenpaid/apis/seenpaid-api.md) · [All operations](https://skmtc.dev/seenpaid/apis/seenpaid-api/llms.txt) · [OpenAPI document](https://skmtc.dev/seenpaid/apis/seenpaid-api/revisions/7b3f72ed82e9?raw)
