# Platform specifications

Each post target picks a **content type**. Its rules are checked before the post can be scheduled
([pre-flight](/concepts/errors/#pre-flight-issues)), and [`GET /content-types`](/api/operations/listcontenttypes/) returns them
as JSON so your code or agent can check first.

## What each platform supports

| Platform | Formats | Text-only | First comment | Comments inbox | Direct messages | Metrics |
|---|---|---|---|---|---|---|
| [Instagram](/platforms/instagram/) | Photo, carousel, Reel, Story | No | ✓ | ✓ read, reply, hide | ✓ | ✓ |
| [Facebook](/platforms/facebook/) | Text/link, photo, video, Reel | ✓ | ✓ | ✓ read, reply, hide | ✓ Messenger | ✓ |
| [TikTok](/platforms/tiktok/) | Video, photo post | No | No | No | No | ✓ |
| [Threads](/platforms/threads/) | Text, image, video, carousel | ✓ | ✓ (reply) | No | No | ✓ |
| [YouTube](/platforms/youtube/) | Short, video | No | No | No | No | ✓ |
| [Bluesky](/platforms/bluesky/) | Post (up to 4 images), video | ✓ | No | No | No | ✓ |
| [Telegram](/platforms/telegram/) | Message, photo/video | ✓ | No | No | No | No |

"First comment" also enables `followUps` (comments or a Threads thread posted minutes after the post).

## Every content type

| Id | Platform | Format | Media | Kinds | Aspect (w/h) | Video length | Max size (image / video) | Caption max | First comment |
|---|---|---|---|---|---|---|---|---|---|
| `fb_post` | facebook | Text / link post | 0 | none | – | – | – / – | 63,206 | yes |
| `fb_photo` | facebook | Photo post | 1–10 | image | – | – | 10 MB / – | 63,206 | yes |
| `fb_video` | facebook | Video | 1 | video | – | 1–14400 s | – / 4 GB | 63,206 | yes |
| `fb_reel` | facebook | Reel | 1 | video | 0.5–0.6 | 3–90 s | – / 1 GB | 63,206 | yes |
| `ig_image` | instagram | Image | 1 | image | 0.8–1.91 | – | 8 MB / – | 2,200, 30 hashtags | yes |
| `ig_carousel` | instagram | Carousel | 2–10 | image, video | 0.8–1.91 | 3–60 s | 8 MB / 100 MB | 2,200, 30 hashtags | yes |
| `ig_reel` | instagram | Reel | 1 | video | 0.01–10 | 3–900 s | – / 300 MB | 2,200, 30 hashtags | yes |
| `ig_story` | instagram | Story | 1 | image, video | – | 3–60 s | 8 MB / 100 MB | none | no |
| `tt_video` | tiktok | Video | 1 | video | – | 3–600 s | – / 4 GB | 2,200 | no |
| `tt_photo` | tiktok | Photo post | 1–35 | image | – | – | 20 MB / – | 4,000 | no |
| `th_text` | threads | Text post | 0 | none | – | – | – / – | 500 | yes |
| `th_image` | threads | Image | 1 | image | 0.1–10 | – | 8 MB / – | 500 | yes |
| `th_video` | threads | Video | 1 | video | 0.01–10 | 1–300 s | – / 1 GB | 500 | yes |
| `th_carousel` | threads | Carousel | 2–20 | image, video | 0.01–10 | 1–300 s | 8 MB / 1 GB | 500 | yes |
| `tg_message` | telegram | Message | 0 | none | – | – | – / – | 4,096 | no |
| `tg_media` | telegram | Photo / video | 1–10 | image, video | – | – | 5 MB / 20 MB | 1,024 | no |
| `bs_post` | bluesky | Post | 0–4 | image | – | – | 2 MB / – | 300 | no |
| `bs_video` | bluesky | Video | 1 | video | – | 1–180 s | – / 286 MB | 300 | no |
| `yt_short` | youtube | Short | 1 | video | 0.5–1 | 1–180 s | – / 4 GB | 5,000 | no |
| `yt_video` | youtube | Video | 1 | video | – | 1–43200 s | – / 256 GB | 5,000 | no |

Aspect is width ÷ height: `0.8–1.91` is 4:5 to 1.91:1; `0.5–0.6` is about 9:16. Sizes are the platform's limits; PostFlow's own
upload limit is 30 MB for images and 1 GB for videos.

Platforms also check things PostFlow can't see in advance (content policies, daily limits, processing). Those come back on the
target with a plain-language `errorMessage`. See [Post statuses](/platforms/statuses/).