Eine kostenlose, öffentliche REST-API, um unsere Bibliothek mit Open-Source-Schriftarten zu durchsuchen, ihre Metadaten abzurufen und Schriftarten einzubinden. Kompatibel mit der Syntax von Google Fonts CSS2 – <link>-Tag einfügen, fertig.

<!-- 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));

Alle lesenden Endpunkte sind öffentlich – kein Schlüssel nötig. Nicht authentifizierte Anfragen sind auf 60 Anfragen pro Minute und IP begrenzt, authentifizierte erhalten 600 Anfragen/min. Erstelle ein Token auf deiner Profilseite (melde dich zuerst an) – dort kannst du es jederzeit ansehen und kopieren, und dasselbe Token funktioniert für die API, den MCP-Server, die Chrome-Erweiterung & das Figma-Plugin. Sende es entweder als Authorization-Bearer-Token oder im Header 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();

Paginierte, filterbare Liste von Schriftfamilien. Ideal für ein Suchfeld, eine Schriftauswahl oder den Massenabruf von Metadaten.

GET https://jinero.online/api/v1/fonts
ParameterTypBeschreibung
name string Teilstring-Suche im Familiennamen (ohne Beachtung der Groß-/Kleinschreibung).
category string|csv Nach Kategorie filtern: sans, serif, display, slab, mono.
langs csv Erforderliche Zeichensätze, z. B. latin,cyrillic.
style csv Erforderliche Stil-Tags (ALLE müssen zutreffen): handwriting, script, display, slab, rounded, condensed, expanded, stencil, pixel, blackletter, outline, retro.
variable boolean Bei true nur Variable Fonts.
monospace boolean Bei true nur Monospace-Schriftarten.
styles_min integer Mindestanzahl an Schriftstärken/Schnitten.
styles_max integer Höchstanzahl an Schriftstärken/Schnitten.
order string likes (Standard), downloads, views, name, created_at.
sort string asc oder desc (Standard: desc).
per_page integer Seitengröße (max. 100, Standard 48).
page integer Seitennummer (beginnend bei 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");
Beispielantwort
{
  "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"
    }
  ]
}

Vollständige Metadaten einer einzelnen Schriftfamilie – jede Schriftstärke, jede Kursive, jede Datei-URL. Liefert außerdem fertige URLs für 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();
Beispielantwort
{
  "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 }
      ]
    }
  ]
}

Flache Liste aller Schriftdateien einer Familie – praktisch, wenn du direkte URLs für eigene @font-face-Regeln brauchst.

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();
Beispielantwort
{
  "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 }
  ]
}

Liefert ein ZIP-Archiv mit allen WOFF2-Dateien und einer einsatzbereiten fonts.css. Nutze das, wenn du die Familie selbst hosten willst.

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";

Direkter Ersatz für die Google Fonts CSS2 API. Lädt @font-face-Regeln, die auf unsere gehosteten woff2-Dateien verweisen. Identische Syntax – dieselben Angaben für family/weight/italic.

GET https://jinero.online/api/v1/fonts/css
ParameterTypBeschreibung
family string Slug der Familie, optional gefolgt von Achsen. Für mehrere Familien wiederholen.
display string Wert für CSS font-display: swap (Standard), 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');
}
Live ausprobieren Gib den Slug einer Familie ein und lade sie über den CSS-Endpunkt
Victor jagt zwölf Boxkämpfer quer über den großen Sylter Deich – 0123456789
—

Erkennt die Schriftart in einem zugeschnittenen Textbild. Basiert auf einem trainierten CNN-Embedding, das Schriftarten anhand von visueller Form und Stil vergleicht – weder Text noch OCR nötig, lade einfach einen engen Ausschnitt des Textes hoch. Funktioniert für lateinische und kyrillische Schrift. Die besten Ergebnisse erzielst du mit einem engen Zuschnitt auf eine einzige Textzeile.

POST https://jinero.online/api/v1/fonts/recognize
ParameterTypBeschreibung
image Datei (multipart) Enger Ausschnitt des Textes. jpg/jpeg/png/webp/bmp, max. 8 MB.
top_k integer Anzahl der zurückgegebenen Treffer. 3–20, Standard 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");
Beispielantwort
{
  "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
  }
}

Standard-HTTP-Semantik. Fehler liefern einen JSON-Body mit dem Feld `message` (bzw. einen CSS-Kommentar beim Endpunkt /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 */

Über die Fonts API von jinero.online

Öffentliche REST-API zum Durchsuchen, Herunterladen und Einbinden unserer Bibliothek mit Open-Source-Schriftarten – kompatibel mit der Syntax von Google Fonts CSS2.

CSS als Drop-in-Ersatz

Gleicher URL-Aufbau wie bei Google Fonts CSS2 – tausch den Host aus, und deine bestehenden <link>-Tags funktionieren weiter.

Offene Lizenzen

Jede Familie kommt mit Metadaten zu Lizenz und Designer. Baue Kataloge, Seiten mit Quellenangaben und Schriftauswahlen ganz ohne Scraping.

Self-Hosting

Lade pro Familie ein fertiges ZIP herunter – WOFF2-Dateien plus eine generierte fonts.css. Kein Build-Schritt nötig.

Kein Schlüssel nötig

Öffentliche lesende Endpunkte sind kostenlos, mit einem Rate-Limit pro IP. Wenn du höhere Limits brauchst, erstelle in deinem Profil ein API-Token.

Häufig gestellte Fragen

Nein. Alle lesenden Endpunkte (list, show, files, download, css) sind öffentlich und haben ein Rate-Limit pro IP. Ein Token brauchst du nur, um im Namen eines Nutzers Schriftarten zu favorisieren oder ein höheres Rate-Limit zu bekommen.

Die Syntax entspricht Google Fonts CSS2 (family, wght, ital, display). Als Kennung der Familie dient unser Slug (z. B. "inter", "jetbrains-mono") statt des Anzeigenamens mit "+" – Slugs liefert der Such-Endpunkt.

WOFF2 für den CSS-Endpunkt und die meisten Downloads, mit TTF als Fallback beim Download einzelner Schnitte. Der Endpunkt /fonts/{slug} liefert jedes verfügbare Format mit Größe und URL.

Jede Schriftfamilie hat ihre eigene Lizenz (OFL, Apache usw.). Die Felder license und license_url in /fonts/{slug} sagen dir genau, was erlaubt ist. Prüfe vor einer kommerziellen Nutzung immer die Originallizenz.