Skip to main content
POST
Publish a document post

Authorizations

Authorization
string
header
required

Your API key, sent as Authorization: Bearer <key>. One key manages every profile on the account.

Headers

Idempotency-Key
string

A key you generate per post, written down BEFORE the call. Replaying a completed key returns the earlier result instead of publishing again — from outside that looks exactly like being ignored. Reusing one for a DIFFERENT body answers idempotency_conflict.

Body

application/json
profile_id
string
required

Id of the brand profile to act on. List them with GET /v1/profiles.

platforms
enum<string>[]
required

Channels to publish to. A comma-separated string is accepted as well.

Available options:
tiktok,
instagram,
linkedin,
youtube,
facebook,
x,
threads,
pinterest,
reddit,
bluesky,
google_business,
telegram,
discord,
slack,
mastodon,
nostr,
lemmy,
devto,
hashnode,
wordpress,
whop,
listmonk
document_url
string<uri>
required

https:// URL of the document to publish.

caption
string
required

The post BODY. This is NOT the post title: title (and the per-channel <channel>_title) is a separate field, and putting the body in it skips the caption-length check.

scheduled_at
string<date-time>

Publish at this time instead of now (ISO 8601). Pair with timezone.

timezone
string

IANA timezone for scheduled_at, e.g. Asia/Ho_Chi_Minh.

Response

Success.

status
enum<string>

processing and scheduled are not outcomes yet — poll GET /v1/posts/status.

Available options:
completed,
partial,
failed,
processing,
scheduled
profile_id
string
platforms
string[]
failed_platforms
string[]

Present only when at least one channel refused.

request_id
string | null
job_id
string | null
results
object | null

Keyed by channel.