Documentation

v0.2.1 Beta

Everything you need to integrate IU.dev APIs and MCP servers

Getting Started

Beta Notice: IU.dev is currently in beta. APIs and features may change. We're actively developing new video processing capabilities.

Welcome to IU.dev! Simple, powerful APIs with no SDK required. Just make HTTP requests and you're ready to go - it's that easy!

1

Get your API key

Request beta access to get your API key

2

Set up your environment

Store your API key securely in environment variables

export IU_API_KEY="your_api_key_here"
3

Make your first request

Start processing videos right away

const response = await fetch('https://api.iu.dev/video/process', {
  method: 'POST',
  headers: {
    'X-API-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    input_url: 'https://example.com/video.mp4',
    output_format: 'mp4'
  })
})

Authentication

All API requests need an API key. During beta, API keys are available by request.

Pro tip: Keep your API key secret! Never put it in client-side code.

Using the X-API-Key Header

Include your API key in the X-API-Key header:

X-API-Key: YOUR_API_KEY

Example with cURL

curl -X POST https://api.iu.dev/video/process \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input_url": "https://example.com/video.mp4", "output_format": "mp4"}'

Security Features

IU.dev implements multiple security layers to protect your data and ensure secure access to our APIs and services.

API Key Authentication

All API requests are secured with X-API-Key headers. API keys are validated against environment variables and provide secure access to containerized microservices.

  • • Unique API keys per user account
  • • Server-side validation and rate limiting
  • • Environment-based key management

Cloudflare Turnstile

All user-facing forms (login, signup, password reset) are protected by Cloudflare Turnstile, providing bot protection and fraud prevention.

  • • Privacy-focused CAPTCHA alternative
  • • Automatic bot detection and blocking
  • • Seamless user experience

Secure SSH MCP Access

MCP server connections use SSH with forced command execution, ensuring secure, encrypted communication with API key-based authentication.

  • • Encrypted SSH connections on port 2223
  • • Forced command execution prevents shell access
  • • API key authentication (no SSH key management)

Security Best Practices

For API Usage:

  • • Keep your API key secret and secure
  • • Never expose API keys in client-side code
  • • Use environment variables for key storage
  • • Regenerate keys if compromised

For MCP Connections:

  • • Use your API key as the SSH username
  • • Connections are automatically encrypted
  • • No additional SSH key setup required
  • • Monitor connection logs if needed

API Endpoints

API Status

Video processing endpoints are being upgraded. TTS and document parsing are currently available.

Video Processing (Coming Soon)

POST /video/process

Convert videos between formats with GPU acceleration

Request Body

input_urlURL of the video to processrequired
output_formatmp4, webm, avi, mov, mkv, flvrequired
resolution1080p, 720p, 480p, 4koptional
webhook_urlURL to receive completion notificationoptional

Example Request

{
  "input_url": "https://example.com/input.avi",
  "output_format": "mp4",
  "resolution": "1080p",
  "webhook_url": "https://yourapp.com/webhook"
}

Document Parsing (Available)

POST /parse

Parse documents (PDF, Word, TXT, MD) and extract text content

Request Body

file_urlURL of the document to parserequired
formatOutput format: text, markdown, jsonoptional

TTS Async Generation (Available)

POST /tts/async

Submit text for async TTS generation with job queue

Request Body

textText to convert to speechrequired
voiceVoice ID or nameoptional
reference_audioURL for voice cloning referenceoptional

Response

{
  "job_id": "tts_abc123xyz",
  "status": "queued",
  "message": "TTS job queued for processing"
}

Metadata & Image Extraction (Available)

POST /api/proxy/extract

Extract metadata and images from videos using AI-powered analysis

Request Body

video_urlURL of the video to analyzerequired
extract_imagesExtract keyframes and thumbnailsoptional
extract_metadataExtract video metadata and AI analysisoptional
ai_analysisInclude AI content analysis (tags, topics, sentiment)optional

Response

{
  "metadata": {
    "duration": 120.5,
    "resolution": "1920x1080",
    "fps": 30,
    "codec": "h264",
    "bitrate": "5000kbps",
    "size_mb": 75.2
  },
  "images": [
    {
      "type": "thumbnail",
      "timestamp": 0,
      "url": "https://cdn.iu.dev/thumb_001.jpg"
    },
    {
      "type": "keyframe",
      "timestamp": 30.5,
      "url": "https://cdn.iu.dev/frame_030.jpg"
    }
  ],
  "ai_analysis": {
    "topics": ["technology", "tutorial", "programming"],
    "tags": ["javascript", "web development", "api"],
    "sentiment": "positive",
    "summary": "A tutorial on building REST APIs with Node.js",
    "key_moments": [
      {"time": "00:02:15", "description": "Introduction to REST principles"},
      {"time": "00:15:30", "description": "Implementing authentication"}
    ]
  }
}

TTS Stream Progress

GET /tts/stream/{job_id}

Server-Sent Events stream for real-time TTS progress updates

Event Stream Format

data: {"type": "progress", "chunk": 1, "total": 5, "text": "Processing chunk 1 of 5"}
data: {"type": "chunk_complete", "chunk": 1, "audio_url": "/audio/chunk_1.wav"}
data: {"type": "complete", "audio_url": "/audio/final.wav", "duration": 45.2}
data: {"type": "error", "message": "TTS processing failed"}

Progressive Playback

Audio chunks can be played progressively as they're generated, providing near-instant playback for long texts without waiting for complete generation.

Video Tools

POST /video/transcribe

Extract transcript from video using Whisper AI

Request Body

video_fileFile ID or upload video filerequired
languageLanguage code (en, es, fr, etc.)optional
POST /video/caption

Add custom captions/subtitles to video

