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.

GET https://jinero.online/api/v1/fonts
ParâmetroTipoDescriçã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");
Exemplo de resposta
{
  "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.

GET 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();
Exemplo de resposta
{
  "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.

GET 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();
Exemplo de resposta
{
  "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.

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

GET https://jinero.online/api/v1/fonts/css
ParâmetroTipoDescriçã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');
}
Teste ao vivo Digite o slug de uma família e carregue-a pelo endpoint de CSS
Um pequeno jabuti xereta viu dez cegonhas felizes — 0123456789
—

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.

POST https://jinero.online/api/v1/fonts/recognize
ParâmetroTipoDescriçã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");
Exemplo de resposta
{
  "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.