Works with all AI agents

Connect your AI agent

Choose your AI agent and connect in seconds.

Add to Claude

Works on every Claude plan, including free. Full Claude guide

  1. 1

    Add to Claude

    One click from Claude’s connector directory.

  2. 2

    Sign up or sign in

    Takes seconds, then you’re sent straight back.

  3. 3

    Ask Claude

    “Plan and schedule my posts for next week.”

PostEverywhere AI Caption Guide

AI-generated social media captions tuned per platform, respecting character limits, hashtag conventions, and emoji style.

Generates 1-5 caption variants for a social media post from a topic + tone + platform. Companion to /v1/ai/generate-image: together they let an MCP agent compose an entire post in two API calls.

Captions respect per-platform character limits and follow each platform's hashtag conventions automatically:

Platform Hard limit Hashtag style
X / Twitter 280 chars 1-3 hashtags at end
Bluesky 300 chars 1-3 hashtags
Threads 500 chars 1-3 hashtags
Pinterest 500 chars No hashtags (uses natural-language search)
YouTube 1,000 chars 1-3 hashtags
Instagram 2,200 chars 5-10 hashtags at end
TikTok 2,200 chars 5-10 hashtags
LinkedIn 3,000 chars 2-3 hashtags (LinkedIn discourages heavy use)
Facebook 5,000 chars 1-3 hashtags
WordPress 5,000 chars No hashtags

Generate a caption from a prompt: POST /v1/ai/generate-caption

curl -X POST https://app.posteverywhere.ai/api/v1/ai/generate-caption \
  -H "Authorization: Bearer $POSTEVERYWHERE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "topic":    "Black Friday sale on running shoes — 30% off through Monday",
    "platform": "instagram",
    "tone":     "enthusiastic",
    "length":   "medium",
    "count":    3
  }'

Requires the ai scope. Costs 1 AI credit per returned caption.

Controlling tone, length and platform

Field Type Default Description
topic string (required) N/A What the post should be about (max 1,000 chars).
platform string none If set, applies platform-specific length + style rules. Omit for generic.
tone string professional professional | casual | witty | enthusiastic | urgent | inspirational
length string medium short (80 chars) | medium (180 chars) | long (~400 chars)
include_hashtags boolean true Set false to omit hashtags entirely.
include_emojis boolean true Set false for emoji-free output.
count integer 1 Number of variants to return (1-5).

What the caption response returns

{
  "data": {
    "captions": [
      "🏃 30% OFF until Monday! Time to lace up. Our best running shoes — half a closet, all the comfort. Free shipping over $50. Link in bio.\n\n#blackfriday #runningshoes #sale #fitness #running",
      "BLACK FRIDAY MADNESS 🛍️ ...",
      "..."
    ],
    "platform":        "instagram",
    "tone":            "enthusiastic",
    "length":          "medium",
    "count_requested": 3,
    "count_returned":  3,
    "credits_used":    3,
    "credits_remaining": 197
  },
  "error": null,
  "meta": { "request_id": "a1b2c3d4", "timestamp": "2026-06-11T09:55:12.341Z" }
}

Caption generation errors

Code HTTP When
validation_error 400 Missing topic or topic > 1000 chars.
insufficient_credits 402 Not enough AI credits for the requested count. Response includes needed and available.
ai_no_content 502 OpenAI returned no content. Rephrase the topic and retry.

Pairing captions with generated images

const me = await client.me.get();
if (me.quota.ai_credits.limit - me.quota.ai_credits.used < 6) {
  showUpgrade();
  return;
}

// 1 image (~5 credits) + 1 caption (1 credit) = 6 credits.
const [image, captions] = await Promise.all([
  client.ai.generateImage({ prompt: 'Vibrant running shoes on a track' }),
  client.ai.generateCaption({
    topic: 'Black Friday — 30% off running shoes',
    platform: 'instagram',
    tone: 'enthusiastic',
    count: 1,
  }),
]);

await client.posts.create({
  content: captions.captions[0],
  account_ids: [igAccountId],
  media_ids: [image.media_id],
  scheduled_for: '2026-11-29T10:00:00Z',
});

What caption generation costs in credits

  • Tone influences word choice. professional produces measured copy with full sentences. witty introduces wordplay. enthusiastic uses exclamation marks and energy words. Match tone to brand voice.
  • Multi-platform posting. If you're posting to multiple platforms with different character limits, generate ONE caption sized for the shortest (X/Bluesky). Or call this endpoint per-platform.
  • Hashtag placement. Hashtags always land at the end of the caption (Instagram convention), unless you set include_hashtags: false.
  • Pinterest is special: include_hashtags is ignored. Pinterest uses natural-language search, not hashtags, so they're omitted.

Related: the ai scope · media limits per platform · testing without publishing · AI credits per plan

Full reference: POST /v1/ai/generate-caption and POST /v1/ai/generate-image.