Posting Capabilities
This page describes what each social media provider integration supports when publishing a post: the post types, the media it accepts, and whether it supports carousels, single and multiple images, single and multiple videos, and text-only (media-less) posts.
Source of truth
The matrix is derived from the code, primarily:
- Declarative spec —
core/src/main/resources/social-media-post-specification.yaml: per-providertextOnlyflag, supported media kinds (image/video/document) per post type, and thecarouselblock (maxNumberOfItems,type=IMAGE|VIDEO|MIXED). - Enums —
api/.../post/core/model/payload/{ProviderPostType,CarouselContentType}.java,SupportedProvider.java, and each provider's*PostOptions.*PostType. - Runtime enforcement —
core/.../post/infra/PostPublicationAdapterImpl.java(media-type guard + 0 / 1 / N media routing), each provider's*PostPublisher.uploadMultipleMedia(...), and payload models such asCarouselUploadPayload (@Size(min=2, max=10)),YouTubeCreatePostRequestSchema (@Size(min=1, max=1)),LinkedinMediaUploadHelperandTikTokPostPublisher.
Legend: ✅ supported · ❌ not supported · ⚠️ supported by the service spec but constrained by the provider API. Single image / Single video indicate whether exactly one image or one video can be published; Multi-image / Multi-video indicate whether more than one image or video is allowed in the same post (a carousel requires ≥ 2 items, so its rows are ❌ under the "single" columns).
Platform summary matrix
| Platform | Post types | Supported media | Carousel | Single image | Multi-image | Single video | Multi-video | Text-only | Provider docs |
|---|---|---|---|---|---|---|---|---|---|
| Feed image, Feed video, Carousel, Reel, Story | image, video | ✅ MIXED, 2–10 | ✅ | ✅ (carousel) | ✅ | ✅ (carousel, MIXED) | ❌ | Content Publishing | |
| Feed image, Feed video, Carousel, Reel, Story | image, video | ✅ IMAGE-only, ≤10 | ✅ | ✅ (feed / carousel) | ✅ | ❌ | ✅ | Pages API · Video API | |
| X (Twitter) | Post | image, video | ⚠️ spec MIXED ≤10 | ✅ | ✅ (≤4 images) | ✅ | ❌ (1 video/post) | ✅ | Manage Posts · Media upload |
| TikTok | Post (photo or video) | image, video | ❌ (photo post = multi-image) | ✅ | ✅ (photo post) | ✅ | ❌ (1 video, no mix) | ❌ | Content Posting API |
| Post | image, video, document | ✅ IMAGE-only, ≤10 | ✅ | ✅ | ✅ | ❌ (single video) | ✅ | Posts API | |
| YouTube | Video | video | ❌ | ❌ | ❌ | ✅ | ❌ (single video) | ❌ | videos.insert |
DOCUMENT media (pdf, doc, docx, ppt, pptx) is LinkedIn-only. Every other provider throws UnsupportedOperationException for documents.Per-platform detail
IgPostType: IMAGE, VIDEO, REEL, STORY, POST (carousel). Not text-only.
| Post type | Supported media | Carousel | Single image | Multi-image | Single video | Multi-video | Text-only | Docs |
|---|---|---|---|---|---|---|---|---|
| Feed image | image | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | Content Publishing |
| Feed video | video | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | Content Publishing |
| Carousel | image, video | ✅ MIXED, 2–10 | ❌ | ✅ | ❌ | ✅ | ❌ | Carousel Posts |
| Reel | video | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | Reels |
| Story | image, video | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | Stories |
FbPostType: IMAGE, VIDEO, STORY, REEL, POST. Text-only allowed. Multi-media posts route to /{page-id}/feed with attached_media; there is no true mixed photo+video carousel.
| Post type | Supported media | Carousel | Single image | Multi-image | Single video | Multi-video | Text-only | Docs |
|---|---|---|---|---|---|---|---|---|
| Feed image | image | ✅ IMAGE-only, ≤10 | ✅ | ✅ | ❌ | ❌ | ✅ | Page Photos |
| Feed video | video | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | Publish a Video |
| Reel | video | ❌ | ❌ | ❌ | ✅ | ❌ | — | Reels Publishing |
| Story | image, video | ❌ | ✅ | ❌ | ✅ | ❌ | — | Page Stories API |
| Text post | none | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | Pages API — Posts |
X (Twitter)
XPostType: POST only. A single post with attached media; text-only allowed. The service spec declares a MIXED carousel of up to 10, but the X API caps a post at 4 images OR 1 video/GIF.
| Post type | Supported media | Carousel | Single image | Multi-image | Single video | Multi-video | Text-only | Docs |
|---|---|---|---|---|---|---|---|---|
| Post | image, video | ⚠️ spec MIXED ≤10 | ✅ | ✅ (≤4 images) | ✅ | ❌ (1 video) | ✅ | Manage Posts |
| Media handling | image, video | — | ✅ | — | ✅ | — | — | Media upload |
TikTok
TikTokPostType: POST only. A post is either a photo post (one or many images) or a single video — mixing types and multiple videos are rejected. Not text-only. No carousel block (photo posts carry the multi-image capability).
| Post type | Supported media | Carousel | Single image | Multi-image | Single video | Multi-video | Text-only | Docs |
|---|---|---|---|---|---|---|---|---|
| Photo post | image | ❌ | ✅ | ✅ | ❌ | — | ❌ | Photo Post Guide |
| Video post | video | ❌ | ❌ | — | ✅ | ❌ (single) | ❌ | Content Posting API |
LinkedinPostType: POST only. Supports images (multi-image, up to 10), a single video, and a single document — the only provider that accepts documents. No mixing of media types. Text-only allowed.
| Post type | Supported media | Carousel | Single image | Multi-image | Single video | Multi-video | Text-only | Docs |
|---|---|---|---|---|---|---|---|---|
| Image post | image | ✅ IMAGE-only, ≤10 | ✅ | ✅ | ❌ | ❌ | ✅ | MultiImage API · Images API |
| Video post | video | ❌ | ❌ | ❌ | ✅ | ❌ (single) | ✅ | Videos API |
| Document post | document | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | Documents API |
| Text post | none | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | Posts API |
YouTube
No post-type enum — a single video upload only. YouTubeCreatePostRequestSchema enforces @Size(min = 1, max = 1) on attachments (exactly one video, no images, no text-only, no multi-media).
| Post type | Supported media | Carousel | Single image | Multi-image | Single video | Multi-video | Text-only | Docs |
|---|---|---|---|---|---|---|---|---|
| Video | video | ❌ | ❌ | ❌ | ✅ | ❌ (single) | ❌ | videos.insert |
Notes & caveats
- X media limits. The service spec declares an X carousel of
type: MIXED, maxNumberOfItems: 10, but the X API allows at most 4 images, or 1 video, or 1 GIF per post — images and video cannot be mixed. Treat X as multi-image (≤4), single-video. See X media upload. - Facebook carousel. There is no true mixed photo+video carousel. Multi-image posts are published to
/{page-id}/feedwithattached_media; the declared carousel isIMAGE-only. - Text-only enforcement.
textOnlyis a declarative capability exposed viaGET /specification. Only YouTube hard-enforces non-text-only server-side (its schema requires exactly one video). For the others, empty media is simply handled gracefully by the orchestrator. - Documents.
DOCUMENTmedia is accepted only by LinkedIn (pdf,doc,docx,ppt,pptx); all other providers throwUnsupportedOperationExceptionfor documents. - Authoritative reference. For exact per-media constraints (size, dimensions, duration, fps, codecs, formats) see
social-media-post-specification.yaml, exposed at runtime viaGET /specification(PostManagementApi.getSpecification).