canonical: https://jentic.com/apis/multi-upload-tool.com/multi-upload-tool

# Multi Upload Tool API

The Multi Upload Tool API publishes a video, photo, or text post once to one or many connected social accounts on TikTok, YouTube, Instagram, Facebook, LinkedIn, Pinterest, Bluesky, Threads, and X, immediately or on a schedule. Posts can be validated in a dry run, held as drafts or pending approval, approved or sent back for changes, rescheduled, and retried when they fail. The API also covers connected-account management, per-account daily publishing limits, analytics with on-demand sync, media pools, webhooks with delivery replay, team members and invites, white-label connection links, short links, and custom domains.

## For AI agents

Publish or schedule video, photo, and text posts to TikTok, YouTube, Instagram, LinkedIn, X, and other connected accounts, run approval flows, and read per-account analytics.

## Scope

Does not edit video, generate captions, run paid ads, or read platform inbox messages. Use for publishing, scheduling, approving, and tracking social posts across connected accounts only.

## Capabilities

- Publish a video, photo, or text post to one connected account or to many accounts in one bulk call
- Schedule a post with schedule_date and reschedule or retry it later
- Dry-run a post against each platform's rules before publishing
- Hold posts as drafts or pending approval, then approve them or request changes
- Check each connected account's daily publishing limits and platform capabilities
- Read analytics across all connected accounts or for one account, and trigger an immediate sync
- Subscribe webhooks to events such as upload.completed and upload.failed, and replay a delivery

## Use cases

### AI social agent cross-posting a video

An AI agent asked to 'post this clip everywhere tomorrow morning' needs one call path instead of nine platform SDKs. Through Jentic the agent searches for 'publish a video to several social accounts', loads the Multi Upload Tool bulk upload operation with its input schema, and sends the accounts list, the video URL, a description, and a schedule_date, with the x-api-key token injected at call time. It then checks each upload's status to confirm the job was scheduled.

Example prompt: Call POST `/upload/validate` with accounts and a video URL, then POST `/upload/bulk` with the same accounts, a description, and schedule_date set to 2026-11-10T09:00:00Z

### Client approval before publishing

An agency drafts posts for a client and needs sign-off before anything goes live. Posts created with status pending_approval are only published once approved, through the approve route or a client review link created for a set of uploadIds. A reviewer can instead request changes with a comment, which keeps the post unpublished.

Example prompt: Create a review link with POST `/upload/review-links` for three pending uploadIds, then call POST `/upload/{id}/approve` on each one the client accepts

### Recovering failed uploads

Platform tokens expire and uploads fail. A monitor subscribed to upload.failed and connected_account.expired webhook events learns about failures as they happen, can list uploads filtered by status and platform, and can retry all failed uploads for an account or platform in one call once the account is reconnected.

Example prompt: Call GET /upload with status=failed and platform=instagram, then POST `/upload/retry-failed` with platform set to instagram

### Weekly cross-account analytics report

A creator wants one report across every channel. The analytics overview aggregates every connected account and can be filtered by tags, while the per-account analytics route returns one account's figures, and a sync route refreshes an account immediately instead of waiting for the nightly pass.

Example prompt: Call POST `/analytics/{connectedAccountId}/sync` for each account, then GET `/analytics/overview` and summarise the week by platform

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | `/upload` | Publish to one account |
| POST | `/upload/bulk` | Publish to many accounts |
| POST | `/upload/validate` | Validate a post as a dry run |
| GET | `/upload/{id}` | Get an upload |
| POST | `/upload/{id}/approve` | Approve a post |
| GET | `/accounts` | List connected accounts |
| GET | `/analytics/overview` | Analytics across connected accounts |
| POST | `/webhooks` | Create a webhook |

## Key resources

- **Connected accounts** — List, inspect, and disconnect social accounts, plus LinkedIn pages and Pinterest boards
- **Uploads** — Publish, bulk publish, validate, presign, reschedule, retry, submit, approve, and request changes on posts
- **Analytics** — Overview across accounts, per-account analytics, on-demand sync, and LinkedIn post commenters
- **Webhooks** — Create, enable, test, and delete webhooks, list deliveries, replay one, and rotate the signing secret
- **Teams and white-label** — Team members, invites, white-label connection links, short links, and custom domains
- **Pools** — Media pools with capacity checks and bulk media adds

