PostTide guide for Claude
The same guide Claude reads through its PostTide connection.
Connect Claude
Connecting needs a PostTide plan with API keys. Claude writes drafts only; a person in PostTide approves each one before it is scheduled.
- 1In PostTide, open Settings → API keys and make a key under Connect Claude.
- 2In your terminal, run:
claude mcp add --transport http posttide https://api.posttide.com/api/v1/mcp --header "Authorization: Bearer <your PostTide key>" - 3Start Claude Code and type
/mcp— PostTide shows as connected. Ask: "What did I post on Instagram this week?"
PostTide plans and publishes social posts for a company's channels. Through this connection you write drafts only: a person in PostTide approves each one, and only then is it scheduled and published at the time you proposed. This guide is how to make a post right the first time, for every network.
Steps
channels_list— find the channels you may post to, theiraccountId, and that each hascanDrafttrue.channels_capabilities— read each chosen channel's rules, and this guide's section for its network, before writing.media_upload_link— for each picture or video (made to fit first, below), ask for a one-time link, then send the file:curl --upload-file video.mp4 "<uploadUrl>". One draft carries one video or pictures, not both.drafts_create— the text, the channels, the time it should go out (proposedAt, ISO-8601 with an offset) and, per network invariants, its own text and video details such as a cover.drafts_attach_media— attach the uploads, in order.posts_get— read the draft back; check its text, channels, time, media and cover match the request, and fix anything withdrafts_update.- Tell the person the draft waits for their approval in PostTide, and which time zone you used.
Pictures and videos
- One draft carries one video or pictures, not both: a video network publishes the first video only. Make two drafts if the person wants both.
- Make each file fit every chosen network before uploading — its types, encoding, shapes and size in the network's section below. A file that fits Instagram, TikTok and YouTube Shorts at once: vertical 9:16, 1080×1920, H.264 + AAC MP4.
- Check every file's width and height, one file per command (it answers
1080,1350; the same command reads a video) —file,identifyand scripts are often not installed or are refused by an agent's permission check:ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0 picture.jpg - Re-encode a video that does not fit:
ffmpeg -i input.mov -c:v libx264 -profile:v high -pix_fmt yuv420p -r 30 -c:a aac -b:a 128k -ar 48000 -movflags +faststart video.mp4 - Make a picture a JPEG of the right shape (here 4:5, 1080×1350):
ffmpeg -v error -i input.png -vf "scale=1080:1350:force_original_aspect_ratio=increase,crop=1080:1350" -q:v 2 picture.jpg media_upload_linkneeds the file's exact size in bytes (wc -c < video.mp4) and type; the PUT must send exactly those bytes, once, before the link expires.
Covers and picking a frame
A video's cover is what people see before they press play — pick it, never leave the first frame by chance. Set it per network in drafts_create (or drafts_update) variants: Instagram coverMs (a frame) or coverUploadId (a picture), TikTok coverMs, YouTube coverUploadId. Each network's section says which cover PostTide sends there and which it does not.
- Find the video's length in seconds:
ffprobe -v error -show_entries format=duration -of csv=p=0 video.mp4 - Pull candidate frames across the video (here every 2 seconds of the first 10), one command at a time, into the working folder (where the video is) — a loop,
mkdir,/tmpor chained commands are what an agent's permission check refuses:ffmpeg -v error -y -ss 0.5 -i video.mp4 -frames:v 1 -q:v 2 frame-0.5.jpg ffmpeg -v error -y -ss 2 -i video.mp4 -frames:v 1 -q:v 2 frame-2.jpg ffmpeg -v error -y -ss 4 -i video.mp4 -frames:v 1 -q:v 2 frame-4.jpg ffmpeg -v error -y -ss 6 -i video.mp4 -frames:v 1 -q:v 2 frame-6.jpg ffmpeg -v error -y -ss 8 -i video.mp4 -frames:v 1 -q:v 2 frame-8.jpg - Look at each frame (open the JPEG) and choose one that is sharp (no motion blur), shows the subject clearly — a face looking at the camera, eyes open, or the product — matches the caption's first line, and is not a black or fading frame. Keep anything that matters in the middle: Instagram's profile grid shows a Reel's cover cropped to its middle square.
- A frame cover:
coverMsis that time in milliseconds (4 seconds →4000), inside the video. - A picture cover: export that frame as a JPEG the video's shape (
ffmpeg -v error -ss 4 -i video.mp4 -frames:v 1 -q:v 2 cover.jpg), upload it withmedia_upload_link(image/jpeg), and pass itsuploadIdascoverUploadId. Do not also attach it withdrafts_attach_media.
Captions and hashtags
- Before writing, read the account's brand kit — the resource
posttide://account/{accountId}/brand-kit— and write in its voice. Write in the request's language unless asked otherwise. - The first line is the hook: most networks show only the start of the text before "more" (each network's "Shown before "more"").
- Stay within each network's limit, counted the network's way (its "Caption counting"). Give a shorter network its own text in
variantsrather than cutting a sentence.drafts_createanddrafts_updaterefuse a text over a network’s limit, naming the network, its count and its limit. - Hashtags: 3–5 relevant ones, at the end or in the text, never over the network's cap (its "Hashtags"). None is better than generic ones.
- Links: where the network's links are not clickable, write "link in bio" instead of a bare URL.
- Mention only the handles the person gave you. Never leave placeholders (
[link], "TBD"): a person approves exactly what you wrote.
Times
- The person named a time: use it in the company's time zone (the connection's instructions say which; none set = UTC), as
proposedAtwith that date's UTC offset (e.g.2026-11-02T09:00:00+01:00). Say in your reply which zone you used. - No time named:
analytics_readwithreport: "best_times", thechannelIdandtopN: 3answers that channel's best slots from its own posts — propose the next one in the future. With no data yet, use the network's "Good times to post" (a published study; audience local time). calendar_windowshows what is already planned — avoid two posts on one channel within the same hour.proposedAtmust be in the future and inside the plan's horizon; it is only a proposal until a person approves.
Platform instagram · this section alone: posttide://guide/instagram.
What a post may carry in PostTide
- Text: optional, at most 2200 characters (count it the network's way, below).
- A post needs: a picture or a video.
- Pictures: up to 10 per post (a carousel).
- Video: one per post, no PostTide size cap, no PostTide length cap.
The network's rules
- Caption counting: characters; also at most 20 @ tags. PostTide counts UTF-16 code units (text.length). (source, checked 2026-10-28)
- Shown before "more": Meta publishes no feed cut-off; its ads guide keeps primary text to 125 characters because longer text is truncated. The 125 figure is Meta's ad-text recommendation, not an organic rule. Put the hook in the first line. (source, checked 2026-10-28)
- Hashtags: 30 at most. API limit. Third-party guides report the app now allows 5 (Dec 2025); Instagram's help page renders client-side and could not be read signed out — the guide should advise 3–5. (source, checked 2026-10-28)
- Links in the text clickable: no — links in captions are plain text. The reference has no link field for feed posts or Reels; say "link in bio". (source, checked 2026-10-28)
- Picture types: image/jpeg. JPEG only, sRGB. (source, checked 2026-10-28)
- Picture size: 8000000 bytes at most. 8 MB. (source, checked 2026-10-28)
- Picture shapes: 4:5 to 1.91:1. (source, checked 2026-10-28)
- Best picture size: 1080×1350 (4:5); width 320–1440, others are scaled. Width range from the reference; 1080×1350 is the tallest ratio it allows at the common 1080 width. (source, checked 2026-10-28)
- Video types: video/mp4, video/quicktime. MOV or MP4, no edit lists, moov atom at the front. (source, checked 2026-10-28)
- Video encoding: H.264 or HEVC, progressive, closed GOP, 4:2:0; AAC ≤48 kHz mono/stereo 128 kbps; 23–60 fps; ≤25 Mbps; width ≤1920. (source, checked 2026-10-28)
- Video shapes: 0.01:1 to 10:1, 9:16 recommended. (source, checked 2026-10-28)
- Shortest video: 3 seconds. (source, checked 2026-10-28)
- Cover PostTide sends: Reels: frame time thumb_offset (ms, default 0 = first frame) always; cover picture cover_url when set (JPEG ≤8 MB, 9:16, public URL; wins over thumb_offset; feed shows the middle 1:1 square). cover_url set at instagram-reels-pack.ts:42. Best cover: 1080×1920 JPEG with the subject in the middle square. (source, checked 2026-10-28)
- Cover the network takes that PostTide does not send: none — PostTide sends every cover option the API takes for Reels. (source, checked 2026-10-28)
- Who can see it: public account content; share_to_feed true = Feed and Reels tabs, false = Reels tab only; trial reels (trial_params) show to non-followers first. PostTide sends share_to_feed only when false; no trial reels. (source, checked 2026-10-28)
- Good times to post: Tuesdays 1–7 p.m. and Wednesdays 12–9 p.m., audience local time. Sprout Social 2026 study, ~2 billion engagements, 307k profiles, Nov 2025–Feb 2026. (source, checked 2026-10-28)
Platform facebook · this section alone: posttide://guide/facebook.
What a post may carry in PostTide
- Text: optional, at most 63206 characters (count it the network's way, below).
- A post needs: nothing more — text alone is fine.
- Pictures: no PostTide cap on how many.
- Video: one per post, no PostTide size cap, no PostTide length cap.
The network's rules
- Caption counting: characters. (source, checked 2026-10-28)
- Shown before "more": Meta publishes no feed cut-off; its ads guide keeps primary text to 125 characters because longer text is truncated. Ad-text recommendation, not an organic rule. (source, checked 2026-10-28)
- Hashtags: no cap published. (source, checked 2026-10-28)
- Links in the text clickable: yes — links in the message are clickable and the feed endpoint takes a link preview. (source, checked 2026-10-28)
- Picture types: image/jpeg, image/png, image/gif, image/bmp, image/tiff. (source, checked 2026-10-28)
- Picture size: 4000000 bytes at most. 4 MB; keep PNGs under 1 MB or they may look pixelated. (source, checked 2026-10-28)
- Picture shapes: any — Facebook resizes for each surface. (source, checked 2026-10-28)
- Best picture size: no size required; Facebook resizes to several renditions. (source, checked 2026-10-28)
- Video types: video/mp4. (source, checked 2026-10-28)
- Video encoding: Reels: H.264 or H.265 (VP9, AV1 also); 24–60 fps fixed, progressive, closed GOP 2–5 s, 4:2:0; AAC-LC stereo 48 kHz ≥128 kbps. (source, checked 2026-10-28)
- Video shapes: Reels 9:16 (1080×1920 recommended, min 540×960); Page videos any. PostTide posts every video as a Page video (/videos), never a Reel. (source, checked 2026-10-28)
- Shortest video: Reels 3 s; Page videos not published. (source, checked 2026-10-28)
- Cover PostTide sends: none — PostTide sends no thumbnail; Facebook picks a frame. (source, checked 2026-10-28)
- Cover the network takes that PostTide does not send: Page videos take a
thumbimage (raw upload); Reels take a custom cover photo. Reels cover: https://developers.facebook.com/docs/video-api/guides/reels-publishing (source, checked 2026-10-28) - Who can see it: public Page post; no per-post audience chosen by PostTide. (source, checked 2026-10-28)
- Good times to post: Tuesdays and Wednesdays 12–8 p.m., audience local time. Sprout Social 2026 study. (source, checked 2026-10-28)
X
Platform twitter · this section alone: posttide://guide/twitter.
What a post may carry in PostTide
- Text: optional, at most 280 characters (count it the network's way, below).
- A post needs: text, a picture or a video.
- Pictures: up to 4 per post.
- Video: one per post, at most 512 MB, no PostTide length cap.
The network's rules
- Caption counting: weighted: Latin 1, CJK 2 (so 140), every emoji 2, every URL 23 (t.co); attached media 0. xWeightedLength implements this; use postLength('twitter', text). (source, checked 2026-10-28)
- Shown before "more": the whole 280-weight post shows; no fold. (source, checked 2026-10-28)
- Hashtags: no cap published (hashtags count toward the 280). (source, checked 2026-10-28)
- Links in the text clickable: yes — every URL becomes a t.co link worth 23. (source, checked 2026-10-28)
- Picture types: image/jpeg, image/png, image/gif, image/webp. (source, checked 2026-10-28)
- Picture size: 5000000 bytes at most. 5 MB; animated GIF 15 MB (≤1280×1080, ≤350 frames). (source, checked 2026-10-28)
- Picture shapes: not published for images. (source, checked 2026-10-28)
- Best picture size: not published for images; video best sizes 1280×720, 720×1280, 720×720. (source, checked 2026-10-28)
- Video types: video/mp4. The page names codecs, not containers; MP4 is the container for H.264/AAC. (source, checked 2026-10-28)
- Video encoding: H.264 High Profile, YUV 4:2:0, progressive, closed GOP; AAC-LC mono/stereo (no HE-AAC); ≤60 fps; ≥5000 kbps video, ≥128 kbps audio recommended. (source, checked 2026-10-28)
- Video shapes: 1:3 to 3:1 (16:9 and 1:1 recommended); 32×32 to 1280×1024. (source, checked 2026-10-28)
- Shortest video: 0.5 seconds. (source, checked 2026-10-28)
- Cover PostTide sends: none — X picks the frame. (source, checked 2026-10-28)
- Cover the network takes that PostTide does not send: none published — the media best-practices page lists no cover option. (source, checked 2026-10-28)
- Who can see it: public post; no per-post audience chosen by PostTide. (source, checked 2026-10-28)
- Good times to post: Tuesdays, Wednesdays and Thursdays 12–6 p.m., audience local time. Sprout Social 2026 study. (source, checked 2026-10-28)
Platform linkedin · this section alone: posttide://guide/linkedin.
What a post may carry in PostTide
- Text: optional, at most 3000 characters (count it the network's way, below).
- A post needs: text, a picture or a video.
- Pictures: up to 1 per post.
- Video: one per post, at most 500 MB, at most 1800 seconds.
The network's rules
- Caption counting: characters; the API commentary is "little" text format (mentions and hashtags as annotated tokens). (source, checked 2026-10-28)
- Shown before "more": LinkedIn publishes no "see more" cut-off. Put the hook in the first two lines. (source, checked 2026-10-28)
- Hashtags: no cap published. (source, checked 2026-10-28)
- Links in the text clickable: yes — URLs in commentary are clickable. (source, checked 2026-10-28)
- Picture types: image/jpeg, image/png, image/gif. GIF up to 250 frames. (source, checked 2026-10-28)
- Picture size: no byte cap published; under 36,152,320 pixels. (source, checked 2026-10-28)
- Picture shapes: not published for organic posts. (source, checked 2026-10-28)
- Best picture size: not published; any size under 36,152,320 pixels. (source, checked 2026-10-28)
- Video types: video/mp4. (source, checked 2026-10-28)
- Video encoding: not published on the Videos API page (MP4). (source, checked 2026-10-28)
- Video shapes: not published for organic posts (the API reports the ratio after processing). (source, checked 2026-10-28)
- Shortest video: 3 seconds. (source, checked 2026-10-28)
- Cover PostTide sends: none — PostTide sets uploadThumbnail false; LinkedIn makes one. (source, checked 2026-10-28)
- Cover the network takes that PostTide does not send: Videos API takes a thumbnail picture (uploadThumbnail → thumbnailUploadUrl) and one English captions file (SRT). (source, checked 2026-10-28)
- Who can see it: visibility PUBLIC (also CONNECTIONS / LOGGED_IN on the Posts API). (source, checked 2026-10-28)
- Good times to post: Tuesdays through Thursdays 11 a.m.–5 p.m., audience local time. Sprout Social 2026 study. (source, checked 2026-10-28)
TikTok
Platform tiktok · this section alone: posttide://guide/tiktok.
What a post may carry in PostTide
- Text: optional, at most 2200 characters (count it the network's way, below).
- A post needs: a video.
- Pictures: none — this network takes no pictures from PostTide.
- Video: one per post, at most 500 MB, at most 300 seconds.
The network's rules
- Caption counting: UTF-16 code units; # and @ are matched, delimited by spaces or new lines. Same as PostTide's text.length. (source, checked 2026-10-28)
- Shown before "more": TikTok publishes no cut-off. (source, checked 2026-10-28)
- Hashtags: no cap published (hashtags count toward the 2200). (source, checked 2026-10-28)
- Links in the text clickable: no — the post API has no link field; caption URLs are text. (source, checked 2026-10-28)
- Picture types: image/jpeg, image/webp. TikTok takes photo posts; PostTide publishes video only. (source, checked 2026-10-28)
- Picture size: 20000000 bytes at most. 20 MB, max 1080p — photo posts, which PostTide does not send. (source, checked 2026-10-28)
- Picture shapes: not published; max 1080p. (source, checked 2026-10-28)
- Best picture size: up to 1080p (photo posts, not sent by PostTide). (source, checked 2026-10-28)
- Video types: video/mp4, video/webm, video/quicktime. MP4 recommended. (source, checked 2026-10-28)
- Video encoding: H.264 (recommended), H.265, VP8, VP9; 23–60 fps; 360–4096 px each side. (source, checked 2026-10-28)
- Video shapes: not published (any within 360–4096 px each side); vertical 9:16 is the app's native shape. (source, checked 2026-10-28)
- Shortest video: not published. (source, checked 2026-10-28)
- Cover PostTide sends: frame time only: video_cover_timestamp_ms (default 0). (source, checked 2026-10-28)
- Cover the network takes that PostTide does not send: none — the direct-post API takes a frame time, no cover picture. (source, checked 2026-10-28)
- Who can see it: the person must pick privacy from creator_info's options in a dropdown with no default; comments/duet/stitch off until they turn them on; branded content cannot be private; consent shown before upload; unaudited apps post SELF_ONLY. "Users must manually select the privacy status from a dropdown and there should be no default value." PostTide sends SELF_ONLY until app review (tiktok-pack.ts:43) and otherwise the TIKTOK_PRIVACY_LEVEL env default (tiktok-pack.ts:45) — task 8 applies. (source, checked 2026-10-28)
- Good times to post: Tuesdays through Fridays 2–6 p.m., audience local time. Sprout Social 2026 study. (source, checked 2026-10-28)
YouTube
Platform youtube · this section alone: posttide://guide/youtube.
What a post may carry in PostTide
- Text: optional, at most 5000 characters (count it the network's way, below).
- A post needs: a video.
- Pictures: none — this network takes no pictures from PostTide.
- Video: one per post, at most 256000 MB, no PostTide length cap.
The network's rules
- Caption counting: title in characters; description in UTF-8 bytes (an emoji is 4). postLength counts UTF-16 units, not bytes; the uploader trims by bytes at youtube-upload-pack.ts:54. (source, checked 2026-10-28)
- Shown before "more": not published. (source, checked 2026-10-28)
- Hashtags: 60 at most. "If a video or playlist has more than 60 hashtags, we'll ignore each hashtag." Tags field: 500 characters total. (source, checked 2026-10-28)
- Links in the text clickable: yes in the description. (source, checked 2026-10-28)
- Picture types: none — video only (thumbnails: image/jpeg, image/png). (source, checked 2026-10-28)
- Picture size: thumbnails: 2 MB (app) / 50 MB (desktop and API). thumbnails.set reference: max 50MB. (source, checked 2026-10-28)
- Picture shapes: thumbnail 16:9 (Shorts 9:16). (source, checked 2026-10-28)
- Best picture size: thumbnail 1280×720 or larger, min width 640; YouTube recommends 3840×2160 (Shorts 2160×3840). (source, checked 2026-10-28)
- Video types: video/* (any video type). (source, checked 2026-10-28)
- Video encoding: not limited by the API (video/*). (source, checked 2026-10-28)
- Video shapes: any; 16:9 for videos, vertical or square for Shorts. (source, checked 2026-10-28)
- Shortest video: not published. (source, checked 2026-10-28)
- Cover PostTide sends: thumbnail picture via thumbnails.set after upload (JPEG/PNG; a failure is a warning, the video stays). Custom thumbnails need a verified channel (support answer 72431). (source, checked 2026-10-28)
- Cover the network takes that PostTide does not send: none — YouTube's API takes a thumbnail picture only. (source, checked 2026-10-28)
- Who can see it: privacyStatus private / unlisted / public (omitted = public); "Videos uploaded from unverified API projects are not restricted to private viewing mode."; selfDeclaredMadeForKids is the channel owner's declaration. PostTide defaults privacy to private when none is set (video-pack.ts). (source, checked 2026-10-28)
- Good times to post: no YouTube window in the study; overall best Tuesdays and Wednesdays 11 a.m.–6 p.m., audience local time. Sprout Social 2026 study, overall figure. (source, checked 2026-10-28)
Platform pinterest · this section alone: posttide://guide/pinterest.
What a post may carry in PostTide
- Text: optional, at most 500 characters (count it the network's way, below).
- A post needs: a picture.
- Pictures: up to 1 per post.
- Video: none — this network takes no video from PostTide.
The network's rules
- Caption counting: characters. (source, checked 2026-10-28)
- Shown before "more": first 40 characters of the title may show; descriptions do not appear in the home or search feed. (source, checked 2026-10-28)
- Hashtags: no cap published. (source, checked 2026-10-28)
- Links in the text clickable: yes — the Pin's destination link. (source, checked 2026-10-28)
- Picture types: image/png, image/jpeg. (source, checked 2026-10-28)
- Picture size: 20000000 bytes at most. Desktop 20 MB, in-app 32 MB. (source, checked 2026-10-28)
- Picture shapes: 2:3 recommended; wider may be cut off in feeds. (source, checked 2026-10-28)
- Best picture size: 1000×1500. (source, checked 2026-10-28)
- Video types: video/mp4, video/quicktime, video/x-m4v. Pinterest takes video Pins; PostTide publishes images only. (source, checked 2026-10-28)
- Video encoding: not published on the specs page. (source, checked 2026-10-28)
- Video shapes: 1:1 or vertical 2:3, 4:5, 9:16. (source, checked 2026-10-28)
- Shortest video: 4 seconds. (source, checked 2026-10-28)
- Cover PostTide sends: none — PostTide sends image Pins only. (source, checked 2026-10-28)
- Cover the network takes that PostTide does not send: video Pins take a cover picture (cover_image_url / cover_image_data) or a key-frame time (cover_image_key_frame_time). Pinterest's own developer community; the v5 API reference renders client-side and could not be read signed out. (source, checked 2026-10-28)
- Who can see it: public Pin on the chosen board. (source, checked 2026-10-28)
- Good times to post: Tuesdays, Wednesdays and Thursdays 10 a.m.–1 p.m., audience local time. Sprout Social 2026 study. (source, checked 2026-10-28)
Threads
Platform threads · this section alone: posttide://guide/threads.
What a post may carry in PostTide
- Text: optional, at most 500 characters (count it the network's way, below).
- A post needs: text, a picture or a video.
- Pictures: up to 10 per post (a carousel).
- Video: one per post, no PostTide size cap, no PostTide length cap.
The network's rules
- Caption counting: characters, but an emoji counts as its UTF-8 byte length. PostTide checks text.length, so an emoji-heavy caption under 500 there can still be over Threads' count. (source, checked 2026-10-28)
- Shown before "more": not published. (source, checked 2026-10-28)
- Hashtags: one topic tag, 1–50 characters, no . or &. (source, checked 2026-10-28)
- Links in the text clickable: yes — at most 5 unique links per post; text-only posts get a link preview (first link or link_attachment). Over 5 fails with THREADS_API__LINK_LIMIT_EXCEEDED since 22 Dec 2025. (source, checked 2026-10-28)
- Picture types: image/jpeg, image/png. (source, checked 2026-10-28)
- Picture size: 8000000 bytes at most. (source, checked 2026-10-28)
- Picture shapes: up to 10:1. (source, checked 2026-10-28)
- Best picture size: width 320–1440. (source, checked 2026-10-28)
- Video types: video/mp4, video/quicktime. (source, checked 2026-10-28)
- Video encoding: H.264 or HEVC; AAC ≤48 kHz; 23–60 fps; width ≤1920. (source, checked 2026-10-28)
- Video shapes: 0.01:1 to 10:1, 9:16 recommended. (source, checked 2026-10-28)
- Shortest video: more than 0. (source, checked 2026-10-28)
- Cover PostTide sends: none — Threads picks the frame. (source, checked 2026-10-28)
- Cover the network takes that PostTide does not send: none published. (source, checked 2026-10-28)
- Who can see it: public post; no per-post audience chosen by PostTide. (source, checked 2026-10-28)
- Good times to post: no Threads window in the study; overall best Tuesdays and Wednesdays 11 a.m.–6 p.m., audience local time. (source, checked 2026-10-28)
Bluesky
Platform bluesky · this section alone: posttide://guide/bluesky.
What a post may carry in PostTide
- Text: optional, at most 300 characters (count it the network's way, below).
- A post needs: text, a picture or a video.
- Pictures: up to 4 per post.
- Video: one per post, at most 100 MB, no PostTide length cap.
The network's rules
- Caption counting: graphemes (an emoji, even a joined one, is 1). postLength counts UTF-16 units (stricter); the publisher checks graphemes at bluesky.provider.ts:155. (source, checked 2026-10-28)
- Shown before "more": the whole post shows; no fold. (source, checked 2026-10-28)
- Hashtags: no cap in text; the separate tags field holds at most 8. (source, checked 2026-10-28)
- Links in the text clickable: only when sent as facets (PostTide detects them). (source, checked 2026-10-28)
- Picture types: image/*. (source, checked 2026-10-28)
- Picture size: 2000000 bytes at most. PostTide recompresses to ≤1.9 MB. (source, checked 2026-10-28)
- Picture shapes: any; send aspectRatio so the feed lays it out. (source, checked 2026-10-28)
- Best picture size: not published. (source, checked 2026-10-28)
- Video types: video/mp4. (source, checked 2026-10-28)
- Video encoding: not published (MP4). (source, checked 2026-10-28)
- Video shapes: any; send aspectRatio. (source, checked 2026-10-28)
- Shortest video: not published. (source, checked 2026-10-28)
- Cover PostTide sends: none — Bluesky makes the thumbnail. (source, checked 2026-10-28)
- Cover the network takes that PostTide does not send: none — the video embed has no cover field (it takes alt text and VTT captions). (source, checked 2026-10-28)
- Who can see it: public post; no per-post audience chosen by PostTide. (source, checked 2026-10-28)
- Good times to post: no Bluesky window in the study; overall best Tuesdays and Wednesdays 11 a.m.–6 p.m., audience local time. (source, checked 2026-10-28)
Mastodon
Platform mastodon · this section alone: posttide://guide/mastodon.
What a post may carry in PostTide
- Text: optional, at most 500 characters (count it the network's way, below).
- A post needs: text, a picture or a video.
- Pictures: up to 4 per post.
- Video: one per post, at most 40 MB, no PostTide length cap.
The network's rules
- Caption counting: characters; every URL counts 23; a mention counts only its username part. postLength counts URLs at full length (stricter). (source, checked 2026-10-28)
- Shown before "more": the whole post shows unless it has a content warning, which collapses it. (source, checked 2026-10-28)
- Hashtags: no cap published. (source, checked 2026-10-28)
- Links in the text clickable: yes — links must start with http:// or https://. (source, checked 2026-10-28)
- Picture types: image/png, image/jpeg, image/heif, image/webp, image/avif. (source, checked 2026-10-28)
- Picture size: 16777216 bytes at most. Default image_size_limit; servers may differ; ≤33,177,600 pixels. (source, checked 2026-10-28)
- Picture shapes: any; a focus point (x,y in -1..1) picks the crop. (source, checked 2026-10-28)
- Best picture size: not published; under 33,177,600 pixels. (source, checked 2026-10-28)
- Video types: video/mp4, video/x-m4v, video/quicktime, video/webm. (source, checked 2026-10-28)
- Video encoding: not published; ≤120 fps, ≤8,294,400 pixels per frame by default. (source, checked 2026-10-28)
- Video shapes: any. (source, checked 2026-10-28)
- Shortest video: not published. (source, checked 2026-10-28)
- Cover PostTide sends: none — PostTide sends no thumbnail. (source, checked 2026-10-28)
- Cover the network takes that PostTide does not send: POST /api/v2/media takes a custom
thumbnailimage and afocuspoint. (source, checked 2026-10-28) - Who can see it: visibility public / unlisted / private / direct; a content warning hides the text and marks media sensitive. (source, checked 2026-10-28)
- Good times to post: no Mastodon window in the study; overall best Tuesdays and Wednesdays 11 a.m.–6 p.m., audience local time. (source, checked 2026-10-28)
Errors and their fixes
| Error | Fix |
|---|---|
invalid_input | An argument is wrong; the message names it. Fix that argument and call again. |
not_found | The id is wrong or outside this key’s reach. Take ids from channels_list / posts_list, never guess. |
not_available_for_key | The tool needs a whole-company key; this key is for one workspace. Tell the person. |
insufficient_scope | A read-only key cannot write. Tell the person a write key is needed. |
plan_required | The company’s plan does not include writing through the connection. Tell the person. |
read_only_subscription | The subscription is past due; reading still works. Tell the person. |
channel_needs_reconnection | A person reconnects that channel in PostTide (Channels); leave it out or wait. |
not_a_draft | The post was approved or published; a person edits it in PostTide. Make a new draft if asked. |
scheduling_horizon | proposedAt is past the plan’s horizon; propose a nearer time or tell the person. |
file_too_large | The file is over the link’s maxBytes; make it smaller (re-encode, shorten) and ask again. |
upload_link_expired | Ask media_upload_link for a new link and PUT the file again. |
upload_link_used | A link takes one PUT; ask for a new link for another file. |
upload_link_invalid | Use the uploadUrl exactly as answered, quoted in the shell. |
upload_size_mismatch | The PUT sent a different size than bytes; ask again with wc -c of the file. |
upload_too_large | More bytes arrived than bytes said; ask again with the file’s exact size. |
upload_not_finished | PUT the file to its uploadUrl first, then attach it. |
upload_links_unavailable | This server cannot take files; make a text-only draft or tell the person. |
api_key_revoked | The key was revoked; a person makes a new one. |
rate_limited | Wait a few seconds and try again; do not loop quickly. |
internal_error | Something failed on PostTide’s side; try once more shortly, then tell the person. |
Other tools
- Read:
posts_list(drafts waiting withneedsApproval, scheduled and published posts),posts_get,channels_get,calendar_window,analytics_read(timelines, best times, top posts — match what works). - Edit a draft:
drafts_update— only while it is a draft; an edit sends an approved draft back for approval. - Whole-company key only — workspaces:
workspaces_list. Ideas:pins_list,pins_create(save an idea or link),pins_tag(put pins in a bucket). News feeds:feeds_list,feeds_subscribe(follow a feed),feed_items_list. Company structure (workspaces, accounts, channels):structure_export,structure_check(check a structure file),structure_apply(apply a checked file),structure_undo(undo a change),structure_move_preview,structure_changes,structure_health.