Open Social
Documentation

Instagram, TikTok, and YouTube

Connect accounts, attach media, and select publication options for Instagram, TikTok, and YouTube.

View Markdown

Use the dashboard, REST API, CLI, SDK, or MCP tools to publish to these platforms. Read Getting started for account and client connection.

Connect an account

Open Accounts, select Connect an account, and choose a platform. Complete the platform sign-in and grant the requested permissions. For REST, send POST /v1/accounts/{platform}/connect and open the returned authorization_url.

Instagram requires a professional Business or Creator account. For YouTube, select a Google account with a YouTube channel. Check that the connected account is the account you intend to publish to.

If the dashboard shows Setup required, contact the service administrator. If platform sign-in fails, check that you selected the correct account and accepted the requested permissions.

Attach media

The dashboard post dialog can upload images and video. It shows a video preview and the platform options. Read GET /v1/capabilities?platform=PLATFORM for the supported file types and size limits before you upload.

REST clients call POST /v1/media, upload bytes to the returned upload_url, then call POST /v1/media/{id}/complete. Include duration_ms for TikTok videos. Optional metadata includes width, height, and alt_text. See the API media instructions.

The CLI can upload a video and supply its duration:

Shell
bun run cli -- media upload clip.mp4 --duration-ms 12000
PlatformSupported attachments
InstagramOne JPEG photo, a carousel of 2–10 JPEG photos, or one MP4/MOV Reel. Photos can be up to 8 MiB each. A Reel can be up to 1 GiB and 3 seconds to 15 minutes long.
TikTokOne MP4, MOV, or WebM video. Read current creator options for the maximum duration.
YouTubeOne MP4, MOV, or WebM video.

The service file limit is 2 GiB. Platform and account limits can be lower. Instagram video carousels and Stories are not supported. TikTok photo posts, inbox uploads, and commercial content are not supported.

Set publication options

Set platform_options on each publication target. The same object is accepted by POST /v1/posts and POST /v1/posts/validate.

YouTube

JSON
{
  "content": { "text": "A short product tour" },
  "media": ["med_YOUR_VIDEO"],
  "publications": [
    {
      "account_id": "acct_YOUR_YOUTUBE_CHANNEL",
      "platform_options": {
        "title": "Product tour",
        "privacy_status": "private",
        "made_for_kids": false
      }
    }
  ]
}

YouTube requires a title of 1–100 characters without < or >. privacy_status can be private (the default), unlisted, or public. made_for_kids is optional. The post text becomes the video description.

TikTok

Before each TikTok post, read GET /v1/accounts/{id}/publishing-options or call social_account_publishing_options. The result contains the creator identity, privacy_level_options, interaction settings, and max_video_post_duration_sec. Show these choices to the creator. Ask the creator to select a privacy level. Do not select a default privacy level for the creator.

JSON
{
  "privacy_level": "SELF_ONLY",
  "consent": true,
  "disable_comment": true,
  "disable_duet": true,
  "disable_stitch": true
}

Use this example only if SELF_ONLY is available and the creator selects it. Set consent: true only after the creator agrees to send this video with the selected settings. This integration supports videos that do not promote a brand or business. Interaction controls default to disabled. The creator's disabled settings take priority. An unavailable privacy choice is rejected; ask the creator to choose again.

CLI, SDK, and MCP

Shell
bun run cli -- accounts publishing-options acct_TIKTOK
bun run cli -- posts validate --text "A short clip" --account acct_TIKTOK --media med_VIDEO --option tiktok.privacy_level=SELF_ONLY --option tiktok.consent=true
bun run cli -- posts create --text "Video description" --account acct_YOUTUBE --media med_VIDEO --option youtube.title="My video" --option youtube.privacy_status=private

The SDK provides accounts.publishingOptions(id) and media.upload({ durationMs, ... }). The MCP upload tool accepts duration_ms. MCP post creation and validation accept platform_options.

Check publication results

Publishing can take time while a platform processes the video. Read the post and each publication status, or use webhooks for updates. A pending publication is not a successful publication.

Reconnect an account with status needs_reconnect. For other failures, read the publication error and correct the reported problem before you retry.

If Instagram returns instagram_publish_needs_reconciliation, check the Instagram account for the post before you retry. The post may already exist.

A private TikTok post can have no public post URL. In that case, external_post_id contains the TikTok publish request ID. A YouTube success means the upload was accepted and has a video ID. YouTube can continue processing and apply visibility restrictions after the upload.

On this page