HEIC to JPG API — Free Tier + Pay-As-You-Go
Convert iPhone HEIC and HEIF photos to JPG via API. EXIF rotation, ICC profile, Live Photo frame selection.
What it does
The HEIC to JPG API converts Apple HEIC and HEIF images — including HEIF sequence files (Live Photos, burst captures, and HDR multi-frame stacks) — into standard JPEGs that open on any platform. The pipeline decodes via libheif and re-encodes through Sharp with mozjpeg enabled on every job — that is not a paid-tier upgrade, it is simply the encoder the JPEG path uses. EXIF orientation is applied to the pixel data so portrait-mode iPhone photos stop arriving sideways.
The per-job parameters are `quality` (1-100, default 85) and `progressive`, which is on by default. A Live Photo yields its primary still frame and only that frame: there is no parameter for selecting an alternative frame from the sequence, no colour-space override to hold on to Display P3, and no chroma-subsampling control. Metadata does not survive the re-encode, so read anything you need out of the HEIC before you send it.
One file per job — there is no 200-file batch mode and no ZIP-with-manifest response, so send a request per image and run them concurrently within your rate limit.
Supported formats
Source formats (2)
- heic
- heif
Target formats (2)
- jpg
- jpeg
Quick start
Every sample posts the job, then polls /v1/status/{jobId} until it finishes, with your API key in the X-Api-Key header. The parameter names below are the ones the endpoint actually accepts — anything else is dropped rather than rejected.
curl -X POST https://api.convertintomp4.com/v1/convert \
-H "X-Api-Key: ck_your_api_key" \
-F "file=@input.heic" \
-F "targetFormat=jpg"
-F "quality=90"import { readFileSync } from "node:fs";
import { ConvertIntoMP4Client } from "convertintomp4";
const apiKey = process.env.CIM4_API_KEY;
const client = new ConvertIntoMP4Client({ apiKey });
// Presigned direct-to-R2 upload, then queue the conversion.
const { jobId } = await client.uploadDirect(
readFileSync("input.heic"),
"input.heic",
"application/octet-stream",
{ targetFormat: "jpg" },
);
// Poll until the job reaches a terminal state.
let job;
do {
await new Promise((r) => setTimeout(r, 2000));
job = await fetch(`https://api.convertintomp4.com/v1/status/${jobId}`, {
headers: { "X-Api-Key": apiKey },
}).then((r) => r.json());
} while (job.status !== "completed" && job.status !== "failed");
console.log("Download URL:", job.result?.downloadUrl);import time, requests
from convertintomp4 import Client
api_key = "ck_your_api_key"
client = Client(api_key=api_key)
# Presigned direct-to-R2 upload, then queue the conversion.
with open("input.heic", "rb") as f:
job = client.upload_direct(
f, "input.heic", "application/octet-stream", "jpg"
)
# Poll until the job reaches a terminal state.
while True:
status = requests.get(
f"https://api.convertintomp4.com/v1/status/{job['jobId']}",
headers={"X-Api-Key": api_key},
).json()
if status["status"] in ("completed", "failed"):
break
time.sleep(2)
print("Download URL:", status.get("result", {}).get("downloadUrl"))Features
- libheif + mozjpeg pipeline
- EXIF auto-rotation applied to pixel data
- Live Photo frame selection
- Display P3 → sRGB color conversion
- Configurable JPEG quality, progressive, subsampling
- Batch jobs (up to 200 files → ZIP)
- EXIF preservation optional
Pricing
From $9.99/mo (Pro) or $24.99/mo (Business) — or pay-as-you-go on the API plan.
Free tier: 5 conversions/day, 100 MB file size, no API key required (IP-gated). Pro $9.99/mo: 100/day (2,000/month), 2 GB files. Business $24.99/mo: 1,000/day (20,000/month), 10 GB files, GPU encoding, dedicated support.
See full pricing breakdown →Built for production
99.9% uptime SLA
Multi-region failover, transparent status page, 60-second response-time guarantee on Business.
Encryption + auto-delete
TLS 1.2+ in transit, AES-256 at rest. Files deleted after 1h / 24h / 7d depending on plan, or instantly via DELETE endpoint. See the security page.
~7s median latency
Most sub-100 MB jobs complete in 6-9 seconds. Webhook-driven async for heavier workloads; waitForJob for synchronous flows.
Frequently Asked Questions
Why does iOS save photos as HEIC instead of JPG?
HEIC produces ~50% smaller files than JPG at equivalent visual quality, thanks to HEVC's intra-frame prediction and improved entropy coding. Apple adopted it in iOS 11 (2017). The tradeoff is compatibility — many older devices, Android phones, and some web platforms don't decode HEIC natively, hence the demand for JPG conversion.
What JPG quality should I pick?
85 is the sweet spot — visually indistinguishable from the source for most viewers, ~15-25% smaller than quality=95. Use 95 for archival, 70 for thumbnails. Below 70 introduces visible blocking artifacts in flat areas (sky, walls).
Will Live Photo motion be preserved?
No — JPG is a single-frame format, and you get the primary still frame. There is no `livePhotoFrame` parameter, so the other frames of the sequence are not reachable through the API. If you need the motion, convert the source to animated WebP or MP4 instead of JPEG.
What about Apple's Display P3 wide-color gamut?
Most HEICs from iPhones since the iPhone 7 are tagged Display P3, and the JPEG re-encode does not expose a colour-profile override — there is no `colorSpace` parameter. Assume the output behaves as ordinary sRGB-interpreted JPEG, which is what non-colour-managed software expects anyway. For a colour-managed pipeline that genuinely needs P3, keep the HEIC or convert with a tool that lets you pin the profile.
How fast is HEIC to JPG via the API?
Typical iPhone photos (12 MP, ~2.5 MB HEIC) convert in 250-400 ms end-to-end including upload. Batch jobs of 200 photos complete in 20-40 seconds. Use the resumable multipart upload for files larger than 50 MB (Live Photos with embedded videos).
Related APIs
- MP4 to MP3 APIExtract MP3 audio from MP4 video programmatically. Per-job bitrate and sample rate, ID3 tag injection, fast remux mode.
- PDF to JPG APIRender PDF pages to JPG images programmatically. Per-page DPI, page-range selection, batch ZIP output, ImageMagick + pdftoppm pipeline.
- JPG to PNG APIConvert JPG to PNG with optional transparency, lossless compression, and EXIF preservation via API. Sharp-backed.
- MP4 to GIF APIConvert MP4 video to animated GIF programmatically. Per-job width, fps, palette mode, and start/end trim controls.
- PDF to DOCX APIConvert PDF to editable Word DOCX via API. pdf2docx layout reconstruction, automatic OCR pre-pass on scans, LibreOffice fallback.
- DOCX to PDF APIConvert Word DOCX to PDF programmatically. LibreOffice-rendered with font fallback, headers/footers, and PDF/A archival output.
Or browse the full catalogue of 23 API products →
Get an API key
Start integrating the HEIC to JPG API in five minutes. Read the docs, grab a key, and ship your first conversion before the trial coffee cools.