Platform Tips

Cross-Platform Posting: One API Call to Publish Everywhere

392 views
Serge Bulaev
Serge Bulaev
Cross-Platform Posting: One API Call to Publish Everywhere

TL;DR

Publish to Instagram, LinkedIn, X, Threads, Telegram, and 6 more platforms with a single Publora API call. Platform comparison table, format handling, media conversion, and code examples.

The Problem: Managing 10+ Social Platforms is a Nightmare

If you manage a brand's social presence in 2026, you are probably dealing with an absurd number of platforms. Instagram, LinkedIn, X (Twitter), Threads, TikTok, Facebook, YouTube, Telegram, Mastodon, Bluesky, Pinterest — each with its own API, authentication flow, media requirements, character limits, and rate limits.

Publishing the same announcement across all of them means writing 11 different API integrations, handling 11 different OAuth flows, managing 11 different token refresh cycles, converting media to 11 different format requirements, and monitoring 11 different rate limit quotas. The engineering effort is enormous, the maintenance burden is worse, and the bugs are endless.

What you'll learn in this guide:

  • How one API call publishes to all 11 platforms simultaneously
  • Complete platform comparison table — character limits, media specs, content types
  • How Publora handles format differences automatically (image conversion, thread splitting, facets)
  • Platform-specific settings for fine-tuning per-platform behavior
  • Code examples in JavaScript and Python for cross-platform posting

The Cost of Building It Yourself

Before looking at the solution, let's quantify what building cross-platform posting from scratch actually requires.

11

Separate API integrations to build and maintain

7+

Different OAuth flows to implement

Weeks

Of development time for a robust implementation

Each platform has unique quirks that take time to discover and handle:

Instagram

JPEG only. Business account required. 50 posts/day. Carousel API capped at 10 items (native allows 20). Cannot mix images and videos in carousels.

Bluesky

Rich text requires byte-offset facets. ~1 MB image limit. App password auth (not OAuth). URLs count in full toward 300-char limit.

TikTok

Video only. Unaudited apps restricted to private posts. 23 FPS minimum. Commercial content disclosure required for brand content.

Twitter/X

Emojis count as 2 characters. Images auto-converted to PNG, max 1000px. Paid Publora plan required. Long content auto-splits into threads.

Publora eliminates all of this by providing a single unified API that handles every platform's authentication, media conversion, character counting, and rate limiting behind the scenes.

One API Call to Publish Everywhere

Here is the core concept: you send one POST request with an array of platform IDs, and Publora publishes to all of them simultaneously. The same content, adapted to each platform's requirements automatically.

JavaScript

const response = await fetch('https://api.publora.com/api/v1/create-post', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'x-publora-key': 'sk_YOUR_API_KEY'
  },
  body: JSON.stringify({
    content: 'Excited to announce v3.0 of our developer toolkit! New features include real-time collaboration, AI-powered code review, and 50% faster builds. Try it now: https://example.com/v3 #devtools #opensource',
    platforms: [
      'instagram-17841400123456789',   // Instagram
      'linkedin-abc123def',             // LinkedIn
      'twitter-987654321',              // X (Twitter)
      'threads-112233445566',           // Threads
      'telegram-chat-100200300',        // Telegram
      'facebook-998877665544',          // Facebook
      'bluesky-did:plc:xyz789',         // Bluesky
      'mastodon-445566'                 // Mastodon
    ],
    scheduledTime: '2026-04-10T15:00:00Z'
  })
});

const data = await response.json();
console.log('Published to 8 platforms:', data.postGroupId);

Python

import requests

API_KEY = 'sk_YOUR_API_KEY'

response = requests.post(
    'https://api.publora.com/api/v1/create-post',
    headers={
        'Content-Type': 'application/json',
        'x-publora-key': API_KEY
    },
    json={
        'content': 'Excited to announce v3.0 of our developer toolkit! New features include real-time collaboration, AI-powered code review, and 50% faster builds. Try it now: https://example.com/v3 #devtools #opensource',
        'platforms': [
            'instagram-17841400123456789',
            'linkedin-abc123def',
            'twitter-987654321',
            'threads-112233445566',
            'telegram-chat-100200300',
            'facebook-998877665544',
            'bluesky-did:plc:xyz789',
            'mastodon-445566'
        ],
        'scheduledTime': '2026-04-10T15:00:00Z'
    }
)

data = response.json()
print(f'Published to 8 platforms: {data["postGroupId"]}')

That is it. One request. Eight platforms. All format differences, media conversions, and API quirks handled automatically by Publora.

The Complete Platform Comparison

Here is every platform Publora supports, with the key specifications you need to know for cross-platform content planning.

