Upload Pools API
Upload Pools let you define recurring time slots and queue videos that are dispatched automatically. This page documents all public API endpoints for managing pools and their queues.
Base URL
https://api.multi-upload-tool.com/api/v1
Authentication
All requests require an API token:
x-api-key: YOUR_API_TOKENList Pools
Retrieve all pools belonging to your account (or team).
Endpoint
GET /pools
Example Request
curl https://api.multi-upload-tool.com/api/v1/pools \
-H "x-api-key: YOUR_API_TOKEN"Example Response
{
"success": true,
"pools": [
{
"id": 1,
"name": "Daily TikTok",
"timezone": "Europe/Paris",
"isActive": true,
"slots": [
{
"id": 10,
"time": "08:00",
"days": [1, 2, 3, 4, 5],
"accountIds": ["42"]
},
{
"id": 11,
"time": "18:00",
"days": [1, 2, 3, 4, 5],
"accountIds": ["42"]
}
],
"_count": { "items": 14 }
}
]
}Get Pool
Retrieve a single pool by ID.
Endpoint
GET /pools/:id
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | Pool ID |
Example Request
curl https://api.multi-upload-tool.com/api/v1/pools/abc123 \
-H "x-api-key: YOUR_API_TOKEN"Check Capacity
Preview how many days your current queue will last and whether adding more videos would exceed plan limits.
Endpoint
GET /pools/:id/capacity?count=N
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
count | number | No | Number of videos you’re about to add. Default 1. |
Example Request
curl "https://api.multi-upload-tool.com/api/v1/pools/1/capacity?count=20" \
-H "x-api-key: YOUR_API_TOKEN"Example Response
{
"success": true,
"queued": 5,
"slotsPerDay": 2,
"daysOfContent": 2,
"afterAdd": {
"queued": 25,
"daysOfContent": 12
},
"warning": null
}If adding the requested videos would exceed your plan quota, a
warningstring is returned. You should display this to the user before confirming the upload.
Add Video or Carousel to Queue
Add a video or photo carousel to a pool’s queue. Items are dispatched in the order they were added (FIFO).
Endpoint
POST /pools/:id/videos
Content-Type
multipart/form-data
The API works the same way as POST /upload: you send the file(s) directly and the API uploads them to storage internally. Only the resulting storage URLs are kept.
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
video | File | One of | A single video file (mp4, webm, mov…). |
photo | File | File[] | One of | One or more images for a photo carousel. Repeat the field for multiple images. |
title | string | Yes | Post title / caption. |
description | string | No | Additional description. |
metadata | string | No | JSON-encoded platform-specific options (see below). |
Provide either
videoorphoto— not both. For carousels, all images are uploaded and the extra URLs are automatically stored aschildrenKeysfor dispatch.
The metadata field
Pass a JSON string with platform-specific options applied at dispatch time:
{
"privacy_level": "PUBLIC_TO_EVERYONE",
"disable_comment": false,
"is_aigc": false
}Refer to each platform’s upload documentation for available options.
Example — single video
curl -X POST https://api.multi-upload-tool.com/api/v1/pools/1/videos \
-H "x-api-key: YOUR_API_TOKEN" \
-F "video=@/path/to/video.mp4" \
-F "title=My awesome video #fyp" \
-F "description=Check this out" \
-F 'metadata={"privacy_level":"PUBLIC_TO_EVERYONE","disable_comment":false}'Example — photo carousel (3 images)
curl -X POST https://api.multi-upload-tool.com/api/v1/pools/1/videos \
-H "x-api-key: YOUR_API_TOKEN" \
-F "photo=@/path/to/image1.jpg" \
-F "photo=@/path/to/image2.jpg" \
-F "photo=@/path/to/image3.jpg" \
-F "title=My carousel post" \
-F "description=Swipe through!"Example Response
{
"success": true,
"added": 1,
"items": [
{ "id": 101, "position": 6, "status": "queued", "title": "My carousel post" }
]
}List Queue Items
Retrieve the list of videos in a pool’s queue.
Endpoint
GET /pools/:id/videos
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | No | Filter by status: queued, dispatched, skipped. |
Example Request
curl "https://api.multi-upload-tool.com/api/v1/pools/1/videos?status=queued" \
-H "x-api-key: YOUR_API_TOKEN"Example Response
{
"success": true,
"items": [
{
"id": 101,
"position": 1,
"status": "queued",
"title": "Video 1",
"description": "Check this out",
"createdAt": "2026-03-15T10:00:00Z"
}
]
}Remove Queue Item
Remove a video from the queue. Only queued items can be removed — dispatched items cannot be undone.
Endpoint
DELETE /pools/:id/videos/:itemId
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | Pool ID |
itemId | number | Queue item ID |
Example Request
curl -X DELETE https://api.multi-upload-tool.com/api/v1/pools/1/videos/101 \
-H "x-api-key: YOUR_API_TOKEN"Example Response
{ "success": true }Clear Queue
Remove all queued items from a pool’s queue. Dispatched and skipped items are not affected.
Endpoint
DELETE /pools/:id/videos
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | Pool ID |
Example Request
curl -X DELETE https://api.multi-upload-tool.com/api/v1/pools/abc123/videos \
-H "x-api-key: YOUR_API_TOKEN"Example Response
{
"success": true,
"removed": 5
}Bulk Add Videos (JSON)
Add multiple videos to a pool’s queue using URLs (no file upload). Useful for adding pre-uploaded or external videos.
Endpoint
POST /pools/:id/videos/bulk
Content-Type
application/json
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
items | array | Yes | Array of video objects (min 1, max 50). |
items[].title | string | Yes | Post title / caption. |
items[].videoUrl | string | Yes | URL of the video file. |
items[].description | string | No | Additional description. |
items[].metadata | string | No | JSON-encoded platform-specific options. |
Example Request
curl -X POST https://api.multi-upload-tool.com/api/v1/pools/abc123/videos/bulk \
-H "x-api-key: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"title": "Video 1",
"videoUrl": "https://storage.example.com/video1.mp4",
"metadata": "{\"privacy_level\":\"PUBLIC_TO_EVERYONE\"}"
},
{
"title": "Video 2",
"videoUrl": "https://storage.example.com/video2.mp4"
}
]
}'Example Response
{
"success": true,
"added": 2,
"items": [
{ "id": 102, "position": 7, "status": "queued", "title": "Video 1" },
{ "id": 103, "position": 8, "status": "queued", "title": "Video 2" }
]
}Item status reference
| Status | Description |
|---|---|
queued | Waiting for the next available slot. |
dispatched | Successfully posted to the social platform. |
skipped | Slot fired but item was not posted (quota, platform error, etc.). |
Error reference
| HTTP | Code | Description |
|---|---|---|
| 401 | UNAUTHORIZED | Missing or invalid API token. |
| 403 | FORBIDDEN | Pool belongs to a different user/team. |
| 404 | NOT_FOUND | Pool or item not found. |
| 429 | RATE_LIMIT | Too many requests. |
| 400 | VALIDATION | Invalid body parameters — details in errors[]. |