Fonts API
API REST pública para buscar, baixar e incorporar a nossa biblioteca de fontes open source. Compatível com a sintaxe do Google Fonts CSS2.
Uma API REST pública e gratuita para buscar, consultar e incorporar a nossa biblioteca de fontes open source. Compatível com a sintaxe do Google Fonts CSS2 — adicione uma tag <link> e pronto.
<!-- Embed a font in your page -->
<link rel="stylesheet" href="https://jinero.online/api/v1/fonts/css?family=Inter:wght@400,700&display=swap">
<style>
body { font-family: "Inter", system-ui, sans-serif; }
</style>
// Search fonts
const r = await fetch("https://jinero.online/api/v1/fonts?name=mono&per_page=10");
const { data } = await r.json();
console.log(data.map(f => f.name));
Todos os endpoints de leitura são públicos — sem chave. Requisições sem autenticação são limitadas a 60 por minuto por IP. Requisições autenticadas têm 600 req/min. Gere um token na sua página de perfil (entre na sua conta primeiro) — lá você pode vê-lo e copiá-lo a qualquer momento, e o mesmo token funciona para a API, o servidor MCP e os plugins para Chrome e Figma. Envie-o como token Authorization Bearer ou no cabeçalho X-API-Token.
# Public — no auth, 60 rpm per IP
curl https://jinero.online/api/v1/fonts?name=inter
# X-API-Token header — 600 rpm
curl -H "X-API-Token: YOUR_TOKEN" https://jinero.online/api/v1/user
# Bearer (also accepted)
curl -H "Authorization: Bearer YOUR_TOKEN" https://jinero.online/api/v1/user
// Same token, fetch from the browser
const r = await fetch("https://jinero.online/api/v1/user", {
headers: { "X-API-Token": "YOUR_TOKEN" },
});
const me = await r.json();
$user = Http::withHeaders(['X-API-Token' => env('JINERO_API_TOKEN')])
->get("https://jinero.online/api/v1/user")
->json();
Lista paginada e filtrável de famílias de fontes. Use para alimentar um campo de busca, um seletor de fontes ou obter metadados em massa.
https://jinero.online/api/v1/fonts
| Parâmetro | Tipo | Descrição |
|---|---|---|
name |
string | Busca de substring no nome da família (sem diferenciar maiúsculas e minúsculas). |
category |
string|csv | Filtro por categoria: sans, serif, display, slab, mono. |
langs |
csv | Conjuntos de caracteres obrigatórios, ex.: latin,cyrillic. |
style |
csv | Tags de estilo obrigatórias (TODAS devem corresponder): handwriting, script, display, slab, rounded, condensed, expanded, stencil, pixel, blackletter, outline, retro. |
variable |
boolean | Somente fontes variáveis, se true. |
monospace |
boolean | Somente fontes monoespaçadas, se true. |
styles_min |
integer | Número mínimo de pesos/estilos. |
styles_max |
integer | Número máximo de pesos/estilos. |
order |
string | likes (padrão), downloads, views, name, created_at. |
sort |
string | asc ou desc (padrão desc). |
per_page |
integer | Tamanho da página (máx. 100, padrão 48). |
page |
integer | Número da página (a partir de 1). |
curl "https://jinero.online/api/v1/fonts?name=mono&variable=true&per_page=5"
const params = new URLSearchParams({
name: "mono",
variable: "true",
per_page: "5",
});
const r = await fetch(`https://jinero.online/api/v1/fonts?${params}`);
const { data, total } = await r.json();
$r = Http::get("https://jinero.online/api/v1/fonts", [
"name" => "mono",
"variable" => "true",
"per_page" => 5,
]);
$data = $r->json("data");
{
"current_page": 1,
"per_page": 5,
"total": 23,
"data": [
{
"id": 142,
"name": "JetBrains Mono",
"slug": "jetbrains-mono",
"category": "monospace",
"variable": true,
"langs": ["latin","cyrillic"],
"style_tags": [{ "slug": "slab", "label": "Slab Serif" }],
"styles_count": 16,
"downloads": 4821,
"regular_url": "/storage/fonts/jetbrains-mono/JetBrainsMono-Regular.woff2"
}
]
}
Metadados completos de uma família de fontes — cada peso, cada itálico, a URL de cada arquivo. Também retorna URLs prontas de download/files/css.
https://jinero.online/api/v1/fonts/{slug}
curl https://jinero.online/api/v1/fonts/inter
const r = await fetch("https://jinero.online/api/v1/fonts/inter");
const family = await r.json();
console.log(family.fonts);
$family = Http::get("https://jinero.online/api/v1/fonts/inter")->json();
{
"name": "Inter",
"slug": "inter",
"category": "sans",
"designer": "Rasmus Andersson",
"license": "OFL",
"variable": true,
"styles_count": 18,
"download_url": "https://jinero.online/api/v1/fonts/inter/download",
"files_url": "https://jinero.online/api/v1/fonts/inter/files",
"css_url": "https://jinero.online/api/v1/fonts/css?family=inter",
"fonts": [
{
"weight": 400,
"italic": false,
"style_name": "Regular",
"files": [
{ "format": "woff2", "url": "/storage/fonts/inter/Inter-Regular.woff2", "size": 96241 }
]
}
]
}
Lista plana de todos os arquivos de fonte de uma família — prática quando você quer URLs diretas para usar nas suas próprias regras @font-face.
https://jinero.online/api/v1/fonts/{slug}/files
curl https://jinero.online/api/v1/fonts/inter/files
const r = await fetch("https://jinero.online/api/v1/fonts/inter/files");
const { files } = await r.json();
{
"family": "Inter",
"slug": "inter",
"files": [
{ "weight": 400, "italic": false, "style": "Regular", "format": "woff2", "url": "/storage/fonts/inter/Inter-Regular.woff2", "size": 96241 },
{ "weight": 700, "italic": false, "style": "Bold", "format": "woff2", "url": "/storage/fonts/inter/Inter-Bold.woff2", "size": 99812 }
]
}
Retorna um arquivo ZIP com todos os arquivos WOFF2 e um fonts.css pronto para usar. Use quando quiser hospedar a família no seu próprio servidor.
https://jinero.online/api/v1/fonts/{slug}/download
curl -L -o inter.zip https://jinero.online/api/v1/fonts/inter/download
// Trigger a browser download
window.location.href = "https://jinero.online/api/v1/fonts/inter/download";
Substituto direto da API CSS2 do Google Fonts. Carrega regras @font-face que apontam para os arquivos woff2 hospedados por nós. Sintaxe idêntica — os mesmos especificadores family/weight/italic.
https://jinero.online/api/v1/fonts/css
| Parâmetro | Tipo | Descrição |
|---|---|---|
family |
string | Slug da família, opcionalmente seguido dos eixos. Repita para várias famílias. |
display |
string | Valor CSS de font-display: swap (padrão), auto, block, fallback, optional. |
<!-- Simplest form: regular weight only -->
<link rel="stylesheet" href="https://jinero.online/api/v1/fonts/css?family=inter">
<!-- Specific weights -->
<link rel="stylesheet" href="https://jinero.online/api/v1/fonts/css?family=inter:wght@400,500,700&display=swap">
<!-- Italic + weight tuples (Google syntax) -->
<link rel="stylesheet" href="https://jinero.online/api/v1/fonts/css?family=inter:ital,wght@0,400;1,400;0,700">
<!-- Multiple families -->
<link rel="stylesheet" href="https://jinero.online/api/v1/fonts/css?family=inter:wght@400,700&family=jetbrains-mono:wght@400">
/* Returned content */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://jinero.online/storage/fonts/inter/Inter-Regular.woff2') format('woff2');
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url('https://jinero.online/storage/fonts/inter/Inter-Bold.woff2') format('woff2');
}
Identifica a fonte em uma imagem recortada de texto. Usa um modelo de embeddings CNN treinado que compara as fontes pela forma e pelo estilo visual — sem precisar de texto nem de OCR: basta enviar um recorte justo do texto. Funciona com caracteres latinos e cirílicos. Para o melhor resultado, recorte uma única linha de texto.
https://jinero.online/api/v1/fonts/recognize
| Parâmetro | Tipo | Descrição |
|---|---|---|
image |
arquivo (multipart) | Recorte justo do texto. jpg/jpeg/png/webp/bmp, até 8 MB. |
top_k |
integer | Número de correspondências a retornar. 3–20, padrão 8. |
curl -X POST https://jinero.online/api/v1/fonts/recognize \
-F "[email protected]" \
-F "top_k=5"
const form = new FormData();
form.append("image", file); // a tight crop of the text — no text needed
form.append("top_k", "5");
const r = await fetch("https://jinero.online/api/v1/fonts/recognize", { method: "POST", body: form });
const { recognition } = await r.json();
// recognition.matches: [{ slug, name, score, ... }]
$res = Http::attach(
"image",
file_get_contents("crop.png"),
"crop.png"
)->post("https://jinero.online/api/v1/fonts/recognize", [
"top_k" => 5,
]);
$matches = $res->json("recognition.matches");
{
"success": true,
"top_k": 5,
"recognition": {
"matches": [
{ "slug": "inter", "name": "Inter", "score": 0.92, "category": "sans" },
{ "slug": "manrope", "name": "Manrope", "score": 0.88, "category": "sans" },
{ "slug": "plus-jakarta-sans","name": "Plus Jakarta Sans","score": 0.85, "category": "sans" }
],
"elapsed_ms": 210
}
}
Semântica HTTP padrão. Os erros retornam um corpo JSON com o campo `message` (ou um comentário CSS, no endpoint /css).
// 404 — family not found
{ "message": "Font family not found" }
// 422 — validation (oversized image, wrong mime, bad top_k)
{ "message": "Upload a tight crop of the text to analyze." }
// 422 — recognizer index missing on the server
{ "message": "Recognizer index is missing." }
// 429 — rate limit exceeded (recognize = 3 req/min)
{ "message": "Too Many Attempts." }
// 400 — bad request (CSS endpoint, no family)
/* Missing 'family' parameter */
Sobre a Fonts API do jinero.online
API REST pública para buscar, baixar e incorporar a nossa biblioteca de fontes open source — compatível com a sintaxe do Google Fonts CSS2.
CSS como substituto direto
A mesma estrutura de URL do Google Fonts CSS2 — troque o host e as suas tags <link> continuam funcionando.
Licenças abertas
Cada família vem com metadados de licença e de designer. Crie catálogos, páginas de créditos e seletores de fontes sem precisar de scraping.
Hospedagem própria
Baixe um ZIP pronto para usar de cada família — arquivos WOFF2 e um fonts.css gerado. Sem etapa de build.
Sem chave
Os endpoints públicos de leitura são gratuitos, com limite de uso por IP. Quando precisar de limites maiores, gere um token de API no seu perfil.
Perguntas frequentes
Não. Todos os endpoints de leitura (list, show, files, download, css) são públicos e têm limite de uso por IP. O token só é necessário para favoritar fontes em nome de um usuário ou para ter um limite maior.
A sintaxe é a mesma do Google Fonts CSS2 (family, wght, ital, display). O identificador da família é o nosso slug (ex.: "inter", "jetbrains-mono"), e não o nome com "+" — os slugs são retornados pelo endpoint de busca.
WOFF2 no endpoint de CSS e na maioria dos downloads, com TTF como alternativa no download de estilos individuais. O endpoint /fonts/{slug} retorna todos os formatos disponíveis, com tamanho e URL.
Cada família de fontes tem a sua própria licença (OFL, Apache etc.). Os campos license e license_url em /fonts/{slug} dizem exatamente o que é permitido. Sempre confira a licença original antes do uso comercial.