REST API

One endpoint. File in, file out.

The same engine behind this site, callable from anything that can send multipart form data. Synchronous by design: you upload, you wait a moment, you get the converted bytes. No job polling, no webhook choreography, no SDK to learn.

Convert a file

curl -X POST https://safeconvert.app/api/v1/jobs \
  -H "Authorization: Bearer sc_live_YOUR_KEY" \
  -F "file=@quarterly-report.docx" \
  -F "from=docx" -F "to=pdf" \
  -o quarterly-report.pdf
POST

/api/v1/jobs

Fields: file, from, to, optional options JSON (quality, maxWidth, bitrate, crf, dpi, preset). Success returns the converted file with X-Quota-Used and X-Quota-Limit headers.

GET

/api/v1/me

Your plan, this month's usage, and your limits. Poll it freely; it is cheap.

GET

/api/v1/formats

The full 212-format matrix as JSON. Public, no key needed.

Check your usage

curl https://safeconvert.app/api/v1/me \
  -H "Authorization: Bearer sc_live_YOUR_KEY"

Errors you can branch on

Every failure is JSON with a stable code: missing_key, bad_key, rate_limited, quota_exceeded, file_too_large, unsupported_pair, engine_unavailable. The error string says what to do about it, not just what happened.

{ "error": "No route from .mp3 to .png.", "code": "unsupported_pair" }

Plans

FreeProBusiness
Conversions / month50010,000100,000
Max file size25 MB512 MB2048 MB
Requests / minute1060300

Why route through us instead of running FFmpeg yourself?

Because this endpoint is also LibreOffice, Ghostscript, ImageMagick, Calibre, Inkscape and FontForge, kept patched, sandboxed per job, with nothing written to permanent storage — files live for the length of one request. One integration instead of six binaries to babysit. See pricing for the paid tiers.