Platform Character Limit Images Video Text Only
Instagram 2,200 JPEG only, up to 10 (carousel) MP4/MOV, up to 15 min (Reels) No (media required)
LinkedIn 3,000 JPEG, PNG, multiple MP4 Yes
X (Twitter) 280 Up to 4, auto-PNG (1000px max) MP4, MOV Yes
Threads 500 Up to 10 (carousel) MP4, MOV, 1 per post Yes
Telegram 4,096 Yes Yes Yes
Facebook 63,206 (API) Multiple, WebP auto-converted MP4, MOV, AVI, MKV, WebM Yes
TikTok 2,200 No MP4/MOV/WebM, 3s-10 min No (video required)
YouTube 5,000 (description) No MP4/MOV/AVI/MKV/WebM No (video required)
Mastodon 500 JPEG, PNG, GIF, WebP, up to 4 MP4, WebM, MOV Yes
Bluesky 300 Up to 4 (all converted to JPEG) MP4, max 3 min Yes
Pinterest 500 (description) JPEG, PNG MP4 No (media required)

The golden rule for cross-platform content

Keep your caption under 280 characters (Twitter's limit) if you want it to display perfectly across all text-supporting platforms without truncation or thread splitting. For video-only platforms (TikTok, YouTube), always include a video file.

How Publora Handles Format Differences Automatically

The magic of cross-platform posting is in the automatic format adaptation. Here is what happens behind the scenes when you include multiple platforms in a single request.

Character Limit Handling

Twitter/X

Content over 280 chars is auto-split into threads with (1/N) markers. Emojis count as 2 characters.

Bluesky

300-char limit. URLs count in full. Hashtags auto-converted to clickable facets with byte offsets.

Threads

500-char limit. Long content auto-splits into connected replies. Max 1 hashtag per post.

Media Format Conversion

You upload a single media file. Publora converts it to each platform's required format.

Platform Image Conversion Special Handling
Instagram JPEG only (PNG rejected) Aspect ratio 4:5 to 1.91:1
Twitter/X Auto-converted to PNG, max 1000px Up to 4 images
Bluesky All formats converted to JPEG ~1 MB limit per image
Facebook WebP auto-converted to JPEG Multiple images become album
LinkedIn JPEG, PNG (WebP auto-converted) Multiple supported
Mastodon JPEG, PNG, GIF, WebP native Up to 4 per post

Rich Text Processing

Bluesky Facets

Hashtags and URLs are automatically converted to AT Protocol facets with correct byte offsets — including multi-byte character handling for emojis.

Telegram Markdown

Telegram supports Markdown formatting. Publora passes through your text as-is, preserving any Markdown syntax for bold, italic, or code blocks.

Platform-Specific Settings

While the content text is shared across platforms, you can fine-tune per-platform behavior using the platformSettings object. This lets you control how each platform handles your post without creating separate API calls.

const response = await fetch('https://api.publora.com/api/v1/create-post', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'x-publora-key': 'sk_YOUR_API_KEY'
  },
  body: JSON.stringify({
    content: 'Behind the scenes of our latest product shoot!',
    platforms: [
      'instagram-17841400123456789',
      'tiktok-99887766',
      'youtube-UCxyz123',
      'telegram-chat-100200300'
    ],
    scheduledTime: '2026-04-15T12:00:00Z',
    platformSettings: {
      // Instagram: Post as Reel (not Story)
      instagram: {
        videoType: 'REELS'
      },
      // TikTok: Public with comments enabled
      tiktok: {
        viewerSetting: 'PUBLIC_TO_EVERYONE',
        allowComments: true,
        allowDuet: false,
        allowStitch: false,
        commercialContent: false,
        brandOrganic: false,
        brandedContent: false
      },
      // YouTube: Unlisted with custom title
      youtube: {
        privacy: 'unlisted',
        title: 'Behind the Scenes: Product Shoot 2026'
      },
      // Telegram: Enable link preview
      telegram: {
        disableWebPagePreview: false
      }
    }
  })
});

Available Platform Settings

Platform Key Settings Description
Instagram videoType "REELS", "STORIES", or omit for photo post
TikTok viewerSetting, allowComments, allowDuet, allowStitch, commercialContent Privacy, interactions, and commercial disclosure
YouTube privacy, title "public", "unlisted", or "private"; video title
Telegram disableWebPagePreview Control link preview generation

How Publora Handles Media Differences

The biggest pain point in cross-platform posting is media. Each platform has different format requirements, size limits, and content type restrictions. Here is how Publora resolves these conflicts automatically.

1

You Upload

One file, any supported format

2

Publora Analyzes

Checks format requirements per platform

3

Auto-Converts

JPEG for Bluesky, PNG for Twitter, etc.

4

Validates Sizes

Compresses to meet per-platform limits

5

Publishes

Each platform gets its optimized version

Cross-Platform Media Upload Example

import requests

