API Overview
The AnonMP4 API provides programmatic access to upload, manage, and stream video content. All API endpoints return JSON responses and support modern HTTP methods.
Base URL
https://anonmp4api.xyz/
Content Types
Request: multipart/form-data (uploads), application/json (data)
Response: application/json
Key API Features
- Upload videos up to 20 GB in size
- Support for all major video formats (MP4, AVI, MKV, MOV, etc.)
- Multi-audio streaming with multiple audio tracks for different languages
- No account registration required — completely anonymous uploads
| Method | Endpoint | Description |
|---|---|---|
| POST | /upload | Upload a video file |
| GET | /info/{video_id} | Get video metadata and streaming URLs |
Authentication
Currently, the API does not require authentication for basic operations. All uploads are anonymous by default.
Anonymous Usage
No registration or API keys required. Simply make HTTP requests to the endpoints listed below.
https://anonmp4api.xyz/upload
Upload a video file directly to the platform with optional metadata and privacy settings.
Request Parameters multipart/form-data
| Field | Type | Required | Description |
|---|---|---|---|
| file | file | Required | Video file (max 20 GB, video/* mime types) |
Example Request
curl -X POST "https://anonmp4api.xyz/upload" \ -F "file=@/path/to/video.mp4"
Success Response 200 OK
{
"success": true,
"video_id": "NLEusIzEvLs3s3B",
"title": "BigBuckBunny",
"thumbnail": "https://cdn.anonmp4.to/thumbs/NLEusIzEvLs3s3B.webp",
"watch_url": "https://anonmp4.to/v/NLEusIzEvLs3s3B",
"embed_url": "https://anonmp4.to/embed/NLEusIzEvLs3s3B",
"delete_url": "https://anonmp4.to/delete?id=NLEusIzEvLs3s3B&hash=uniqehash",
"upload_date": "2026-01-08T10:30:00Z",
"message": "File received and queued for processing"
}
/info/{video_id}
Retrieve detailed information about a specific video including metadata, streaming URLs, and current status.
URL Parameters
| Parameter | Type | Description |
|---|---|---|
| video_id | string | Unique video identifier returned at upload time |
Example Request
curl -X GET "https://anonmp4api.xyz/info/NLEusIzEvLs3s3B"
Success Response 200 OK
{
"success": true,
"title": "BigBuckBunny",
"duration": "09:56",
"watch_url": "https://anonmp4.to/v/NLEusIzEvLs3s3B",
"embed_url": "https://anonmp4.to/embed/NLEusIzEvLs3s3B",
"thumbnail": "https://cdn.anonmp4.to/thumbs/NLEusIzEvLs3s3B.webp",
"upload_date": "2025-12-28 18:01:38",
"privacy_type": "public",
"status": "active"
}
Error Codes
The API uses conventional HTTP response codes and returns detailed error information in JSON format.
Error Response Format
{
"success": false,
"error": {
"code": "E_INVALID_SIZE",
"message": "File size exceeds the 20GB limit",
"details": {
"max_size": 53687091200,
"received_size": 107374182400
}
}
}
HTTP Status Codes
| Status | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad Request — invalid parameters |
| 404 | Not Found — video does not exist |
| 413 | Payload Too Large — file exceeds size limit |
| 415 | Unsupported Media Type — invalid file format |
| 429 | Too Many Requests — rate limit exceeded |
| 500 | Internal Server Error |
API Error Codes
| Code | Description |
|---|---|
| E_NO_FILE | No file provided in upload request |
| E_INVALID_SIZE | File size exceeds 20 GB limit |
| E_INVALID_TYPE | File is not a supported video format |
| E_UPLOAD_FAILED | Upload processing failed |
| E_HANDLER_FAILED | Upload handler failed |
| E_VIDEO_NOT_FOUND | Requested video does not exist |
rclone Integration
Use rclone's HTTP backend to fetch video info, and the shell/Python scripts below to automate bulk uploads to AnonMP4 from any system that has rclone or curl installed.
rclone.conf — HTTP backend (read / metadata)
POST /upload.
[anonmp4] type = http url = https://anonmp4api.xyz no_slash = false
Fetch video metadata via rclone cat:
# Get video info JSON rclone cat anonmp4:info/NLEusIzEvLs3s3B
Bash — upload wrapper script
Save as anonmp4-upload.sh, make executable with chmod +x anonmp4-upload.sh, then run it.
#!/usr/bin/env bash
# anonmp4-upload.sh — Upload one or more videos to AnonMP4
# Usage: ./anonmp4-upload.sh video1.mp4 [video2.mkv ...]
set -euo pipefail
API_URL="https://anonmp4api.xyz/upload"
if [[ $# -eq 0 ]]; then
echo "Usage: $0 <file> [file2 ...]" >&2
exit 1
fi
for FILE in "$@"; do
if [[ ! -f "$FILE" ]]; then
echo "[SKIP] Not a file: $FILE" >&2
continue
fi
echo "Uploading: $FILE"
RESPONSE=$(curl -s -X POST "$API_URL" -F "file=@${FILE}")
# Requires jq — install with: sudo apt install jq / brew install jq
if command -v jq >/dev/null 2>&1; then
echo "$RESPONSE" | jq .
WATCH=$(echo "$RESPONSE" | jq -r '.watch_url // empty')
DELETE=$(echo "$RESPONSE" | jq -r '.delete_url // empty')
else
echo "$RESPONSE"
WATCH=$(echo "$RESPONSE" | grep -oP '(?<="watch_url":")[^"]+' || true)
DELETE=$(echo "$RESPONSE" | grep -oP '(?<="delete_url":")[^"]+' || true)
fi
[[ -n "$WATCH" ]] && echo " Watch : $WATCH"
[[ -n "$DELETE" ]] && echo " Delete : $DELETE"
echo ""
done
# Single file ./anonmp4-upload.sh movie.mp4 # Bulk — all MKV files in a folder (pairs well with rclone copy) ./anonmp4-upload.sh /media/library/*.mkv
rclone + Bash — pull from remote then upload
Use rclone to copy files from any remote (S3, Google Drive, SFTP, etc.) to a temp directory, then upload each file to AnonMP4.
#!/usr/bin/env bash
# Pull videos from any rclone remote, then push each to AnonMP4
set -euo pipefail
REMOTE="gdrive:Videos/" # change to your rclone remote:path
TMP_DIR="/tmp/anonmp4-stage"
API_URL="https://anonmp4api.xyz/upload"
mkdir -p "$TMP_DIR"
echo "Syncing from $REMOTE ..."
rclone copy "$REMOTE" "$TMP_DIR" \
--include "*.{mp4,mkv,avi,mov,webm}" \
--progress
find "$TMP_DIR" -type f | while read -r FILE; do
echo "Uploading: $(basename "$FILE")"
RESPONSE=$(curl -s -X POST "$API_URL" -F "file=@${FILE}")
WATCH=$(echo "$RESPONSE" | grep -oP '(?<="watch_url":")[^"]+' || true)
echo " Watch: ${WATCH:-$RESPONSE}"
done
rm -rf "$TMP_DIR"
Python — bulk uploader with progress
#!/usr/bin/env python3
"""anonmp4_upload.py — bulk upload videos to AnonMP4.
Usage:
python3 anonmp4_upload.py video.mp4 [video2.mkv ...]
python3 anonmp4_upload.py /path/to/folder/
Requires: pip install requests tqdm
"""
import sys, json, pathlib
import requests
from tqdm import tqdm
API_UPLOAD = "https://anonmp4api.xyz/upload"
API_INFO = "https://anonmp4api.xyz/info/{}"
VIDEO_EXTS = {".mp4", ".mkv", ".avi", ".mov", ".webm", ".flv", ".wmv"}
def collect_files(args):
files = []
for arg in args:
p = pathlib.Path(arg)
if p.is_dir():
files += [f for f in p.rglob("*") if f.suffix.lower() in VIDEO_EXTS]
elif p.is_file():
files.append(p)
return files
def upload(path: pathlib.Path) -> dict:
size = path.stat().st_size
with open(path, "rb") as fh:
with tqdm(total=size, unit="B", unit_scale=True,
desc=path.name, leave=False) as bar:
class _Reader:
def read(self_, n=-1):
data = fh.read(n)
bar.update(len(data))
return data
resp = requests.post(API_UPLOAD, files={"file": (path.name, _Reader())})
resp.raise_for_status()
return resp.json()
def get_info(video_id: str) -> dict:
resp = requests.get(API_INFO.format(video_id))
resp.raise_for_status()
return resp.json()
def main():
if len(sys.argv) < 2:
print(f"Usage: {sys.argv[0]} <file|folder> [...]")
sys.exit(1)
files = collect_files(sys.argv[1:])
if not files:
print("No video files found.")
sys.exit(1)
results = []
for f in files:
print(f"\nUploading: {f}")
try:
data = upload(f)
print(f" Watch : {data.get('watch_url', 'N/A')}")
print(f" Delete : {data.get('delete_url', 'N/A')}")
results.append({"file": str(f), **data})
except Exception as e:
print(f" ERROR : {e}")
results.append({"file": str(f), "error": str(e)})
# Save results log
out = pathlib.Path("upload_results.json")
out.write_text(json.dumps(results, indent=2))
print(f"\nResults saved to {out}")
if __name__ == "__main__":
main()
Forum Plugins
Add AnonMP4 video uploads directly into your forum or website editor. Supports XenForo, phpBB, vBulletin, MyBB, Discourse, WordPress, and more.
Forum & Website Upload Plugin
2-step setup for XenForo, phpBB, vBulletin, MyBB, Discourse & more. Copy-paste ready.