Social media integration

Posting Capabilities

Support matrix of post types, media and features per social media provider.

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 speccore/src/main/resources/social-media-post-specification.yaml: per-provider textOnly flag, supported media kinds (image / video / document) per post type, and the carousel block (maxNumberOfItems, type = IMAGE | VIDEO | MIXED).
  • Enumsapi/.../post/core/model/payload/{ProviderPostType,CarouselContentType}.java, SupportedProvider.java, and each provider's *PostOptions.*PostType.
  • Runtime enforcementcore/.../post/infra/PostPublicationAdapterImpl.java (media-type guard + 0 / 1 / N media routing), each provider's *PostPublisher.uploadMultipleMedia(...), and payload models such as CarouselUploadPayload (@Size(min=2, max=10)), YouTubeCreatePostRequestSchema (@Size(min=1, max=1)), LinkedinMediaUploadHelper and TikTokPostPublisher.

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

PlatformPost typesSupported mediaCarouselSingle imageMulti-imageSingle videoMulti-videoText-onlyProvider docs
InstagramFeed image, Feed video, Carousel, Reel, Storyimage, videoMIXED, 2–10✅ (carousel)✅ (carousel, MIXED)Content Publishing
FacebookFeed image, Feed video, Carousel, Reel, Storyimage, videoIMAGE-only, ≤10✅ (feed / carousel)Pages API · Video API
X (Twitter)Postimage, video⚠️ spec MIXED ≤10✅ (≤4 images)❌ (1 video/post)Manage Posts · Media upload
TikTokPost (photo or video)image, video❌ (photo post = multi-image)✅ (photo post)❌ (1 video, no mix)Content Posting API
LinkedInPostimage, video, documentIMAGE-only, ≤10❌ (single video)Posts API
YouTubeVideovideo❌ (single video)videos.insert
DOCUMENT media (pdf, doc, docx, ppt, pptx) is LinkedIn-only. Every other provider throws UnsupportedOperationException for documents.

Per-platform detail

Instagram

IgPostType: IMAGE, VIDEO, REEL, STORY, POST (carousel). Not text-only.

Post typeSupported mediaCarouselSingle imageMulti-imageSingle videoMulti-videoText-onlyDocs
Feed imageimageContent Publishing
Feed videovideoContent Publishing
Carouselimage, videoMIXED, 2–10Carousel Posts
ReelvideoReels
Storyimage, videoStories

Facebook

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 typeSupported mediaCarouselSingle imageMulti-imageSingle videoMulti-videoText-onlyDocs
Feed imageimageIMAGE-only, ≤10Page Photos
Feed videovideoPublish a Video
ReelvideoReels Publishing
Storyimage, videoPage Stories API
Text postnonePages 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 typeSupported mediaCarouselSingle imageMulti-imageSingle videoMulti-videoText-onlyDocs
Postimage, video⚠️ spec MIXED ≤10✅ (≤4 images)❌ (1 video)Manage Posts
Media handlingimage, videoMedia 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 typeSupported mediaCarouselSingle imageMulti-imageSingle videoMulti-videoText-onlyDocs
Photo postimagePhoto Post Guide
Video postvideo❌ (single)Content Posting API

LinkedIn

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 typeSupported mediaCarouselSingle imageMulti-imageSingle videoMulti-videoText-onlyDocs
Image postimageIMAGE-only, ≤10MultiImage API · Images API
Video postvideo❌ (single)Videos API
Document postdocumentDocuments API
Text postnonePosts 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 typeSupported mediaCarouselSingle imageMulti-imageSingle videoMulti-videoText-onlyDocs
Videovideo❌ (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}/feed with attached_media; the declared carousel is IMAGE-only.
  • Text-only enforcement. textOnly is a declarative capability exposed via GET /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. DOCUMENT media is accepted only by LinkedIn (pdf, doc, docx, ppt, pptx); all other providers throw UnsupportedOperationException for documents.
  • Authoritative reference. For exact per-media constraints (size, dimensions, duration, fps, codecs, formats) see social-media-post-specification.yaml, exposed at runtime via GET /specification (PostManagementApi.getSpecification).
Copyright © 2026