API_KEY = 'sk_YOUR_API_KEY'
BASE = 'https://api.publora.com/api/v1'

# Step 1: Create multi-platform post
resp = requests.post(f'{BASE}/create-post', headers={
    'Content-Type': 'application/json',
    'x-publora-key': API_KEY
}, json={
    'content': 'New feature launch: real-time collaboration is here! #devtools',
    'platforms': [
        'instagram-17841400123456789',  # Will receive JPEG
        'twitter-987654321',             # Will receive PNG (max 1000px)
        'bluesky-did:plc:xyz789',        # Will receive JPEG (<1 MB)
        'linkedin-abc123def',            # Will receive original or JPEG
        'mastodon-445566',               # Will receive original format
        'facebook-998877665544',         # Will receive JPEG (if WebP input)
        'threads-112233445566'           # Will receive image as-is
    ],
    'scheduledTime': '2026-04-12T14:00:00Z'
})
post_id = resp.json()['postGroupId']

# Step 2: Upload one image — Publora handles per-platform conversion
upload_resp = requests.get(
    f'{BASE}/upload-media/{post_id}?filename=feature-hero.png',
    headers={'x-publora-key': API_KEY}
)
upload_url = upload_resp.json()['uploadUrl']

with open('feature-hero.png', 'rb') as f:
    requests.put(upload_url, headers={'Content-Type': 'image/png'}, data=f)

print(f'One upload, 7 platforms, zero format headaches.')

Real-World Workflow: Product Launch Across All Platforms

Here is a complete, production-ready example of a product launch posted to 8 platforms with platform-specific settings, media upload, and scheduling.

import fs from 'fs';

const API_KEY = 'sk_YOUR_API_KEY';
const BASE = 'https://api.publora.com/api/v1';
const headers = { 'Content-Type': 'application/json', 'x-publora-key': API_KEY };

// The announcement — kept under 280 chars for Twitter compatibility
const content = `We just launched v3.0! 🚀

Real-time collab, AI code review, 50% faster builds.

Try it free: https://example.com/v3

#devtools #opensource #launch`;

// Step 1: Create cross-platform post
const response = await fetch(`${BASE}/create-post`, {
  method: 'POST',
  headers,
  body: JSON.stringify({
    content,
    platforms: [
      'linkedin-abc123def',
      'twitter-987654321',
      'threads-112233445566',
      'mastodon-445566',
      'bluesky-did:plc:xyz789',
      'facebook-998877665544',
      'telegram-chat-100200300',
      'instagram-17841400123456789'
    ],
    scheduledTime: '2026-04-15T15:00:00Z',
    platformSettings: {
      tiktok: {
        viewerSetting: 'PUBLIC_TO_EVERYONE',
        allowComments: true
      },
      telegram: {
        disableWebPagePreview: false
      }
    }
  })
});

const { postGroupId } = await response.json();
console.log('Post created:', postGroupId);

// Step 2: Upload hero image
const uploadRes = await fetch(
  `${BASE}/upload-media/${postGroupId}?filename=v3-launch-hero.jpg`,
  { headers: { 'x-publora-key': API_KEY } }
);
const { uploadUrl } = await uploadRes.json();

await fetch(uploadUrl, {
  method: 'PUT',
  headers: { 'Content-Type': 'image/jpeg' },
  body: fs.readFileSync('v3-launch-hero.jpg')
});

console.log('Launch scheduled to 8 platforms at 2026-04-15 15:00 UTC');

Handling Failures Gracefully

In cross-platform posting, individual platforms can fail while others succeed. Publora processes each platform independently — a TikTok rate limit error does not prevent your LinkedIn post from going through.

What Publora handles

  • Independent platform delivery — failure on one does not block others
  • Automatic token refresh for expiring OAuth connections
  • Rate limit awareness per platform
  • Media format validation before attempting to publish
  • Detailed per-platform status tracking

What you should monitor

  • Expired connections (re-authorize in dashboard)
  • Platform-specific content violations
  • Video-only platforms receiving text-only posts
  • Content length exceeding per-platform limits
  • Facebook token 59-day refresh cycle
import requests

API_KEY = 'sk_YOUR_API_KEY'
BASE = 'https://api.publora.com/api/v1'

# Check post status after publishing
resp = requests.get(
    f'{BASE}/list-posts?limit=5',
    headers={'x-publora-key': API_KEY}
)

for post in resp.json()['posts']:
    print(f"Post: {post['content'][:50]}...")
    for platform in post.get('platforms', []):
        status = platform.get('status', 'unknown')
        name = platform.get('platformId', 'unknown')
        print(f"  {name}: {status}")
        if status == 'failed':
            print(f"    Error: {platform.get('error', 'No details')}")

Content Strategy for Cross-Platform Posting

Not all content works equally well across all platforms. Here is a practical guide to which content types fit which platforms.

