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.

Basic Latin Request
GET /api/v1/font/FONT_ID/subset?preset=basic-latin
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.

  1. Upload the font

    Send the font file. You get back its id.

    POST /api/v1/font

    curl -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();
  2. See the presets

    List every ready-made preset and Unicode range.

    GET /api/v1/font/subset/ranges

    curl -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();
  3. Subset it

    Ask for a preset, or a glyphs range.

    GET /api/v1/font/{id}/subset

    curl -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.

Billing

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
Subscribe Subscribe yearly

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
Subscribe Subscribe yearly

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
Subscribe Subscribe yearly
Only need the Subsetter? — from $9.99/mo · 200 jobs
Billing

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
Subscribe Subscribe yearly

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
Subscribe Subscribe yearly

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
Subscribe Subscribe yearly

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.