REST API · JSON
Font Subsetter API
Cut fonts down to the characters you need — by language, script or Unicode range.
Prefer a browser? Use it on the website, no code needed.
Authorization: Bearer YOUR_API_KEY
Send it from the sandbox below and see what comes back.
Try it — no key needed
Pick an example. You'll see the exact request and what the API sent back.
Request
Response
Examples run on sample fonts we host: Inter and Space Grotesk (SIL Open Font License). Results were computed by the real API.
How it works
Every request sends Authorization: Bearer YOUR_API_KEY. Upload a font once and reuse its id with any tool.
-
Upload the font
Send the font file. You get back its id.
POST /api/v1/fontcurl -X POST "https://font.rest/api/v1/font" \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "[email protected]"const body = new FormData(); body.append('font', fileInput.files[0]); const response = await fetch('https://font.rest/api/v1/font', { method: 'POST', headers: { Authorization: 'Bearer YOUR_API_KEY' }, body, }); const data = await response.json();import requests response = requests.post( 'https://font.rest/api/v1/font', headers={'Authorization': 'Bearer YOUR_API_KEY'}, files={'font': open('MyFont.ttf', 'rb')}, ) data = response.json()<?php use Illuminate\Support\Facades\Http; // withToken() sends the Authorization: Bearer header. $response = Http::withToken('YOUR_API_KEY') ->attach('font', file_get_contents('MyFont.ttf'), 'MyFont.ttf') ->post('https://font.rest/api/v1/font'); $data = $response->json(); -
See the presets
List every ready-made preset and Unicode range.
GET /api/v1/font/subset/rangescurl -X GET "https://font.rest/api/v1/font/subset/ranges" \ -H "Authorization: Bearer YOUR_API_KEY"const response = await fetch('https://font.rest/api/v1/font/subset/ranges', { method: 'GET', headers: { Authorization: 'Bearer YOUR_API_KEY' }, }); const data = await response.json();import requests response = requests.get( 'https://font.rest/api/v1/font/subset/ranges', headers={'Authorization': 'Bearer YOUR_API_KEY'}, ) data = response.json()<?php use Illuminate\Support\Facades\Http; // withToken() sends the Authorization: Bearer header. $response = Http::withToken('YOUR_API_KEY') ->get('https://font.rest/api/v1/font/subset/ranges'); $data = $response->json(); -
Subset it
Ask for a preset, or a glyphs range.
GET /api/v1/font/{id}/subsetcurl -X GET "https://font.rest/api/v1/font/FONT_ID/subset?preset=basic-latin" \ -H "Authorization: Bearer YOUR_API_KEY"const response = await fetch('https://font.rest/api/v1/font/FONT_ID/subset?preset=basic-latin', { method: 'GET', headers: { Authorization: 'Bearer YOUR_API_KEY' }, }); const data = await response.json();import requests response = requests.get( 'https://font.rest/api/v1/font/FONT_ID/subset?preset=basic-latin', headers={'Authorization': 'Bearer YOUR_API_KEY'}, ) data = response.json()<?php use Illuminate\Support\Facades\Http; // withToken() sends the Authorization: Bearer header. $response = Http::withToken('YOUR_API_KEY') ->get('https://font.rest/api/v1/font/FONT_ID/subset?preset=basic-latin'); $data = $response->json();
What it can do
Character
- All
- Basic Latin
- Latin-1 Supplement
- Advanced Punctuation
- Cyrillic Alphabet
- Russian Alphabet
- Greek and Coptic
- Portuguese Diacritics
- Armenian Alphabets
- Ethiopic Languages
- Arabic Language support
- Uppercase
- Lowercase
- Numerals
- Basic Punctuation
- Currency Symbols
- Latin Extended-A
- Latin Extended-B
- Tamil Language support
- Devanagari Languages(includes Hindi) support
- Mongolian Languages support
- Full CJK support
Language
- English
- Spanish
- French
- German
- Italian
- Dutch
- Danish
- Norwegian
- Swedish
- Finnish
- Icelandic
- Polish
- Czech
- Slovak
- Romanian
- Hungarian
- Croatian
- Turkish
- Portuguese
- Vietnamese
- Greek
- Russian
- Arabic
- Hindi
- Tamil
- Japanese
- Japanese (Popular Glyphs)
- Korean
- Korean (Popular Glyphs)
- Chinese (Simplified)
- Chinese (Simplified, Popular Glyphs)
Use Case
- Basic Latin
- Latin Extended
- European
- Currency
- Mathematical
- Symbols
- Developer
- Social Media
- Emoji
Plans
API access comes with the Premium and Enterprise plans. Every plan includes a monthly job allowance; a job that fails is not counted.
All tools: every paid feature of every tool, with one monthly allowance shared across them.
Font Tools Starter
$19.99 /mo
$199.90 /yr 2 months free
- 300 jobs a month
- 10MB uploads
- One allowance shared across every tool
- Every paid feature of every tool
- Fonts marked Restricted License
- Website only
Font Tools Premium
$49.99 /mo
$499.90 /yr 2 months free
- 1,500 jobs a month
- 50MB uploads
- One allowance shared across every tool
- Every paid feature of every tool
- Fonts marked Restricted License
- Website + API
Font Tools Enterprise
$99.99 /mo
$999.90 /yr 2 months free
- 5,000 jobs a month
- 200MB uploads
- One allowance shared across every tool
- Every paid feature of every tool
- Fonts marked Restricted License
- Website, API + Render API
Only need the Subsetter? — from $9.99/mo · 200 jobs
Font Subsetting Starter
$9.99 /mo
$99.90 /yr 2 months free
- 200 jobs a month
- 10MB uploads
- Choose output format (WOFF2/WOFF/TTF/OTF)
- Subset by language or use case
- Fonts marked Restricted License
- Website only
Font Subsetting Premium
$24.99 /mo
$249.90 /yr 2 months free
- 1,000 jobs a month
- 50MB uploads
- Choose output format (WOFF2/WOFF/TTF/OTF)
- Subset by language or use case
- Fonts marked Restricted License
- Website + API
Font Subsetting Enterprise
$49.99 /mo
$499.90 /yr 2 months free
- 3,000 jobs a month
- 200MB uploads
- Choose output format (WOFF2/WOFF/TTF/OTF)
- Subset by language or use case
- Fonts marked Restricted License
- Website + API
Questions
- Preset or glyph list?
- Use preset for ready-made sets (a language, a script, a Unicode block) or glyphs for exact code point ranges such as 0x41-0x5A. You can combine several presets with commas.
- How much smaller will the font be?
- The response reports the size before and after. Subsetting a full font to Basic Latin often removes most of the file.
- How many calls can I make?
- Each plan includes a number of jobs a month; every tool response tells you how many are left in its X-Allowance-Remaining header. A job that fails is not counted. Requests are also limited per minute to keep the service fast for everyone.
- How long are files kept?
- Uploaded fonts are kept for 180 days; results for 30 days. Download what you need before then.
- What does a 429 mean?
- Either your monthly allowance is used up (the error says allowance_exhausted, and the X-Allowance-Reset header says when it renews) or you sent too many requests in a minute. Upgrading your plan raises the allowance.
- I integrated with the X-EverythingFonts-Api-Secret header. Do I need to change anything?
- No. It keeps working for existing integrations. New code should send Authorization: Bearer with the same key.