developers · REST API

Convertica API

Same engines as the website. Authenticate with an API key; successful jobs use your plan minute pool. Time and unit utilities are free and do not consume minutes.

API keys

Create a key while logged in. Send it as X-API-Key: cvk_… or Authorization: Bearer cvk_…. Keys use the same minutes and file limits as your Free / Basic / Pro plan.

Log in or register to create an API key.

Auth & minutes

  • API key — preferred for scripts (header above).
  • JWT — same as the web app after login.
  • Guest — no key; free daily minutes by IP (same as the site).
  • Only successful conversion jobs deduct minutes.
  • Time zone and unit endpoints are utilities and do not use minutes.

Job flow

  1. POST a convert endpoint with multipart file (and target params) → { job_id }
  2. Poll GET /api/v1/status/{job_id} until COMPLETED / SUCCESS or failure.
  3. GET /api/v1/download/{job_id} for the binary result.

Discover targets with GET /api/v1/formats.

Endpoints

MethodPathAuthNotes
GET/api/v1/formatsnoneSupported formats & utilities
GET/api/v1/plansnonePricing / plan limits
GET/api/v1/openapi.jsonnoneOpenAPI 3 sketch
POST/api/v1/convertkey|jwt|guestImage convert
POST/api/v1/video-convertkey|jwt|guestVideo convert / compress / GIF / presets
POST/api/v1/audio-convertkey|jwt|guestAudio convert / extract
POST/api/v1/document-convertkey|jwt|guestOffice / PDF
POST/api/v1/ebook-convertkey|jwt|guestEbook (Calibre)
POST/api/v1/archive-convertkey|jwt|guestArchive extract/create
POST/api/v1/vector-convertkey|jwt|guestVector convert
POST/api/v1/compresskey|jwt|guestImage compress
POST/api/v1/pdf-compresskey|jwt|guestPDF compress
POST/api/v1/pdf-toolkey|jwt|guestmerge/split/rotate/unlock/protect/…
GET/api/v1/status/{job_id}key|jwt|guestPoll job
GET/api/v1/download/{job_id}key|jwt|guestDownload result
POST/api/v1/time-convertnoneTimezone utility (no minutes)
GET/api/v1/timezonesnoneTimezone list
POST/api/v1/unit-convertnoneUnit utility (no minutes)
GET/api/v1/unitsnoneUnit list
POST/api/v1/auth/api-keyjwtCreate / rotate API key
DELETE/api/v1/auth/api-keyjwtRevoke API key

curl sample

# 1) Create an API key (logged-in JWT from the site)
curl -sS -X POST https://www.convertica.app/api/v1/auth/api-key \
  -H "Authorization: Bearer YOUR_JWT"

# 2) Convert an image (uses your plan minutes)
curl -sS -X POST https://www.convertica.app/api/v1/convert \
  -H "X-API-Key: cvk_YOUR_KEY" \
  -F "[email protected]" \
  -F "target=jpeg"

# Response: {"job_id":"..."}

# 3) Poll status
curl -sS https://www.convertica.app/api/v1/status/JOB_ID \
  -H "X-API-Key: cvk_YOUR_KEY"

# 4) Download when status is COMPLETED / SUCCESS
curl -sS -o out.jpg https://www.convertica.app/api/v1/download/JOB_ID \
  -H "X-API-Key: cvk_YOUR_KEY"

Python sample

import requests

BASE = "https://www.convertica.app"
API_KEY = "cvk_YOUR_KEY"
headers = {"X-API-Key": API_KEY}

with open("photo.png", "rb") as f:
    r = requests.post(
        f"{BASE}/api/v1/convert",
        headers=headers,
        files={"file": f},
        data={"target": "jpeg"},
        timeout=120,
    )
r.raise_for_status()
job_id = r.json()["job_id"]

while True:
    s = requests.get(f"{BASE}/api/v1/status/{job_id}", headers=headers, timeout=60)
    s.raise_for_status()
    data = s.json()
    status = data.get("status") or data.get("state")
    if status in ("COMPLETED", "SUCCESS", "FAILED", "FAILURE"):
        break

if status in ("COMPLETED", "SUCCESS"):
    out = requests.get(f"{BASE}/api/v1/download/{job_id}", headers=headers, timeout=120)
    out.raise_for_status()
    open("out.jpg", "wb").write(out.content)
    print("saved out.jpg")
else:
    print("failed", data)

Rate limits & fairness

File size and concurrent job limits follow your plan. Free daily minutes reset by UTC day. Abuse (scraping, malware, shared keys across many clients) may result in key or account suspension. See Terms and Security.