Skip to main content

TL;DR / Key Takeaways

  • Instagram captions max out at 2,200 characters, but only the first 125 show before “more.”
  • Bios have a 150 character limit - every word counts.
  • Reels descriptions follow the same 2,200 limit but perform better when shorter.
  • bundle.social API validates character limits before posting - no more silent truncation.
  • Cross-posting? Our API adjusts content per platform automatically.
You’ve spent 20 minutes crafting the perfect caption. You hit post. Instagram cuts it off mid-sentence. Here’s the thing: Instagram doesn’t warn you when you’re about to exceed a limit. It just… stops. And the preview on your phone often looks different from what your followers actually see. I’ve seen marketing teams at companies like Netflix lose engagement because their CTAs got buried below the fold. The fix isn’t rocket science - you just need to know the numbers. And if you’re using an API, you need that API to handle limits properly.

Instagram Caption Character Limit

Instagram captions can be up to 2,200 characters long. That’s roughly 300-400 words depending on your writing style. But here’s what most guides don’t tell you: the visible preview before users tap “more” is only about 125 characters on mobile. That’s your hook. Everything else is bonus content for people who actually care. According to Later’s social media research, captions between 1-50 characters get the highest engagement rates. Longer captions (2,000+) work well for educational content but tank for promotional posts. The practical rule: Front-load your message. Put the CTA or key point in the first two lines. Treat everything after character 125 as “extra credit.”
Heads up: Hashtags count toward your character limit. If you’re using 30 hashtags at ~15 characters each, that’s 450 characters gone before you’ve said anything useful.

Instagram Bio Character Limit

Your bio gets 150 characters. That’s it. No exceptions. For context, this sentence is already 47 characters. You can see how fast it adds up. What fits in 150 characters:
  • A one-liner describing what you do
  • One emoji (if it adds value)
  • A CTA like “Link below” or “DM for collabs”
What doesn’t fit:
  • Your entire resume
  • Multiple CTAs
  • A mission statement
Pro tip: Use line breaks strategically. Instagram renders them, and they make your bio scannable. The character count stays the same, but readability improves.

Instagram Reels Description Limit

Reels descriptions follow the standard 2,200 character limit, but the display is different. On the Reels tab, only the first 55-60 characters show before truncation. In the main feed, you get slightly more - around 125, same as regular posts. From what I’ve seen, Reels with shorter descriptions (under 100 characters) perform better. The algorithm seems to favor content where users engage with the video itself rather than reading a novel underneath it.

Instagram Comment Character Limit

Comments have the same 2,200 character ceiling as captions. In practice, nobody reads a 2,000-character comment. If you need that much space, you’re probably writing a blog post, not a reply. The sweet spot for comments that actually get read? Under 100 characters. Quick, punchy, to the point.

Instagram Stories Text Limit

Stories don’t have an official public character limit for text overlays, but practically speaking, you’re limited by screen real estate. The text tool caps out around 2,200 characters (Instagram’s magic number), but if you actually type that much, it becomes unreadable. Aim for 150 characters max per text block to keep it legible on mobile screens.

Instagram Username and Name Limits

Two different things, two different limits:
FieldCharacter LimitNotes
Username (@handle)30 charactersLetters, numbers, periods, underscores only
Display Name30 charactersCan include spaces and special characters
The display name is searchable, so include relevant keywords. “John | Travel Photographer” is more discoverable than just “John Smith.”

Instagram DM Character Limit

Direct messages cap at 1,000 characters per message. If you’re doing outreach or customer support, this matters. Long messages get split awkwardly. Better to send two clear messages than one that gets chopped mid-thought.

All Instagram Character Limits (Quick Reference)

Here’s the complete table for quick reference:
Content TypeCharacter LimitVisible Preview
Caption2,200~125 before “more”
Bio150Full (always visible)
Comment2,200Varies by length
Reels Description2,200~55-60 on Reels tab
Stories Text~2,200Limited by screen space
Username30Full
Display Name30Full
DM1,000Full
Hashtags30 max per postN/A

How bundle.social Handles Character Limits

If you’re posting manually, counting characters is your problem. If you’re using an API, it should be the API’s problem. The bundle.social API validates character limits before sending to Instagram. If your caption exceeds 2,200 characters, you get a clear error response - not a silently truncated post. bundle.social create post interface showing character counter bundle.social shows 97/2200 characters in real-time. No more guessing. Here’s what that looks like when posting via API:
const response = await fetch('https://api.bundle.social/api/v1/post', {
  method: 'POST',
  headers: {
    'x-api-key': process.env.BUNDLE_API_KEY,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    teamId: 'team_123',
    socialAccountTypes: ['INSTAGRAM'],
    data: {
      INSTAGRAM: {
        type: 'POST',
        text: 'Your caption here - we validate it\'s under 2,200 chars',
        uploadIds: ['upload_abc']
      }
    }
  })
});
If you exceed the limit, you get:
{
  "error": "VALIDATION_ERROR",
  "message": "Instagram caption exceeds 2,200 character limit",
  "field": "data.INSTAGRAM.text",
  "limit": 2200,
  "actual": 2347
}
No silent failures. No truncated posts. No angry clients wondering why their CTA disappeared.
Important: Emojis count as 2 characters in most systems due to Unicode encoding. That fire emoji isn’t “1 character” - it’s eating into your limit more than you think. Our API counts correctly.

Cross-Platform Character Limits

If you’re posting to multiple platforms, limits vary significantly:
PlatformMain Post LimitAPI Validation
Instagram2,200Yes
Twitter/X280 (free) / 25,000 (Premium)Yes
LinkedIn3,000Yes
TikTok2,200Yes
Facebook63,206Yes
Threads500Yes
The bundle.social API lets you send one request with platform-specific content. Each platform gets validated against its own limits:
await bundle.post.postCreate({
  requestBody: {
    teamId: 'team_123',
    socialAccountTypes: ['INSTAGRAM', 'TWITTER', 'LINKEDIN'],
    data: {
      INSTAGRAM: {
        type: 'POST',
        text: 'Full 2,200 character caption for Instagram...',
        uploadIds: ['upload_123']
      },
      TWITTER: {
        text: 'Shorter 280 char version for Twitter'
      },
      LINKEDIN: {
        text: 'Professional version for LinkedIn with more detail...'
      }
    }
  }
});
One API call, three platforms, each with appropriate content. Check our platforms documentation for the full spec on each.

Why Character Limits Actually Help

Constraints breed creativity. When you only have 125 characters to hook someone, you can’t afford filler words. Every “In order to” becomes “To.” Every “Due to the fact that” becomes “Because.” Every “At this point in time” becomes “Now.” Tight character limits force you to respect your reader’s time. That’s not a limitation - that’s good writing.

Summary

Know your limits, front-load your message, and use tools that validate before posting. If you’re building automation or managing multiple accounts, the bundle.social API handles character validation so you don’t ship broken posts. Check the SDK for TypeScript or hit the REST API directly. Questions? Check our platform-specific docs for Instagram’s full API spec.