Skip to main content
POST
Schedule post

Authorizations

Authorization
string
header
required

API key from Developer dashboard (Bearer token).

Headers

X-Profile-Id
integer

Act inside a profile (sub-account) you own: data reads and writes target the profile workspace while billing, rate limits and usage stay on your own account. Requires the profiles:manage scope. Returns 404 for profiles you do not own and 409 for paused profiles.

X-Idempotency-Key
string

Client idempotency key (X-Request-Id accepted as an alias). Send a fresh key per logical post and REUSE it when retrying that exact call after a timeout / 5xx / connection reset: the retry returns the original post with HTTP 200 and idempotent_replay: true instead of creating a duplicate. A key permanently identifies its post in the workspace (deleting the post frees the key). See the Idempotency guide.

Maximum string length: 64
Pattern: ^[A-Za-z0-9._:-]{1,64}$

Body

application/json

Schedule request. Provide scheduled_time (with optional timezone) OR queue_id (next open slot), not both.

content
string
required

Post text content

platforms
enum<string>[]
required

Target platforms. Use twitter for X and gmb for Google Business. telegram posts via the workspace's connected bot (created with @BotFather); discord posts via the connected server webhook. Both are connected in the dashboard's Social Accounts page.

Available options:
facebook,
instagram,
twitter,
linkedin,
youtube,
tiktok,
gmb,
threads,
bluesky,
tumblr,
telegram,
discord
account_ids
integer[]
required

IDs of connected social accounts

scheduled_time
string<date-time>

When to publish (ISO 8601)

media_urls
string[]

Media URLs to attach to the post

URL to include with the post

queue_id
integer

Schedule into a posting queue instead of a fixed time: the queue's next open slot is resolved server-side and the post occupies it. Mutually exclusive with scheduled_time.

timezone
string

IANA timezone scheduled_time is expressed in (default UTC). Ignored with queue_id (the queue's own timezone applies).

recycle
object

Evergreen recycling: after this post publishes, the next occurrence is automatically scheduled interval_hours later, repeating until a bound is hit. A bound is REQUIRED - set max_repeats and/or until (no unbounded chains). Stop a chain anytime with DELETE /social/posts/{post_id}/recycle.

allow_duplicates
boolean

Skip the 24h duplicate-content guard. Without it, content identical to a post created in this workspace in the last 24 hours is rejected with 409 DUPLICATE_CONTENT (and the charge is refunded).

platform_options
object

Per-platform composer options - the same payload the web composer stores; publish handlers read it as-is (unknown keys are ignored, max 20KB). Keyed by platform, e.g. {"tiktok": {"privacy_level": "SELF_ONLY"}, "instagram": {"content": "IG-specific caption"}, "_thumbnail": {"timestamp_ms": 3000}}. Common keys: per-platform content override; tiktok privacy/duet/stitch options; _thumbnail custom video cover. Per-platform STAGGER: give any platform its own scheduled_time here (interpreted in the request timezone) and it publishes at that moment - platforms without one use the request-level scheduled_time. One call, one post per distinct time (response carries staggered[] with the created legs). Not combinable with queue_id or recycle.

Example:

Response

Post scheduled

success
enum<boolean>
Available options:
true
data
object
usage
object
meta
object