AnonMP4
Developer

API Documentation

Complete reference for integrating with AnonMP4 programmatically. Upload, manage, and stream video content via HTTP.

No authentication required · Base URL: https://anonmp4api.xyz/

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.

POST

https://anonmp4api.xyz/upload

Upload a video file directly to the platform with optional metadata and privacy settings.

Request Parameters multipart/form-data

FieldTypeRequiredDescription
filefileRequiredVideo file (max 20 GB, video/* mime types)

Example Request

cURL
curl -X POST "https://anonmp4api.xyz/upload" \
  -F "file=@/path/to/video.mp4"

Success Response 200 OK

JSON
{
  "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"
}
GET

/info/{video_id}

Retrieve detailed information about a specific video including metadata, streaming URLs, and current status.

URL Parameters

ParameterTypeDescription
video_idstringUnique video identifier returned at upload time

Example Request

cURL
curl -X GET "https://anonmp4api.xyz/info/NLEusIzEvLs3s3B"

Success Response 200 OK

JSON
{
  "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

JSON
{
  "success": false,
  "error": {
    "code":    "E_INVALID_SIZE",
    "message": "File size exceeds the 20GB limit",
    "details": {
      "max_size":      53687091200,
      "received_size": 107374182400
    }
  }
}

HTTP Status Codes

StatusMeaning
200Success
400Bad Request — invalid parameters
404Not Found — video does not exist
413Payload Too Large — file exceeds size limit
415Unsupported Media Type — invalid file format
429Too Many Requests — rate limit exceeded
500Internal Server Error

API Error Codes

CodeDescription
E_NO_FILENo file provided in upload request
E_INVALID_SIZEFile size exceeds 20 GB limit
E_INVALID_TYPEFile is not a supported video format
E_UPLOAD_FAILEDUpload processing failed
E_HANDLER_FAILEDUpload handler failed
E_VIDEO_NOT_FOUNDRequested 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)

rclone's built-in HTTP backend supports read-only traversal. Uploads go through the shell / Python helpers below which wrap POST /upload.
~/.config/rclone/rclone.conf
[anonmp4]
type = http
url  = https://anonmp4api.xyz
no_slash = false

Fetch video metadata via rclone cat:

Shell
# 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.

anonmp4-upload.sh
#!/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
example run
# 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.

Shell
#!/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

anonmp4_upload.py
#!/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.

XenForo phpBB vBulletin MyBB Discourse