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) |
| 3,000 characters | Pre-flight validation rejects the slot | |
| No hard limit | No character validation; platform may truncate in some surfaces | |
| 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) |
| ✅ | 1 | Platform limit | ❌ Not supported | ❌ | |
| ✅ | Multiple | Platform limit | ❌ Not supported | ❌ | |
| ✅ | 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 | ||||
|---|---|---|---|---|
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.