## AI readiness

This API is usable in Jentic One now. Its AI-readiness score against Jentic's framework shows where it stands today and where improvements would make it even easier for agents to use.

- **Score:** 66 / 100
- **Maturity:** AI-Aware
- **Dimensions:**
  - Foundational Compliance: 82 / 100
  - Developer Experience & Jentic Compatibility: 63 / 100
  - AI-Readiness & Agent Experience: 52 / 100
  - Agent Usability: 93 / 100
  - Security: 50 / 100
  - AI Discoverability: 82 / 100
- **View full report:** https://jentic.com/apis/multi-upload-tool.com/multi-upload-tool/scorecard
- **How the score is calculated:** https://docs.jentic.com/reference/api-readiness-framework/overview/
- **More about the dimensions:** https://docs.jentic.com/reference/api-readiness-framework/specification/#dimensional-model-overview

### Score it yourself

Every API in the directory is allowlisted, so you can re-score it with no key required.

- **Score your own API:** https://jentic.com/scorecard.md
- **Scoring CLI agent skill:** https://github.com/jentic/jentic-api-scorecard/blob/main/skills/jentic-api-scorecard/SKILL.md

```sh
npx @jentic/api-scorecard-cli score <openapi-url>
```

## Why Jentic

- **Setup:** Wiring Multi Upload Tool by hand means sending a kmb_ token in x-api-key, handling the X-Team-ID header, presigning large media, and staying inside per-endpoint write limits. Through Jentic you install once, import Multi Upload Tool from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** The target account for a new post travels in the request body, so rules bound which operations your agent may call, not which social account it posts to. You choose the operations it may call, so destructive ones like disconnecting an account or removing a team member are not included unless you add them.
- **Credential handling:** Your Multi Upload Tool token is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'schedule a post to TikTok' or 'retry failed uploads', and Jentic returns the matching Multi Upload Tool operation with its input schema, including fields like accountId and schedule_date, so the agent builds a valid request.

## Related APIs

- **Buffer** — Social media scheduling for queued posts across channels
- **Bluesky AT Protocol API** — Native Bluesky protocol API for posting and reading feeds
- **Dub** — Link management with branded short links and click analytics

## FAQ

### What authentication does the Multi Upload Tool API use?

Per its OpenAPI spec, every operation uses an API token sent in the x-api-key header, in the form kmb_ followed by 64 hex characters. Tokens carry scopes such as posts:read, posts:publish, or analytics:read chosen at creation, and an unscoped token can target a team with the X-Team-ID header. Through Jentic the token is held by your own instance and injected at call time.

### What are the rate limits for the Multi Upload Tool API?

The OpenAPI spec states limits per IP and per endpoint group, returning 429 when exceeded: 50 requests per 15 minutes for POST /upload, and 20 requests per 15 minutes for POST `/upload/bulk` and destructive operations. Reads are typically 100 requests per 5 to 15 minutes, and one IP may present at most 10 distinct API tokens per hour.

### How do I publish a video larger than 100 MB with the Multi Upload Tool API?

A file part sent to POST /upload must stay under 100 MB because of an edge limit. For larger media, call POST `/upload/presign` to get upload URLs, put the bytes into storage, then pass the returned bucketUrl or accessUrl in the video, photo, or file field of the upload request.

### How do I schedule a post across several accounts through Jentic?

Search Jentic for 'publish a video to several social accounts', load the POST `/upload/bulk` operation, and execute it with the accounts list, the media, and a schedule_date. Check results with GET `/upload/{id}.` To run it on your own infrastructure, install Jentic One from its GitHub repo.

### Can I limit what my agent is allowed to do with the Multi Upload Tool API?

Yes. Write a rule that allows only POST `/upload/validate`, GET /upload, and GET /accounts, and the agent can check drafts and read status but cannot publish, disconnect an account, or remove team members. You can pair that with a token holding posts:write but not posts:publish, so anything it creates is held for approval, and every call is logged.

### Which platforms does the Multi Upload Tool API publish to?

The spec's Platform enum lists TikTok, YouTube, Instagram, Facebook, LinkedIn, Pinterest, Bluesky, Threads, and X. GET `/platforms/capabilities` returns what each platform supports, and text-only posts are accepted on Facebook, LinkedIn, Bluesky, and Threads.
