GeezerVison is showing unifont.dev — HTTP API · unifont GET /api/v1/providersEvery provider, with the number of families it will list. example curl https://unifont.dev/api/v1/providers
returns{ providers: [{ name, label, origin, families, requiresOptions, unavailable, note }] } POST /mcpMCP server over Streamable HTTP. Point an agent at it and it can search families, read provider metadata, compare CDNs, check unicode coverage, and get CSS it can paste. example claude mcp add --transport http unifont https://unifont.dev/mcp
returnsJSON-RPC 2.0. Tools: search_fonts · get_font · get_font_css · compare_providers · check_coverage · list_providers GET /api/v1/statusHow the merged index is doing right now: family counts, which providers answered, and how old the index is. example curl https://unifont.dev/api/v1/status
returns{ families, providers, unavailable, indexAge, crossListed } GET /api/v1/fontsSearch the merged catalogue. Ranked exact → prefix → word → substring. Never fuzzy. | Parameter | Type | Notes |
|---|
q | string | What to search for. Leave it out to list everything. |
|---|
provider | string | Limit to one provider. |
|---|
limit | number | Default 60, capped at 200. |
|---|
offset | number | Default 0. |
|---|
example curl "https://unifont.dev/api/v1/fonts?q=grotesk&limit=5"
returns{ total, families: [{ family, providers }], unavailable } GET /api/v1/fonts/{family}Everything one provider knows about a family, and the faces it resolves to. | Parameter | Type | Notes |
|---|
provider | string | Limit the cascade to these providers (comma-separated). |
|---|
weights | string | Comma-separated. Defaults to every weight published. |
|---|
styles | string | Comma-separated: normal, italic, oblique. |
|---|
subsets | string | Comma-separated. Defaults to everything published. |
|---|
example curl "https://unifont.dev/api/v1/fonts/Newsreader?weights=400,600&subsets=latin"
returns{ family, provider, providers, properties, requested, notes, fonts, fallbacks, css } GET /api/v1/fonts/{family}/transferHow much a selection weighs, measured with HEAD requests. Nothing is downloaded. | Parameter | Type | Notes |
|---|
weights | string | Comma-separated. Default 400. |
|---|
styles | string | Comma-separated. Default normal. |
|---|
subsets | string | Comma-separated. Default latin. |
|---|
provider | string | Limit the cascade to these providers (comma-separated). |
|---|
example curl "https://unifont.dev/api/v1/fonts/Fraunces/transfer?subsets=latin,latin-ext"
returns{ family, faces, files, measured, bytes }. `measured` counts the files that reported a content-length GET /api/v1/fonts/{family}/css@font-face CSS to read, copy or fetch from a script. If a selection resolves to nothing you get an empty stylesheet with a comment, not a 404. | Parameter | Type | Notes |
|---|
provider | string | Limit the cascade to these providers (comma-separated). |
|---|
weights | string | Comma-separated. Default 400. |
|---|
styles | string | Comma-separated. Default normal. |
|---|
subsets | string | Comma-separated. Default latin. |
|---|
as | string | Rename the family, so you can load several providers at once. |
|---|
example curl "https://unifont.dev/api/v1/fonts/Switzer/css?weights=300,500"
returnstext/css GET /api/v1/cssOne stylesheet for lots of families, so a grid of specimens costs one request. | Parameter | Type | Notes |
|---|
families | string | Comma-separated, up to 40. Required. |
|---|
weights | string | Comma-separated. Defaults to the variable range, or the weight nearest 400. |
|---|
subsets | string | Comma-separated. Defaults to latin where the family publishes it. |
|---|
example curl "https://unifont.dev/api/v1/css?families=Anton,Erode,Spectral"
returnstext/css. A family that can't be resolved becomes a comment, rather than breaking the sheet GET /api/v1/fonts/{family}/compareThe same family, asked of every provider that doesn't need credentials. example curl https://unifont.dev/api/v1/fonts/Inter/compare
returns{ family, results: [{ provider, available, weights, styles, subsets, faces, files, host, fallbacks }] } GET /api/v1/fonts/{family}/coverageWhich characters the resolved faces can actually draw, based on their unicode-range. | Parameter | Type | Notes |
|---|
text | string | Check your own text instead of the built-in samples. |
|---|
provider | string | Limit the cascade to these providers (comma-separated). |
|---|
example curl "https://unifont.dev/api/v1/fonts/Anton/coverage?text=Zażółć"
returns{ family, provider, checks: { [name]: { text, unrestricted, covered, missing, subsets } } } Conventions - Family names
- Percent-encode them:
/api/v1/fonts/Big%20Shoulders%20Display. Matching ignores case. - Unknown families
404 with a message naming the family. A family may still exist on Adobe Fonts, which cannot be listed from here. - Partial answers
- If a provider fails, the response says so in
unavailable, rather than quietly handing you a short list. - Caching
- Metadata is cached for an hour and CSS for a day, both with
stale-while-revalidate. Font files come from the provider's own CDN. This API never proxies them.
|