Limits checked against our code on . These are checks in PostEveryPlatform, with our active posting partner.
Threads
10 parts (replies). Media on later parts: 0 files per part. Later parts are replies. Their text is checked against the comment limit and account text limit.
A thread starts with the main post text. You add the later parts under it in the composer (agents send them as options.thread.parts). Check the final text for each destination: an override changes that account's text, while destinations without threads receive the parts joined together.
Images and video
The format controls the files you can attach. A video goes alone rather than alongside images or other videos. A PDF document also goes alone. Counts and sizes below are the composer's checks, rather than a promise about every file the network accepts. Aspect ratios mean width divided by height. Size and duration checks run when those measurements are known; unknown measurements are skipped.
| Format | Checks |
|---|---|
| Post | Files: 4 Images: 4 Video: yes |
Alt text
Image: not available
Video: delivery: up to 1000 UTF-16 code units (emoji and some symbols count as 2)
Alt text is set per uploaded media ID in options.alt. It is trimmed, repeated whitespace is collapsed and the saved text is capped before the destination checks. Support depends on the file kind and the posting partner, so attaching a description to a file does not mean that every destination receives it.
First comment
Validation: 300 Unicode characters; delivery: up to 300 UTF-16 code units (emoji and some symbols count as 2). Before validation, first_comment is trimmed and truncated to 2200 UTF-16 code units. The posting adapter also truncates at 300 UTF-16 code units.
A first comment and a delayed follow-up are separate settings. A follow-up uses options.follow_up and the account's own capabilities; do not use the first-comment ceiling to size a delayed reply.
Inbox and post analytics
Read and reply to imported comments. Hide: not available. Like: available where the comment permits it.
Post analytics reads: views, likes, comments, shares. Needs our posting partner's analytics access and a post reference; data may be unavailable.
Missing analytics should be treated as unavailable data. It does not establish that a post has no views or engagement. The inbox imports comments on your posts; it is not a general feed of everything said on the network.
Before you schedule
- Keep the initial post and every thread part within 300 characters.
- Attach up to 4 images to the initial post, or a video by itself.
- Use video alt text when needed; image alt text is not sent by this posting partner.
Title: Not available. Special option keys from the composer: None in NET_OPTS.
Preview the post after changing files, text or destination options. The composer checks the final account text and the selected format. Fix errors before scheduling; warnings explain changes or limitations that need a closer look.
Other text and cover checks
The shared text field is truncated to 63206 UTF-16 code units before platform validation. An emoji can use more than one unit.
Known gaps
- Image alt text is not available through the posting partner.
- Later thread parts cannot carry media through the posting partner.
Ask an agent to prepare a post
Start with an account connected by the owner and an agent sign-in with read and draft permissions. This prompt asks for a draft you can inspect:
Use get_workspace and list_accounts. For my Bluesky account, call get_account_options. Help me draft a behind-the-scenes post. Ask me for any required media or account choices. Run preview_post, explain every problem, then use create_post with when: "draft". Return the review_url. Do not schedule it.The REST example saves a draft. Replace media IDs with files you uploaded and account choices with values from your account's capabilities and lists. For Reddit, replace the subreddit placeholder. To check the same body without saving, send it to /api/v1/posts/preview.
curl -s -X POST https://posteveryplatform.com/api/v1/posts \
-H "Authorization: Bearer $PEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "A look behind the scenes.",
"platforms": [
"bluesky"
],
"when": "draft"
}'Scheduling uses when: schedule with scheduled_at, or when: queue for the next posting slot. The schedule permission is required. Scheduled agent posts wait for approval by default; the response tells you whether it is waiting and gives a review_url. With no plan or trial the workspace is read-only and writing answers plan_required. Find setup steps for your agent.
Questions about Bluesky
How is caption length counted?
PostEveryPlatform counts Unicode characters, rather than bytes. The default limit here is 300 characters; preview uses the connected account's limit.
What happens if a file has no measured dimensions?
Checks that need missing measurements are skipped. The preview still checks the measurements it has and the file kinds and counts.
Does an agent need my approval?
Scheduled and post-now agent posts wait for the owner by default. The response says whether approval is required and includes a review_url. A draft saves without scheduling.
Can I check a post without saving it?
Yes. Use preview_post over MCP or the REST preview endpoint. Read problems and warnings before asking to create or schedule it.
Is writing available without a plan?
A workspace with no plan or trial is read-only. Writing answers plan_required; reading, exporting and deleting remain available.