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 via libjpeg-turbo (mozjpeg on the Pro tier for ~10% smaller files at same quality). EXIF orientation is applied to pixel data so portrait-mode iPhone photos no longer arrive sideways.
ICC color profiles convert from Apple's Display P3 to sRGB by default to preserve compatibility with non-color-managed software; pass `colorSpace=displayp3` to preserve the wide-gamut source for color-managed pipelines. Live Photo HEIF inputs default to extracting the primary still frame; pass `livePhotoFrame=before|after|key` to pull alternative frames. Per-job parameters include JPEG quality (1-100, default 85), progressive encoding (`progressive=true`), chroma subsampling (`subsampling=420|422|444`), and EXIF preservation (`keepExif=true|false`).
Batch jobs accept up to 200 HEIC files per request and emit a ZIP with per-file conversion metadata in `manifest.json`.
Supported formats
Source formats (2)
- heic
- heif
Target formats (2)
- jpg
- jpeg
Quick start
All three SDK languages show the same conversion: a single POST to /v1/convert with your API key in the X-Api-Key header.
curl -X POST https://api.convertintomp4.com/v1/convert \
-H "X-Api-Key: ck_your_api_key" \
-F "file=@input.heic" \
-F "target=jpg"
-F "quality=90"import { ConvertIntoMP4 } from "@convertintomp4/sdk";
import fs from "node:fs";
const client = new ConvertIntoMP4({ apiKey: process.env.CIM4_API_KEY });
const job = await client.convert({
file: fs.createReadStream("input.heic"),
target: "jpg",
});
const result = await client.waitForJob(job.id);
console.log("Output URL:", result.outputUrl);from convertintomp4 import Client
client = Client(api_key="ck_your_api_key")
with open("input.heic", "rb") as f:
job = client.convert(file=f, target="jpg")
result = client.wait_for_job(job.id)
print("Output URL:", result.output_url)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. The API extracts the primary still frame by default; pass `livePhotoFrame=before` or `livePhotoFrame=after` to choose a different frame from the 3-second sequence. For motion preservation, convert to animated WebP or MP4 instead.
What about Apple's Display P3 wide-color gamut?
Most HEICs from iPhones since the iPhone 7 are tagged Display P3. We convert to sRGB by default for cross-platform compatibility. Pass `colorSpace=displayp3` to preserve P3 in the JPG output — useful for color-managed Mac and iOS displays but invisible on standard browsers.
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. Preserves layout, fonts, tables, and images. pdf2docx + OCR 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.