Text Announcements

Best for: LinkedIn, Twitter/X, Mastodon, Bluesky, Threads, Telegram, Facebook

Keep under 280 chars for universal compatibility

Image + Caption

Best for: Instagram, LinkedIn, Twitter/X, Threads, Mastodon, Bluesky, Facebook

Upload JPEG for widest compatibility

Short Video (<60s)

Best for: TikTok, Instagram Reels, YouTube Shorts, Facebook, Bluesky

Use 9:16 MP4 for maximum reach

Cross-platform content tip

The safest cross-platform content is a JPEG image with a caption under 280 characters. This works on every platform that supports images (9 out of 11), and the short caption avoids truncation on Twitter and Bluesky. For video-only platforms (TikTok, YouTube), create separate posts with dedicated video content.

Pricing: One Post, Many Platforms

A common question about cross-platform posting: does posting to 8 platforms count as 8 posts against your quota?

How Publora counts

A single create-post call with multiple platforms counts as one post toward your plan quota. Posting to 8 platforms costs the same as posting to 1. This makes cross-platform posting extremely cost-efficient.

Plan requirements

Most platforms work on any Publora plan. Twitter/X requires a Pro or Premium plan (excluded from Starter). API key access requires Pro or Premium. The Starter plan is dashboard-only with limited platform access.

Getting Started in 5 Minutes

Ready to publish everywhere with one API call? Here is the quickest path.

  1. Create a Publora account — free trial available on the Pro plan
  2. Connect your platforms — Go to Connections and add each social account (one-time setup per platform)
  3. Get your API key — Settings → API Keys → Create Key (authentication docs)
  4. List your platform IDs — Via List Connections API or the dashboard
  5. Make your first cross-platform post — Use the code examples above with all your platform IDs

One API call. Eleven platforms. Zero headaches.

Stop managing 11 different APIs. Start publishing everywhere with Publora.

Get Started Free →

Frequently Asked Questions

How many platforms can I post to simultaneously with one API call?

Publora supports 11 platforms: Instagram, LinkedIn, X (Twitter), Threads, Telegram, Facebook, TikTok, YouTube, Mastodon, Bluesky, and Pinterest. You can include any combination of these in a single create-post API call by listing their platform IDs in the platforms array. See the Create Post documentation for the full parameter reference.

What happens if my content exceeds a platform's character limit?

Each platform has different character limits — Twitter at 280, Bluesky at 300, Threads at 500, Mastodon at 500, LinkedIn at 3,000, and Instagram/TikTok/Facebook at 2,200. When your content exceeds a platform's limit, Publora handles it per platform: Twitter auto-splits into threads with (1/N) markers, Threads splits into connected replies, while other platforms may truncate. For universal compatibility, keep content under 280 characters.

Does Publora automatically convert media formats for each platform?

Yes. Publora handles media format conversion per platform automatically. Bluesky receives JPEG (converted from any input format), Twitter receives PNG at max 1000px width, Instagram requires JPEG (PNG is rejected), Facebook converts WebP to JPEG, and Mastodon accepts most formats natively. You upload once and Publora handles all format requirements.

Can I customize the post content per platform in a single API call?

Currently, the create-post endpoint sends the same content text to all platforms. You can customize platform-specific behavior through the platformSettings object (Instagram videoType, TikTok viewerSetting, YouTube privacy, etc.), but the caption text is shared. If you need different text per platform, create separate posts for each.

Which platforms require video content and cannot accept text-only posts?

TikTok and YouTube are video-only platforms — they require a video file with every post and do not support text-only or image-only content through their APIs. Instagram and Pinterest require media (image or video) but do not accept text-only posts. All other platforms (LinkedIn, X, Threads, Telegram, Facebook, Mastodon, Bluesky) accept text-only posts.

Is there a cost difference for posting to multiple platforms?

No. A single create-post call that targets multiple platforms counts as one post toward your Publora plan quota, not one per platform. Posting to 8 platforms costs the same as posting to 1. However, some platforms (Twitter/X) require a paid Publora plan (Pro or Premium) to access. Check your plan limits for details.

What happens if one platform fails during a cross-platform post?

Publora processes each platform independently. If one platform fails (e.g., Instagram rejects a PNG image, TikTok hits a rate limit, or a Bluesky app password expires), the other platforms still publish successfully. You can check the per-platform delivery status in the Publora dashboard or via the List Posts API.

Can I schedule cross-platform posts for a future time?

Yes. Add a scheduledTime field in ISO 8601 format (UTC) to your create-post request, for example "2026-04-15T15:00:00Z". Publora will hold the post and publish to all specified platforms simultaneously at the scheduled time. You can schedule up to 30 days in advance. See the scheduling guide for timezone handling best practices.

Further Reading

Related Articles