Skip to main content

X (Twitter) Upload Guide

Post text updates, images and videos to X (formerly Twitter) using the IndReelForge API.

Supported Content Types​

TypeEndpointNotes
Text postPOST /api/upload_textOver 280 characters is posted automatically as a thread of replies
VideoPOST /api/uploadMP4, up to 512 MB
Image (single or multi)POST /api/upload_photosUp to 4 images

Pricing & Limits​

Every plan, including Free, includes 1 free X (Twitter) post per calendar month (resets on the 1st, IST). For more, add the X (Twitter) posting add-on: ₹299/month or ₹2,499/year (+18% GST), which includes 300 X posts per month (annual subscribers also get 300 per month). It can be attached to any plan, including Free — buy it from Dashboard → Billing → X add-on.

  • One successful publish of an upload to X = 1 post. An auto-threaded long text counts as 1.
  • Failed publishes don't count.
  • Team members post against the workspace owner's allowance.
  • The limit is enforced when you create the upload and again at publish time, so scheduled and queued X posts that exceed the allowance fail on X (other platforms in the same upload still publish).

Check your allowance​

GET https://api.indreelforge.com/api/x-allowance

Works with an API key or a dashboard session.

curl https://api.indreelforge.com/api/x-allowance \
-H 'Authorization: Apikey YOUR_KEY'
{
"month": "2026-10",
"used": 1,
"free_limit": 1,
"addon_active": false,
"addon_limit": 0,
"limit": 1,
"remaining": 0,
"resets_at": "2026-10-31T18:30:00.000Z",
"addon": null
}

addon is null without the add-on, otherwise { id, status, billing_cycle, current_period_end, cancel_at_period_end }.

Over-allowance errors (HTTP 402)​

When an upload targets X and no X posts remain this month, the request is rejected with HTTP 402:

{
"error": "You have used your free X post for this month. Add the X add-on (₹299/mo, 300 posts) to keep posting to X.",
"message": "You have used your free X post for this month. Add the X add-on (₹299/mo, 300 posts) to keep posting to X.",
"error_code": "X_ADDON_REQUIRED",
"code": "X_ADDON_REQUIRED",
"platform": "x",
"upgrade_url": "/dashboard/billing#x-addon",
"x_allowance": { "month": "2026-10", "used": 1, "limit": 1, "remaining": 0 }
}
Statuserror_codeMeaningFix
402X_ADDON_REQUIREDThe free X post for this month is used and there's no X add-onAdd the X add-on at /dashboard/billing#x-addon, or wait for the 1st
402X_MONTHLY_LIMIT_REACHEDAll 300 X posts included in the X add-on are used this monthWait for the allowance to reset on the 1st

For scheduled or queued posts, the same codes appear in platform_errors.x on the upload when it's published.

Video Requirements​

RequirementValue
FormatMP4 (H.264 + AAC)
Max duration2 minutes 20 seconds
Max file size512 MB
Recommended resolution1280×720 or 1920×1080
Aspect ratio1:2.39 to 2.39:1

Post a Text Update​

curl -X POST https://api.indreelforge.com/api/upload_text \
-H 'Authorization: Apikey YOUR_KEY' \
-F 'user=my-brand' \
-F 'title=We just hit 10,000 users! 🎉 #milestone' \
-F 'platform[]=x'

Post a Video​

curl -X POST https://api.indreelforge.com/api/upload \
-H 'Authorization: Apikey YOUR_KEY' \
-F 'user=my-brand' \
-F 'title=New product demo — watch till the end' \
-F 'platform[]=x' \
-F 'video_url=https://your-cdn.com/demo.mp4'

X-Specific Fields​

FieldDescription
titleTweet text (or thread opener)
x_title / x_descriptionOverride the text used for X only
reply_to_idNumeric Tweet ID to reply to. For an auto-threaded long text, only the first tweet replies to it. (x_reply_to is accepted as a legacy alias.)
direct_message_deep_linkhttps:// link that adds a "Message" button to the tweet (x_direct_message_deep_link is accepted as a legacy alias)

Caption Length​

  • Text-only posts (/api/upload_text) longer than 280 characters are split at word boundaries into a thread of replies. No text is lost.
  • Posts with media (video or images) are a single tweet, so the caption can be at most 280 characters. The caption is title + a blank line + description (or x_title / x_description when you set them). If it's longer, the upload is rejected with 400 and error_code: "X_CAPTION_TOO_LONG" (the response includes limit and length). Shorten the caption, or set a shorter x_title just for X.

Post to X + LinkedIn Simultaneously​

curl -X POST https://api.indreelforge.com/api/upload_text \
-H 'Authorization: Apikey YOUR_KEY' \
-F 'user=my-brand' \
-F 'title=Excited to share our latest research!' \
-F 'platform[]=x' \
-F 'platform[]=linkedin'

One API call, two platforms.

Connect X​

  1. Dashboard → Profiles → select your profile
  2. Click Connect next to X
  3. Authorise via the X OAuth popup
  4. Return — status shows Connected
X API Access

X requires Elevated API access for video uploads. Basic text posts work with standard access. If video uploads fail with a permissions error, check your X Developer App settings.

Troubleshooting​

ErrorCauseFix
duplicate_contentIdentical tweet recently postedX blocks duplicate tweets; vary the text
video_too_longOver 2 min 20 secTrim the video
rate_limitToo many posts in a short windowAdd delays between posts
media_upload_failedFile not H.264+AACRe-encode the video
X_ADDON_REQUIRED (HTTP 402)Free X post for this month already usedAdd the X add-on (₹299/mo, 300 posts) at Billing → X add-on
X_MONTHLY_LIMIT_REACHED (HTTP 402)X add-on's 300 posts used this monthWait for the reset on the 1st (IST)