Back to Docs
Promote Product Workflow

Make Content and Publish to Social

Generate multi-format social content (video, slideshow, carousel, single photo), wire it to the right sales channel, and publish to TikTok, Instagram, YouTube, and X.

Updated 2026-05-31

Goal

Once a listing is live, turn its product into per-channel social content and drive viewers to the right place to buy.

What's Inside Make Content

The Make Content surface (in-app: Dashboard → Promote → Make Content) generates four formats from a single listing. Every format lives on the same row — the format you pick at generation time decides what the worker produces and what gets billed.

FormatWhat it isCredits
VideoAI shoppable video — scene planning, voiceover, music, assembly40 (social_video)
SlideshowYour photos with Ken Burns motion + music. No AI generation12 (social_slideshow)
CarouselMulti-image swipeable post (no video)4 (social_carousel)
Single PhotoOne image post1 (social_single)

The in-app primary button is dynamic: it reads Make Video / Make Slideshow / Make Carousel / Make Single Photo based on the format you selected.

Format × Channel Support

Not every format makes sense on every social channel. Vaybel enforces these combinations at publish time:

FormatTikTokInstagramYouTubeX
Videoyesyesyesyes
Slideshowyesyesyesyes
Carouselyesyesyes
Single Photoyesyes

Asking the publisher to put a carousel on YouTube, or a single photo on TikTok, is a clean error — pick a different format or a different channel.

Sales-Channel-Aware CTAs

Every post is anchored to one sales channel — the destination viewers should buy from. Vaybel picks it automatically (you can override on a per-post basis):

  • TikTok posts drive to TikTok Shop when the product is live there. TikTok Shop is exclusive — when a TikTok post drives to TikTok Shop it cannot name any other destination.
  • Other channels (Instagram, YouTube, X) — and TikTok when there is no live TikTok Shop listing — drive to the best non-TikTok marketplace: Shopify if connected, otherwise Etsy.

For MCP clients, destination and CTA policy resolution happens inside social_post.generate and social_post.publish, using the same sales-channel rules as the app.

Per-channel publishers can't all carry a clickable link in the post body. Vaybel uses the right mechanic for each:

ChannelLink mechanic
XClickable link in the post itself
YouTubeLink in the video description
InstagramManual bio link
TikTokTikTok Seller Center product anchor (TikTok Shop), or manual bio link

The caption generator receives the active link mechanic and whether caption links are allowed, so generated copy does not paste a URL where the platform will silently strip it.

End-to-End Flow

Step

Pick a listing and a format

Start from a published listing. Open Make Content, pick Video / Slideshow / Carousel / Single Photo. For carousel / single, attach the source images. Submit — the worker dispatches and bills only on success.

Step

Wait for the asset

Video and slideshow produce an MP4 (5–15 minutes typical). Carousel and single resolve in seconds — they're pass-throughs of the source images.

Step

Generate per-channel posts

Pick the social channels you want — any subset of TikTok / Instagram / YouTube / X (subject to the format × channel matrix above). Vaybel writes one caption + hashtag set per channel, with the right CTA copy and link mechanic for the resolved sales channel.

Step

Edit captions if needed

Every per-channel post is editable while it's in PENDING or FAILED — caption text, hashtags, buy URL. Once a post is PUBLISHING or PUBLISHED it's frozen.

Step

Publish

Hand the post(s) to the per-channel publisher. TikTok takes optional posting settings (privacy level, comment / duet / stitch toggles); Instagram, YouTube, and X take the assembled payload as-is. Each publish call returns a publish_url and external_id per channel.

Driving This From An Agent (MCP)

The full surface is wrapped as MCP tools — every step above is callable from any MCP-capable client. See the Tool Reference for full signatures.

StepMCP toolScope
Generate the assetcontent.generatecontent:write
Poll statuscontent.getcontent:read
Generate per-channel captionssocial_post.generatesocial_post:write
List persisted postssocial_post.listsocial_post:read
Edit a post pre-publishsocial_post.updatesocial_post:write
Publish to channelssocial_post.publishsocial_post:write

A PAT that needs the whole loop should carry content:read, content:write, social_post:read, and social_post:write. Tokens are pinned to one organization — agents can't reach into another org's content items or posts.

Next Read