Publishing

Platform limits

Character limits, media constraints, and feature availability per platform.

Each social platform enforces different character limits, media requirements, and available features. This page is your quick reference before you schedule content.

Character limits

Platform Caption limit What happens if exceeded
Twitter / X 280 characters Pre-flight validation rejects the slot (400 error)
LinkedIn 3,000 characters Pre-flight validation rejects the slot
Facebook No hard limit No character validation; platform may truncate in some surfaces
Instagram 2,200 characters No pre-flight validation (Instagram counts differ from byte counts); long captions are truncated in feeds

Pre-flight validation runs before any platform API call. A slot that fails validation is marked failed immediately without using any retries or credits.

Media support

Platform Images Max images Image size limit Video Alt text
Twitter / X 4 5 MB per image ❌ Not supported ✅ (via metadata API)
LinkedIn 1 Platform limit ❌ Not supported
Facebook Multiple Platform limit ❌ Not supported
Instagram 1 (for feed posts) Platform limit ❌ Not supported

WARNING

Video is not yet supported on any platform. Slots with contentType: "video" will fail at validation with a non-retryable error. Do not schedule video content until this is announced.

Twitter-specific notes

Alt text: To set alt text for Twitter images, include the mediaAltText object in your slot:

{
  "mediaIds": ["media_abc123"],
  "mediaAltText": {
    "media_abc123": "A chart showing monthly user growth"
  }
}

Alt text is submitted to Twitter's media metadata API between the FINALIZE step and the tweet creation. It does not affect character count.

Scopes: Twitter requires media.write scope to attach images. If your connected account doesn't have this scope, image posts will fail with a 403. Reconnect the account (the OAuth flow requests all required scopes).

Refresh: Twitter tokens last approximately 2 hours. Vlozi refreshes them automatically. You should not need to reconnect unless you revoke access in Twitter's developer settings.

LinkedIn-specific notes

LinkedIn issues OAuth tokens valid for approximately 60 days with no programmatic refresh endpoint. When the token expires:

  • All pending posts to this LinkedIn connection will fail with TOKEN_EXPIRED
  • The connection flips to Expired status in the dashboard
  • You must reconnect the account manually

Set a reminder to reconnect every 45–50 days to avoid gaps in publishing.

Metrics: LinkedIn's public API returns limited engagement data compared to Twitter. Impression counts and detailed analytics are not available via the standard API tier.

Meta (Facebook + Instagram) notes

Both Facebook and Instagram use the same Meta Graph API and share the 60-day token lifecycle.

Instagram: Requires a Business Account linked to a Facebook Page. Personal accounts are not supported. You must grant access to both instagram_basic and pages_manage_posts scopes in the OAuth flow.

Instagram carousels: Multiple-image carousel posts are not yet supported. Only single-image posts are available.

Content types by platform

Content type Twitter LinkedIn Facebook Instagram
text
image
link ⚠️ Links in captions are not clickable
video
carousel
story N/A

Platform API rate limits

Vlozi respects each platform's rate limits. When a 429 response is returned, the publish job reads the Retry-After or x-rate-limit-reset header and schedules a retry at the appropriate time (up to the maximum retry delay of 15 minutes).

If the rate limit window is longer than 15 minutes, the message will move toward the dead-letter queue. This is rare in normal usage but can happen during heavy batch publishing.

Tip: If you need to publish a large number of posts in a short window, space them at least 2–5 minutes apart to avoid rate limit cascades.

Content Engine · PublishingEdit on GitHub