Developer Reference v1.0

UniConv REST API

Integrate high-speed, headless file conversions directly into your applications. Fast, stateless, and secured with API keys.

Rate Limits

Standard API plan: 60 requests/minute, bursting up to 120 req/min with automatic concurrent queueing.

Ephemeral Storage

Source and output files are automatically purged after 1 hour. No permanent data retention.

Format Agnostic

Supports 30+ conversion types: PDF, Office (DOCX, PPTX, XLSX), images, audio, video, OCR, and QR.

1. Authentication

All API requests must authenticate using an API key passed in the x-api-key HTTP header or as a Bearer token:

x-api-key: uc_live_9a7b8c1d2e3f4g5h6i7j8k9l0m

Never expose your secret API keys in client-side code (browsers or mobile apps). Always execute calls from your secure backend servers.

2. Core Endpoints

POSThttps://uniconv.onrender.com/api/jobs

Creates an asynchronous file conversion job.

Example cURL Request

curl -X POST https://uniconv.onrender.com/api/jobs \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "tool": "pdf-to-word",
    "input_file_ids": ["f81d4fae-7dec-11d0-a765-00a0c91e6bf6"],
    "target_format": "docx"
  }'

Example Response (HTTP 200)

{
  "job_id": "job_998182ab3c4d",
  "status": "QUEUED",
  "progress": 0
}
GEThttps://uniconv.onrender.com/api/jobs/{job_id}

Polls the current execution status and retrieves download URLs once completed.

{
  "id": "job_998182ab3c4d",
  "status": "COMPLETED",
  "progress": 100,
  "result_url": "https://mfbpubgtqgrijknyunds.supabase.co/storage/v1/object/public/results/processed_job_998182ab3c4d.docx",
  "created_at": "2026-10-15T06:00:00Z"
}

3. SDK / Code Samples

Python (requests)

import requests
import time

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://uniconv.onrender.com/api"

headers = {"x-api-key": API_KEY}

# 1. Create conversion job
payload = {
    "tool": "pdf-to-word",
    "input_file_ids": ["f81d4fae-7dec-11d0-a765-00a0c91e6bf6"],
    "target_format": "docx"
}
res = requests.post(f"{BASE_URL}/jobs", json=payload, headers=headers)
job_id = res.json()["job_id"]

# 2. Poll until completed
while True:
    status_res = requests.get(f"{BASE_URL}/jobs/{job_id}", headers=headers).json()
    if status_res["status"] == "COMPLETED":
        print(f"File ready for download at: {status_res['result_url']}")
        break
    time.sleep(1)