Validate a post
validate_postChecks a post against every target network without creating anything: returns errors (blocking), warnings and the exact text each network would receive with its length. Call it before schedule_post when unsure whether a text, link or media fits every network; schedule_post runs the same checks and refuses an invalid post, but validate_post lets you fix it first with no side effect.
Network rules (the server enforces them; use overrides for a shorter text on one network):
x: 280 chars (links count 23); Every link counts as 23 characters. Up to 4 images or 1 video.
bluesky: 300 chars; Up to 4 images or 1 video (50 MB max). Without media, the first link becomes a preview card.
facebook: 63206 chars; Published on the linked Facebook Page. Without media, the first link becomes a preview card.
instagram: 2200 chars; Media required: one image, a carousel (up to 10 images) or one video (Reel). Links in the caption are not clickable.
tiktok: 2200 chars; Media required: one video or a set of images. Links are not clickable; hashtags are recognised. Cannot be scheduled from the API: use status review, the user picks the TikTok settings in Broadcast.
linkedin: 3000 chars; Published on the linked personal profile. Up to 20 images or 1 video. Without media, the first link becomes an article card.
mastodon: 500 chars; Up to 4 images or 1 video.
threads: 500 chars; Emojis count as their UTF-8 bytes. Up to 20 images (JPEG or PNG) or 1 video (MP4 or MOV, 5 min max), at most 5 links. Without media, the first link becomes a preview card. Only the first hashtag becomes a topic.
firstComment(optional) is posted as a reply under the post on x, bluesky, linkedin, threads, facebook and instagram, e.g. to keep a link out of a LinkedIn post; on X it costs credits like one more post. Dates are ISO 8601 with an offset; Europe/Paris is the user's time zone.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Main text of the post. Per-network overrides go in `overrides`. | |
| link | No | Link appended after the text (becomes a preview card on Bluesky, Facebook and LinkedIn without media). | |
| media | No | Images (up to 10 for most networks) or one video. Not both. | |
| repeat | No | Publishes the post again every day, week or month at the same time (Europe/Paris), counted from scheduledAt: once an occurrence goes out, the next one is created with the same content. null stops the series. TikTok settings chosen in the app apply to every occurrence. | |
| status | No | draft: saved without a date. review (default when scheduledAt is set): waits for an approval in the app. scheduled: published automatically at scheduledAt, without approval (needs the publish scope); with scheduledAt "now" it goes out within a minute. | |
| accounts | No | Target account ids (see GET /accounts / list_accounts). | |
| hashtags | No | Hashtags appended on their own line, with or without the leading #. | |
| overrides | No | Text replacing `body` for one network, keyed by account id or platform name (e.g. a shorter text for x). | |
| platforms | No | Alternative to `accounts`: every connected account of these networks. | |
| scheduledAt | No | ISO 8601 date-time with offset (e.g. 2026-10-14T09:00:00+02:00), or "now". Required for status review and scheduled. | |
| firstComment | No | Optional reply Broadcast posts under the post right after it goes out, from the same account (e.g. the link, kept out of the post on LinkedIn, or the rest of a thread). Only on x, bluesky, linkedin, threads, facebook and instagram; ignored elsewhere. Limits: 280 on x (links count 23), 300 on bluesky, 1250 elsewhere. On X it costs credits like one more post. If it fails, the post stays published and the target's comment.error says why. | |
| idempotencyKey | No | Client-chosen key: a retried call with the same key returns the post already created instead of a duplicate. |