The Problem: One Size Doesn't Fit All
A caption that works on LinkedIn sounds stiff on TikTok. A tweet-length post wastes Instagram's 2,200-character allowance. And YouTube needs both a title and a description — two separate fields that most tools ignore.
Most social media tools give you one text box and send the same text everywhere. Some tools offer AI, but only in the dashboard — not through the API. CodivUpload solves both problems: AI-generated captions that are individually optimized for each platform, available both in the dashboard UI and via REST API.
| Platform | Char Limit | AI Optimizes For |
|---|---|---|
| 2,200 chars | Caption + 5-15 hashtags, reel/story tone | |
| X (Twitter) | 280 chars | Concise, punchy, 1-3 hashtags max |
| YouTube | 5,000 chars + title | SEO-friendly title (100 chars) + description |
| 3,000 chars | Professional tone, industry hashtags | |
| TikTok | 2,200 chars | Trending language, viral hooks, 5-10 hashtags |
Four AI Modes
The AI Assistant supports four generation types. Each mode returns per-platform content — you always get a separate, optimized result for every platform you select.
Generate Caption
captionEnter a topic and get platform-optimized captions. Each platform gets its own caption adapted to character limits and audience culture.
Request
POST /v1/ai/generate
{ "type": "caption", "topic": "Launching our new mobile app", "platforms": ["instagram", "x", "linkedin"], "tone": "professional" }Response
{
"instagram": {
"caption": "It's here. Our mobile app is live — manage your content, schedule posts, and track analytics from anywhere. Download link in bio.",
"hashtags": "#mobileapp #socialmedia #contentcreator #launchday #newapp"
},
"x": {
"caption": "Our mobile app just went live. Schedule posts, track analytics, manage content — all from your phone.",
"hashtags": "#launch #app"
},
"linkedin": {
"caption": "Excited to announce the launch of our mobile application. Built for marketing teams who need to manage multi-platform content on the go. The app includes full scheduling, analytics, and team collaboration features.",
"hashtags": "#productlaunch #marketingtools #mobilefirst"
}
}Improve Text
improvePaste your existing caption and the AI will enhance the wording, fix grammar, optimize for each platform, and add relevant hashtags.
Request
POST /v1/ai/generate
{ "type": "improve", "text": "we launched new app check it out", "platforms": ["instagram"], "tone": "casual" }Response
{
"instagram": {
"caption": "We just dropped something big. Our new app is live and it's going to change how you create content. Go check it out (link in bio, obviously).",
"hashtags": "#newapp #contentcreation #socialmediamanagement #creators"
}
}Repurpose Content
repurposeTake a blog post, email newsletter, or any long-form text and convert it into platform-specific social media posts. Each platform gets a version that matches its format.
Request
POST /v1/ai/generate
{ "type": "repurpose", "text": "We analyzed 10,000 social media posts and found that posts with 5-10 hashtags get 2.3x more engagement than posts with 20+. The sweet spot varies by platform...", "platforms": ["x", "linkedin", "threads"] }Response
{
"x": {
"caption": "We analyzed 10K posts. Result: 5-10 hashtags = 2.3x more engagement than 20+. Less is more.",
"hashtags": "#socialmedia #data"
},
"linkedin": {
"caption": "Our analysis of 10,000 social media posts revealed a counterintuitive finding: posts with 5-10 hashtags consistently outperform posts with 20+ by a factor of 2.3x in engagement rate. The conventional wisdom of 'more hashtags = more reach' doesn't hold up in the data.",
"hashtags": "#marketingdata #socialmediamarketing #contentresearch"
},
"threads": {
"caption": "Analyzed 10K posts. 5-10 hashtags = 2.3x more engagement than 20+. Stop hashtag stuffing, it's hurting your reach.",
"hashtags": ""
}
}Hashtags Only
hashtagsGenerate 30 hashtags grouped by reach: high-volume (broad), medium (good engagement), and niche (targeted). Optimized for the selected platforms.
Request
POST /v1/ai/generate
{ "type": "hashtags", "topic": "coffee shop branding", "platforms": ["instagram", "tiktok"] }Response
{
"high": ["#coffee", "#coffeeshop", "#coffeelover", "#cafe", "#barista", "#coffeetime", "#latteart", "#espresso", "#coffeeaddict", "#morningcoffee"],
"medium": ["#coffeeshopvibes", "#coffeebrand", "#cafedesign", "#specialtycoffee", "#thirdwavecoffee", "#coffeeculture", "#localcoffee", "#coffeeroasters", "#brewmethod", "#coffeeaesthetic"],
"niche": ["#coffeeshopbranding", "#cafemarketing", "#coffeebusiness", "#independentcafe", "#coffeepackaging", "#brandedcoffee", "#coffeeshopdesign", "#cafebranding", "#coffeestartup", "#smallbatchcoffee"]
}Tone Selection
Every generation request accepts a tone parameter. The AI adapts vocabulary, sentence structure, and emoji usage to match the selected tone — across all platforms in a single request.
Casual
Relaxed, conversational, everyday language
Professional
Formal, business-appropriate, authoritative
Funny
Humorous, witty, meme-worthy
Inspirational
Motivational, uplifting, call-to-action
Gen Z
Trending slang, internet culture, viral tone
Formal
Corporate communications, press release style
Multi-Language Generation
Pass a language parameter and the AI writes everything in that language — captions, hashtags, and titles. Supported languages: English, Turkish, Arabic, Spanish, French, German, Portuguese, Japanese, Korean, and Chinese.
POST /v1/ai/generate
{
"type": "caption",
"topic": "Summer sale announcement",
"platforms": ["instagram"],
"tone": "casual",
"language": "tr"
}
// Response (Turkish):
{
"instagram": {
"caption": "Yaz indirimleri basliyor! Tum urunlerde %40'a varan indirim. Biyografimizdeki linkten alisverise baslayin.",
"hashtags": "#yazindirimi #indirim #kampanya #alisveris #firsatlar"
}
}Per-Platform Text Overrides
When the AI generates content, each platform gets its own caption. In the dashboard, clicking “Apply All” writes each caption to the corresponding platform's override field. When the post is published, each platform uses its own text instead of the shared description.
You can also set these overrides manually via the API — useful for automation pipelines where you want different text per platform without AI:
POST /v1/posts
{
"profile_name": "my-brand",
"platforms": ["instagram", "x", "youtube"],
"post_type": "video",
"media_urls": ["https://cdn.example.com/video.mp4"],
"description": "Default caption for all platforms",
// Per-platform overrides:
"instagram_text": "New video just dropped. Full tutorial in bio.",
"x_text": "Just shipped this. Thread below.",
"youtube_title": "How to Build a Content Pipeline in 2026",
"youtube_text": "Full tutorial on setting up an automated content pipeline..."
}| Parameter | Max | Description |
|---|---|---|
| x_text | 280 | Override for X (Twitter) |
| youtube_title | 100 | Override title for YouTube |
| youtube_text | 5,000 | Override description for YouTube |
| instagram_text | 2,200 | Override caption for Instagram |
| facebook_text | 63,206 | Override text for Facebook |
| linkedin_text | 3,000 | Override text for LinkedIn |
| tiktok_text | 2,200 | Override caption for TikTok |
| threads_text | 500 | Override text for Threads |
| pinterest_text | 500 | Override description for Pinterest |
| bluesky_text | 300 | Override text for Bluesky |
| gbp_text | 1,500 | Override text for Google Business |
Best Time to Post — Auto-Scheduling
Not sure when to publish? CodivUpload analyzes your last 90 days of posting data to find the hours and days when your content performs best. You can use this in two ways:
- Dashboard: When scheduling a post, a “Best time to post” badge appears showing your optimal hour and day. Click it to auto-fill the date picker.
- API: Set
schedule_best_time: truein your POST /v1/posts request. The system automatically schedules the post for the next optimal time slot — no manual date required.
POST /v1/posts
{
"profile_name": "my-brand",
"platforms": ["instagram", "x", "linkedin"],
"post_type": "image",
"media_urls": ["https://cdn.example.com/photo.jpg"],
"description": "Our latest update is live!",
"schedule_best_time": true
}
// Response:
{
"id": "post_abc123",
"status": "scheduled",
"scheduled_date": "2026-04-22T14:00:00.000Z",
"message": "Scheduled for Tue at 2:00 PM UTC (best time based on 90-day analytics)"
}The analytics endpoint GET /v1/analytics/best-times returns the full hourly and daily breakdown if you want to build your own scheduling logic.
Using AI in the Dashboard
In the post creation form, click the “AI Assistant” button next to the caption field. This opens the AI panel where you can:
- 1Select a generation mode (Generate, Improve, Repurpose, or Hashtags)
- 2Enter your topic or paste existing text
- 3Choose a tone (Casual, Professional, Funny, etc.)
- 4Select the output language
- 5Click Generate — each selected platform gets its own caption
- 6Click "Apply All" to write each caption to its platform override, or "Apply" on individual platforms
When you publish, each platform uses its own override text. If you didn't set an override for a platform, it falls back to the shared description field — so you always have a default.
API and MCP Integration
The AI endpoint is available at POST /v1/ai/generate and requires authentication (JWT or API key). It counts against your plan's AI generation quota.
Since the MCP server reads from the OpenAPI spec, the generate_ai_content tool is automatically available to AI agents. A Claude or ChatGPT agent can generate captions and publish — all in one conversation.
// TypeScript SDK example
import { CodivUpload } from "codivupload";
const client = new CodivUpload({ apiKey: "your-api-key" });
// Step 1: Generate captions
const ai = await client.ai.generate({
type: "caption",
topic: "Product launch announcement",
platforms: ["instagram", "x", "linkedin"],
tone: "professional",
});
// Step 2: Publish with per-platform overrides
await client.posts.create({
profile_name: "my-brand",
platforms: ["instagram", "x", "linkedin"],
post_type: "image",
media_urls: ["https://cdn.example.com/launch.jpg"],
description: "Default caption",
instagram_text: ai.result.instagram.caption + "\n\n" + ai.result.instagram.hashtags,
x_text: ai.result.x.caption,
linkedin_text: ai.result.linkedin.caption,
});AI Generation Limits by Plan
AI generations are metered per workspace per month. Each API call or dashboard generation counts as one generation, regardless of how many platforms are included.
| Plan | AI Generations | Price |
|---|---|---|
| Free | 10/month | $0 |
| Starter | 50/month | $20/mo |
| Pro | 200/month | $40/mo |
| Business | 1,000/month | $140/mo |
| Enterprise | Unlimited | $400/mo |
How This Compares
Most social media tools offer AI only in the dashboard — not through the API. CodivUpload is one of the few platforms where the same AI capabilities are available via REST API and MCP, making it possible to build fully automated content pipelines.
| Feature | CodivUpload | Buffer | Hootsuite |
|---|---|---|---|
| AI in Dashboard | |||
| AI via API | - | - | |
| AI via MCP | - | - | |
| Per-platform captions | - | - | |
| Multi-language AI | - | ||
| Tone selection | |||
| Content repurposing | - |