BatchMorph API Documentation

API Access Required

API access is available for Business and Enterprise plans only. Upgrade your plan to get started.

The BatchMorph API allows you to programmatically convert files between different formats. Perfect for automation, bulk processing, and integration with your existing systems.

Base URL

https://your-domain.replit.app/api

Supported Formats

Images
  • PNG, JPG, JPEG
  • WEBP, SVG, TIFF
  • HEIC, HEIF
Documents
  • PDF, DOCX, DOC
  • TXT, MD, HTML
  • RTF
Spreadsheets
  • XLSX, XLS
  • CSV
Presentations
  • PPTX, PPT

Authentication

All API requests require your user ID for authentication and billing purposes.

Getting Your User ID

  1. Log into your BatchMorph account
  2. Go to your account settings or dashboard
  3. Your User ID will be displayed in the API section

Including User ID in Requests

You can include your user ID in three ways:

// 1. In request body (JSON) { "user_id": "your-user-id-here", "other_params": "..." } // 2. As query parameter GET /api/endpoint?user_id=your-user-id-here // 3. In header X-User-ID: your-user-id-here

Rate Limits & Quotas

Plan Monthly Conversions Max File Size API Access
Free 25 25MB ❌ No
Pro 1,000 100MB ❌ No
Business 10,000 250MB ✅ Yes
Enterprise Unlimited 1GB ✅ Yes

Upload Files

POST/api/upload

Upload one or more files for conversion.

Request
curl -X POST https://your-domain.replit.app/api/upload \ -H "X-User-ID: your-user-id" \ -F "files=@document.pdf" \ -F "files=@image.png"
Response
{ "uploads": [ { "file_id": "uuid-1234", "filename": "document.pdf", "size": 1048576, "mime_type": "application/pdf" } ] }

Convert Files

POST/api/convert

Convert uploaded files to target formats.

Request Body
{ "user_id": "your-user-id", "conversions": [ { "file_id": "uuid-1234", "target_format": "jpg" } ] }
Success Response
{ "conversions": [ { "file_id": "uuid-1234", "conversion_id": "conv-5678", "status": "completed", "download_url": "/api/download/conv-5678" } ] }
Usage Limit Error
{ "error": "Monthly conversion limit exceeded", "current_usage": 10001, "limit": 10000, "upgrade_suggestions": { "recommended_tier": "Enterprise", "price": "$99+/month" } }

Download Converted Files

GET/api/download/:conversion_id

Download a converted file by its conversion ID.

Request
curl https://your-domain.replit.app/api/download/conv-5678 \ -H "X-User-ID: your-user-id" \ -o converted_file.jpg

POST/api/download/zip

Download multiple converted files as a ZIP archive.

Request Body
{ "user_id": "your-user-id", "conversion_ids": ["conv-5678", "conv-9012"] }

Usage Statistics

GET/api/usage/:user_id

Get current month usage statistics and limits.

Response
{ "monthly_usage": 150, "monthly_limit": 10000, "usage_percentage": 1.5, "days_until_reset": 18, "tier": "business" }

Error Handling

HTTP Status Codes

  • 200 - Success
  • 400 - Bad Request (invalid parameters)
  • 401 - Unauthorized (missing user ID)
  • 403 - Forbidden (insufficient tier or quota exceeded)
  • 404 - Not Found
  • 429 - Too Many Requests
  • 500 - Internal Server Error

Error Response Format

{ "error": "API access denied", "message": "API access is only available for Business and Enterprise plans", "code": "TIER_INSUFFICIENT", "upgrade_suggestions": { "recommended_tier": "Business", "price": "$29/month" } }

Code Examples

Python Example

import requests # Configuration API_BASE = "https://your-domain.replit.app/api" USER_ID = "your-user-id" # Upload file with open('document.pdf', 'rb') as f: response = requests.post( f"{API_BASE}/upload", headers={"X-User-ID": USER_ID}, files={"files": f} ) file_id = response.json()["uploads"][0]["file_id"] # Convert to JPG response = requests.post( f"{API_BASE}/convert", json={ "user_id": USER_ID, "conversions": [{"file_id": file_id, "target_format": "jpg"}] } ) conversion_id = response.json()["conversions"][0]["conversion_id"] # Download converted file response = requests.get( f"{API_BASE}/download/{conversion_id}", headers={"X-User-ID": USER_ID} ) with open('converted.jpg', 'wb') as f: f.write(response.content)

cURL Example

# Complete workflow USER_ID="your-user-id" API_BASE="https://your-domain.replit.app/api" # 1. Upload FILE_ID=$(curl -X POST "$API_BASE/upload" \ -H "X-User-ID: $USER_ID" \ -F "files=@document.pdf" | jq -r '.uploads[0].file_id') # 2. Convert CONV_ID=$(curl -X POST "$API_BASE/convert" \ -H "Content-Type: application/json" \ -d "{\"user_id\":\"$USER_ID\",\"conversions\":[{\"file_id\":\"$FILE_ID\",\"target_format\":\"jpg\"}]}" \ | jq -r '.conversions[0].conversion_id') # 3. Download curl "$API_BASE/download/$CONV_ID" \ -H "X-User-ID: $USER_ID" \ -o converted.jpg

JavaScript/Node.js Example

const FormData = require('form-data'); const fs = require('fs'); const axios = require('axios'); const API_BASE = 'https://your-domain.replit.app/api'; const USER_ID = 'your-user-id'; async function convertFile() { // Upload const form = new FormData(); form.append('files', fs.createReadStream('document.pdf')); const uploadResponse = await axios.post(`${API_BASE}/upload`, form, { headers: { 'X-User-ID': USER_ID, ...form.getHeaders() } }); const fileId = uploadResponse.data.uploads[0].file_id; // Convert const convertResponse = await axios.post(`${API_BASE}/convert`, { user_id: USER_ID, conversions: [{ file_id: fileId, target_format: 'jpg' }] }); const conversionId = convertResponse.data.conversions[0].conversion_id; // Download const downloadResponse = await axios.get(`${API_BASE}/download/${conversionId}`, { headers: { 'X-User-ID': USER_ID }, responseType: 'stream' }); downloadResponse.data.pipe(fs.createWriteStream('converted.jpg')); } convertFile().catch(console.error);

Get API Access

Upgrade Required

API access is only available for Business and Enterprise plans.

View Pricing Plans Enterprise SLA