What are the image limits on each platform?
| Platform | Max file size | Max images per post | Formats | Recommended size |
|---|---|---|---|---|
| 8 MB | 10 (carousel) | JPG, PNG | 1080x1350 | |
| 10 MB | Carousel up to 10 | JPG, PNG, GIF, WebP | 1200x630 | |
| X | n/a in constants | 4 | JPG, PNG, GIF, WebP | - |
| 8 MB | n/a in constants | JPG, PNG, GIF | 1200x627 | |
| TikTok (photo) | n/a in constants | n/a in constants | JPG, JPEG, WebP | - |
| Threads | 8 MB | 10 (carousel) | JPG, PNG | Max width 1440 |
| 20 MB | Carousel up to 5 | JPG, PNG, GIF, WebP | 1000x1500 | |
| 10 MB | 1 | JPG, PNG, GIF, WebP | - | |
| Bluesky | 1 MB | 4 | JPG, PNG, GIF, WebP | - |
| Telegram | 10 MB | 10 | JPG, PNG, WebP | - |
| Discord | 8 MB | 10 | JPG, PNG, GIF, WebP | - |
| Mastodon | 8 MB | 4 | JPG, PNG, GIF, WebP | - |
| Dev.to | 25 MB | 5 | JPG, PNG, WebP, GIF | - |
| Hashnode | 25 MB | 5 | JPG, PNG, WebP, GIF | - |
| Tumblr | 20 MB | 1 | JPG, PNG, WebP, GIF | - |
YouTube, Nostr and Slack have no image posting in these constants. Slack connections accept text only, YouTube is video, and Nostr is text. "n/a in constants" means Socifyr does not carry a number for that field, so check the platform's own documentation before relying on one.
What aspect ratio does Instagram require?
Instagram feed images must be between 4:5 portrait (0.8) and 1.91:1 landscape. Socifyr enforces that window before publishing. An image already inside it goes out as uploaded. An image that is too wide is center-cropped to 1.91:1, and one that is too tall is center-cropped to 4:5, then saved as a JPEG at quality 92. The crop happens on a temporary copy, so your original in the media library is untouched.
| Original | Ratio | What the API does |
|---|---|---|
| 1080x1350 | 0.80 | Published as is |
| 1080x1080 | 1.00 | Published as is |
| 1920x1080 | 1.78 | Published as is |
| 2400x1000 | 2.40 | Cropped to 1.91:1 |
| 1080x1920 | 0.56 | Cropped to 4:5 |
If composition matters, crop images yourself. A story-format 1080x1920 image posted to the feed loses a large strip of the top and bottom. For Stories, upload the image or video as a Story rather than a feed post; see how to post to Instagram via API.
What about Bluesky's 1 MB image limit?
Bluesky rejects image blobs of 1,000,000 bytes or more at record creation, which is stricter than almost any other platform. Socifyr passes images under the limit through untouched and re-encodes bigger ones as a JPEG with shrinking dimensions and quality until they fit under about 976 KB. So you can send the same 4 MB photo to Instagram and Bluesky, and each platform gets a file that fits. Details in the Bluesky and Mastodon guide.
How do I send the same image to many platforms?
The smallest per-file limit in your set decides the practical maximum. For Instagram, Facebook, Threads, LinkedIn and Mastodon that is 8 MB, and Bluesky shrinks its own copy. The smallest carousel limit decides how many images a shared post can carry: 4 if X, Bluesky or Mastodon are in the set, 5 with Pinterest, and 1 with Reddit or Tumblr.
import { getEffectiveCarouselLimit, getEffectivePhotoSizeLimit } from '@socifyr/shared'
const targets = ['instagram', 'x', 'bluesky'] as const
getEffectiveCarouselLimit([...targets]) // 4 (X and Bluesky)
getEffectivePhotoSizeLimit([...targets]) // 1 (Bluesky, in MB)
await socifyr.uploads.photos({
connections: ['instagram-mybrand', 'x-myhandle', 'bluesky-mybrand'],
medias: ['https://cdn.example.com/a.jpg', 'https://cdn.example.com/b.jpg'],
text: 'Two photos, three platforms',
})How do I upload from a file instead of a URL?
curl -X POST https://api.socifyr.com/api/content/photos \
-H "Authorization: Bearer sk_your_key" \
-H "X-Workspace-Id: <workspaceId>" \
-F "connections[]=instagram-mybrand" \
-F "connections[]=facebook-mypage" \
-F "medias[]=@photo1.jpg" \
-F "medias[]=@photo2.jpg"You can mix raw files with media library IDs and public URLs. The photos endpoint accepts up to 10 files per request. Uploaded files also count toward your workspace storage (1 GB free, 50 GB Pro, 500 GB Business).
What error do I see when an image is too large?
Socifyr maps the platform's raw message to a readable one. For an oversized file the reason is that the media file is too large for that platform, and the hint lists the platform's own limits, for example video 300 MB and image 8 MB for Instagram. For a bad ratio or resolution the reason says the media does not meet the platform's format requirements and tells you to check the aspect ratio, resolution or duration. Replace the file before retrying, because the same file will fail again.