https://app.trypost.it/api with a workspace API key.
1
List the social accounts
Find the channel to post to and read its limits.
2
Check the content types
Pick a format and fill the settings the network requires.
3
Create the post
One post per channel, or one call for several channels.
4
Schedule, queue or publish
At a set time, in the channel’s queue, or right now.
1. List the social accounts
List social accounts returns the channels connected to the workspace. Channels are connected and removed in the app; the API only reads them.2. Check the content types
List content types describes every network: its content types, text and hashtag limits, the settings it requires and the media each format takes.
When you omit
content_type, it is picked like the app does: on Pinterest a video makes pinterest_video_pin and several images pinterest_carousel, on TikTok images only make tiktok_photo, and every other network takes its default format.
Required settings
Each destination carries its network’s settings inmeta. A draft can be saved without them; scheduling or publishing needs them:
Every other setting is optional: link previews, AI labels, YouTube privacy and category, Mastodon content warnings, Threads topics, and more. The full list per network is under
platforms[].meta on Create post. Keys TryPost does not know are dropped; settings of another network are accepted but not used.
3. Create the post
Create post creates one post on one channel:platforms takes exactly one entry. Without status, the post is saved as a draft.
201), with status: "draft" and its destination under platforms[]. Media can come from a URL, an earlier upload or another post; see Media uploads.
Several channels at once
To send the same post to several channels, use Create posts in batch. It creates one independent post per destination, all sharing apost_group_id, the same as selecting several channels in the app. Each destination can override the shared content, media, content_type and meta. status is required here.
{ "posts": [...] }, one post per destination. A validation error stops the whole call; errors name the destination, for example destinations.1.meta.privacy_level.
4. Schedule, queue or publish
status decides what happens to a post. Send it on create, or later with Update post:
At a set time
Sendstatus: scheduled with scheduled_at, an instant in the future and before 2038-01-19. Give it in UTC (Z) or with an offset.
In the channel’s queue
When the channel has posting times (has_posting_schedule: true), send queue instead of scheduled_at:
nexttakes the channel’s first free slot.toptakes the first slot not held by a post with a set time, and moves the queued posts behind it to the next free slot.
queue_slot with an instant from List free queue slots. It works on Create post only, and fails with 422 when the slot has been taken in the meantime. queue cannot be combined with scheduled_at or queue_slot. When you send queue_slot, it sets the time; do not send scheduled_at with it.
A queued post keeps its slot. To change the order, use Reorder queue or Move post to queue slot; to change the times, Update posting schedule (it replaces the whole schedule: send the timezone (required) and the current posting_goal and posting_schedule to keep them, since omitted values are cleared). To repeat a scheduled post, see Set post recurrence.
Another change to the same channel queue can be running when you call. The API then answers
409; retry the request.Now
Sendstatus: publishing, on create or on an existing draft or scheduled post:
status: "publishing" while the network receives the post. It then becomes published or failed; platforms[].platform_url links to the live post and platforms[].error_message says what went wrong. Poll Get post, or subscribe a webhook to post.published and post.failed.
Posts created through the API publish directly: API keys belong to workspace admins, so no approval step applies (see Approvals).
Thread replies
X, Bluesky and Mastodon posts can carry up to 24 replies, published one under the other below the first post. Send them inmeta.thread_replies, each as { "text", "media" }:
- A reply needs text or media.
- Each reply’s text must fit the account limit: 280 on X (25000 with long posts), 300 on Bluesky, 500 on Mastodon. On Mastodon the content warning (
spoiler_text) is repeated on every reply and counts toward it. - A reply’s media belongs to that reply only: up to 4 items, given by
url,idorupload_token, following that network’s media rules. - On Update post,
thread_repliesreplaces the whole list.
Content limits
Network limits are checked when a post is scheduled or published; drafts can go over them. The 25000-character ceiling applies to every post, drafts included.- Text per account. The text must fit the destination account’s
max_content_length, measured on the text the network receives. An X account with long posts takes 25000 characters; other X accounts take 280. An emoji counts as one character. - Instagram hashtags. Instagram takes at most 5 hashtags per post.
- Stories are captionless.
instagram_storyandfacebook_storysend no text, so their text is neither published nor measured, and the hashtag cap does not apply. - Media. Each content type has its own media count, size, duration and aspect ratio rules, listed by List content types and on each network’s page, for example Instagram, X or TikTok.
Editing, deleting and errors
- Update post changes only the fields you send. The channel is fixed; to post elsewhere, create a new post. Send the destination’s settings as top-level
content_typeandmeta, or asplatforms[]with the destinationid.metais merged with the stored settings; sendnullfor a key to clear it. Boolean settings cannot be cleared: sendtrueorfalse. - Posts that are
publishing,published,partially_publishedorfailedcannot be edited or deleted: the API answers422. - Delete post removes the post from TryPost only. It never deletes anything already published on a network.
- Validation errors are keyed by field. Errors on a destination’s settings, text, or media fit may be reported under
destinations.0.…(for exampledestinations.0.meta.board_id) even when you sentplatforms.