Request Body

video_fileFile ID or upload video filerequired
captionsArray of caption objects with text, start, endrequired
styleCaption style: default, bold, minimaloptional
POST /video/stitch

Combine multiple videos into a single file

Request Body

video_filesArray of file IDs (2-10 videos)required

File Management

GET /files/{directory}

List files in uploads, outputs, or static directories

Parameters

directoryuploads, outputs, or staticrequired
sort_byname, size, or modifiedoptional
limitMax files to return (default: 100)optional
POST /cleanup

Remove temporary files older than specified age

Request Body

max_age_hoursMax age in hours (default: 24)optional
directoriesArray of directories to cleanoptional
dry_runPreview without deletingoptional

MCP Servers

Model Context Protocol (MCP) servers let AI assistants like Claude use your APIs directly through secure SSH connections. Connect via mcp.iu.dev:2223 using your API key for authentication.

How MCP Works

Your App
MCP Server
AI Assistant

SSH-Based Setup

Secure SSH Connection

Connect directly via SSH using your IU Dev API key for authentication. No SSH keys required!

mcp.iu.dev
Hostname
2223
Port
API Key
Authentication

Benefits: Encrypted communication, no SSH key management, direct MCP protocol, works with any SSH client

For Claude Desktop App

Download from claude.ai/download

Add SSH connection to your config file:

  • Mac: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "iu-dev": {
      "command": "ssh",
      "args": [
        "-p", "2223",
        "-o", "StrictHostKeyChecking=no",
        "-o", "UserKnownHostsFile=/dev/null",
        "YOUR_API_KEY@mcp.iu.dev"
      ]
    }
  }
}

Replace YOUR_API_KEY with your actual API key from the dashboard

Available Tools

process_video (Coming Soon)

Convert and optimize video files

Under development - will be available soon

generate_speech (Disabled)

Convert text to speech with voice cloning

Currently disabled to conserve GPU memory for video processing

Document Processing Tools

parse_document - Extract text from PDF, DOCX, MD, TXT
extract_structured_data - Tables, lists, headers from DOCX

File Management Tools

list_files - Browse upload/output directories
get_file_info - Get detailed file information
cleanup_files - Remove old temporary files
delete_file - Delete specific files

Text-to-Speech Tools (Currently Disabled)

TTS functionality temporarily disabled to optimize resources for video processing. Will be re-enabled in future updates.

extract_metadata

Extract video metadata and AI-powered insights

Examples

Python

import requests

api_key = "YOUR_API_KEY"
headers = {
    "X-API-Key": api_key,
    "Content-Type": "application/json"
}

# Example 1: Process video
video_data = {
    "input_url": "https://example.com/video.avi",
    "output_format": "mp4",
    "resolution": "1080p"
}
response = requests.post("https://api.iu.dev/v1/video/process",
                        json=video_data, headers=headers)
print(response.json())

# Example 2: Extract metadata and images
extract_data = {
    "video_url": "https://example.com/video.mp4",
    "extract_images": True,
    "extract_metadata": True,
    "ai_analysis": True
}
response = requests.post("https://api.iu.dev/api/proxy/extract",
                        json=extract_data, headers=headers)
result = response.json()
print(f"Duration: {result['metadata']['duration']}s")
print(f"Topics: {', '.join(result['ai_analysis']['topics'])}")

JavaScript/Node.js

const apiKey = 'YOUR_API_KEY';

// Example 1: Process video
const processVideo = async () => {
  const response = await fetch('https://api.iu.dev/video/process', {
    method: 'POST',
    headers: {
      'X-API-Key': apiKey,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      input_url: 'https://example.com/video.avi',
      output_format: 'mp4',
      resolution: '1080p'
    })
  });
  const result = await response.json();
  console.log(result);
};

// Example 2: Extract metadata and images
const extractMetadata = async () => {
  const response = await fetch('https://api.iu.dev/api/proxy/extract', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${apiKey}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      video_url: 'https://example.com/video.mp4',
      extract_images: true,
      extract_metadata: true,
      ai_analysis: true
    })
  });
  const data = await response.json();
  console.log('Duration:', data.metadata.duration);
  console.log('Topics:', data.ai_analysis.topics);
};

processVideo();
extractMetadata();

Pricing & Billing

During beta, enjoy generous free credits. Full pricing will be available at launch.

How Our Billing Works

  1. 1. Beta users get generous free credits for testing
  2. 2. Wallet system coming soon for production usage
  3. 3. Track your usage in the dashboard
  4. 4. No subscriptions, no surprise charges - you're always in control

Daily Free Credits

5 minutes video processing per day

FREE

1080p Video

Standard quality processing

$0.08/min

4K Video

Ultra HD processing

$0.12/min

Screenshots, Thumbs & Metadata

AI-powered extraction and analysis

$0.009/min

Prepaid Wallet System

Add funds to your wallet anytime (minimum $5). Your balance never expires and you only pay for what you use beyond the daily free tier.

Frequently Asked Questions

What happens if I run out of free credits?

If you exceed your daily free tier, usage will be deducted from your wallet balance at the rates shown above. If your wallet is empty, requests will be declined until the next day's free credits or you add funds.

When do free credits reset?

Free credits reset every day at midnight Pacific Time (PT). You'll get a fresh 5 minutes of video processing to use.

Do wallet funds expire?

No! Your wallet balance never expires. Add funds once and use them whenever you need.

How is metadata extraction priced?

Metadata and image extraction is charged at $0.009 per minute of video analyzed. This includes AI analysis, keyframe extraction, and comprehensive metadata.

Can I get a refund?

Wallet funds are non-refundable, but since you only pay for what you use and there's no subscription, you're never locked in.