Font Conversion API â Free Tier + Pay-As-You-Go
Convert TTF, OTF, WOFF, WOFF2, EOT and SVG fonts via API. Subsetting, hinting, and TrueType collection (TTC) export.
What it does
The Font Conversion API converts between TTF, OTF, WOFF, WOFF2, EOT, SVG fonts, and TTC (TrueType Collection) outputs. Conversion is backed by Google's fonttools Python library with Brotli compression for WOFF2 output, configurable hinting via ttfautohint, and Latin / Cyrillic / Greek / Vietnamese / Devanagari subset support. Glyph subsetting can reduce a 600 KB WOFF2 to under 60 KB for typical web-font payloads by stripping unused codepoints; pass `subset=latin,latin-ext` or supply a custom `unicodeRange=U+0020-007F,U+00A0-00FF` list.
Variable fonts (TTF/OTF with `fvar` tables) are preserved through the pipeline and can be instantiated to a specific weight/width via the `instance=weight=400,wdth=100` parameter, producing a smaller static font with the same visual. EOT generation is supported for IE6-8 legacy targets although the format is increasingly obsolete. Output fonts pass through OpenType validation before delivery so malformed source fonts surface as `FONT_INVALID` errors rather than corrupt downloads.
Supported formats
Source formats (10)
- ttf
- otf
- woff
- woff2
- eot
- svg
- pfb
- pfa
- ttc
- otc
Target formats (7)
- ttf
- otf
- woff
- woff2
- eot
- svg
- ttc
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.ttf" \
-F "target=woff2"
-F "subset=latin,latin-ext"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.ttf"),
target: "woff2",
});
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.ttf", "rb") as f:
job = client.convert(file=f, target="woff2")
result = client.wait_for_job(job.id)
print("Output URL:", result.output_url)Features
- TTF, OTF, WOFF, WOFF2, EOT, SVG, TTC conversion
- Brotli-compressed WOFF2 for smallest web payload
- Unicode subsetting with named subsets + custom ranges
- Variable-font instancing to static weight/width
- TTC bundling of multiple TTFs into one collection
- OpenType validation on every output
- Hint preservation via ttfautohint
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
How small can a subsetted WOFF2 get?
Latin-only subsets typically land around 30-60 KB per weight for a sans-serif (e.g. Inter, Roboto). The original TTF is often 300-600 KB. Subsetting + Brotli compression = ~10Ã payload reduction without losing rendering quality for English-only sites.
Are variable fonts (CSS font-variation-settings) supported?
Yes. Variable axes (wght, wdth, ital, opsz, slnt, etc.) pass through to WOFF2 unchanged. You can also pin a static instance via `instance=wght=400` to ship a smaller fixed-weight version to legacy browsers.
Can the API generate EOT for IE6-8?
Yes, although IE6-8 support is increasingly rare in 2026. The API outputs valid Embedded OpenType with same-origin checks disabled by default; pass `eotSameOrigin=true` if you need the legacy restriction.
What's the difference between TTF/OTF and WOFF/WOFF2?
TTF and OTF are uncompressed desktop formats; WOFF/WOFF2 are gzip/Brotli-compressed wrappers for web delivery. WOFF2 is the recommended web format â Brotli compresses 30% better than WOFF's gzip.
How are font licenses handled?
We don't validate the OFL/EULA permissions of input fonts â that's your responsibility. The API rejects encrypted or DRM-locked fonts at validation time, but commercial licensing compliance is the caller's obligation.
Related APIs
- File Conversion APIOne unified file conversion API for video, audio, image, document, ebook, archive, and font formats â 255 formats, 2,290+ conversion pairs.
- Convert APIProduction-grade file conversion API with 9 language SDKs, async webhooks, and cloud-to-cloud workflows. Free tier available.
- Media Conversion APIVideo and audio conversion API in one endpoint. 27 video + 21 audio formats, FFmpeg-backed, GPU-accelerated.
Or browse the full catalogue of 23 API products â
Get an API key
Start integrating the Font Conversion API in five minutes. Read the docs, grab a key, and ship your first conversion before the trial coffee cools.