Media Upload API

Media upload API for images, videos, and documents

Upload media files to the bundle.social library, get an upload ID, and reference that ID in any post payload across all connected platforms.

Last updated: May 2026

API key authScheduled publishing14 platforms
Quick start
API request
1const formData = new FormData();2formData.append("file", fs.createReadStream("./product-launch.mp4"));3formData.append("teamId", "team_123");45const upload = await fetch("https://api.bundle.social/api/v1/upload", {6  method: "POST",7  headers: { "x-api-key": process.env.BUNDLE_SOCIAL_API_KEY },8  body: formData9});1011const { uploadId } = await upload.json();12// Reference uploadId in any post payload

Platform-by-platform media handling

Each platform has its own media upload endpoint, size limits, format requirements, and processing delays.
Re-uploading the same video to Instagram, TikTok, and YouTube means writing three separate upload flows.
Teams often block post creation on media upload status rather than decoupling the two steps.

What bundle.social handles

Upload media once and reference the upload ID in post payloads for any supported platform.
Media processing and format validation are handled by the library before the post is created.
Decouple uploads from post creation so your publishing pipeline stays unblocked.

Upload once, publish everywhere

Media should not be a bottleneck. Upload your assets to the bundle.social library and reference the same upload ID whether the post goes to Instagram, TikTok, YouTube, LinkedIn, or Pinterest.

Workflow

How it works

Connect accounts once, then create and schedule posts with channel-specific fields from one API.

01

Upload the file

POST the media file as multipart/form-data with your teamId and API key.

02

Store the upload ID

The response returns an uploadId. Store it alongside the creative brief or campaign asset.

03

Reference in post payloads

Include the uploadId in the data block of any scheduled post to attach the media.

Capabilities

Media upload built for production publishing pipelines

Upload once and reference the same asset across Instagram Reels, LinkedIn documents, and TikTok videos.

Direct file upload

POST media as multipart/form-data and receive a reusable uploadId in return with no extra steps.

Upload before publishing

Decouple asset delivery from post creation so the publishing pipeline stays non-blocking regardless of file size.

Platform format validation

The library validates file types and dimensions against platform requirements before the post is created.

One upload ID, many posts

Reference the same uploadId across multiple scheduled posts without reuploading the asset each time.

Carousel and document support

Upload multiple assets for carousel posts, PDF documents, and platform-specific media types in the same workflow.

Media library access from the dashboard

Marketing teams can browse and select uploaded assets without using the API directly.

Developer example

Upload a video and reference it in a post

Examples use bundle.social's public API shape: API key authentication, a post date, selected social account types, and platform-specific data.

TypeScript
API request
1// Step 1: Upload2const formData = new FormData();3formData.append("file", fs.createReadStream("./launch-video.mp4"));4formData.append("teamId", "team_123");56const upload = await fetch("https://api.bundle.social/api/v1/upload", {7  method: "POST",8  headers: { "x-api-key": process.env.BUNDLE_SOCIAL_API_KEY },9  body: formData10});11const { uploadId } = await upload.json();1213// Step 2: Use the upload ID in a scheduled post14await fetch("https://api.bundle.social/api/v1/post", {15  method: "POST",16  headers: {17    "x-api-key": process.env.BUNDLE_SOCIAL_API_KEY,18    "Content-Type": "application/json"19  },20  body: JSON.stringify({21    teamId: "team_123",22    postDate: "2026-05-14T10:00:00.000Z",23    status: "SCHEDULED",24    socialAccountTypes: ["INSTAGRAM", "TIKTOK"],25    data: {26      INSTAGRAM: { type: "REEL", text: "Launch week is here.", uploadIds: [uploadId] },27      TIKTOK: { type: "VIDEO", uploadIds: [uploadId], privacyLevel: "PUBLIC_TO_EVERYONE" }28    }29  })30});

Supported content

ImagesVideosDocumentsCarouselsReelsShorts

Honest limitations

  • Platform-specific size limits, codecs, and duration caps still apply at post creation time.
  • Uploaded media is stored in the bundle.social library and associated with your team.
  • Media processing may take a short time before the upload ID can be used in a post.

Guarantees

Developer-first infrastructure

2% error rate

We handle the platform edge cases, media processing, and rate limits so your requests succeed.

Verbose errors

When native APIs fail, we return human-readable error messages and actionable recovery steps.

Flat pricing

No per-post counting. Predictable pricing for teams managing many users, workspaces, and connected accounts.

Same-day support

Direct access to the engineers building the API. We respond to technical issues the same day. Sometimes the same hour. Test us c;

FAQ

Questions developers ask before building

Can I upload the same file and use it on multiple platforms?

Yes. Once you have an upload ID, you can reference it in post payloads for any supported platform that accepts that media type.

What file formats are supported?

Common image formats (JPG, PNG, WebP) and video formats (MP4, MOV) are supported. Check platform-specific requirements for size and duration limits.

Do I upload before or after creating the post?

Before. Upload your media first to get an upload ID, then include that ID in the post creation request.

What happens if the upload fails?

The /api/v1/upload endpoint returns an error. Retry the upload independently before creating the post to keep the two steps cleanly separated.

Can I upload from a URL instead of a local file?

Yes. The API supports URL-based media ingestion through /api/v1/upload/from-url.