Безкоштовний публічний REST API для пошуку, перегляду метаданих і підключення нашої бібліотеки open-source шрифтів. Сумісний із синтаксисом Google Fonts CSS2 — додайте тег <link>, і готово.

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

Усі ендпоінти для читання публічні — ключ не потрібен. Запити без автентифікації обмежено 60 запитами на хвилину з одного IP. Автентифіковані запити отримують 600 запитів/хв. Згенеруйте токен на сторінці профілю (спершу увійдіть) — там його можна будь-коли переглянути й скопіювати, і той самий токен працює для API, MCP-сервера та плагінів для Chrome і Figma. Надсилайте його як токен Authorization Bearer або в заголовку 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();

Посторінковий список родин шрифтів із фільтрами. Підходить для поля пошуку, вибору шрифту чи масового отримання метаданих.

GET https://jinero.online/api/v1/fonts
ПараметрТипОпис
name string Пошук підрядка в назві родини (без урахування регістру).
category string|csv Фільтр за категорією: sans, serif, display, slab, mono.
langs csv Обов'язкові мовні набори, напр. latin,cyrillic.
style csv Обов'язкові теги стилю (мають збігатися ВСІ): handwriting, script, display, slab, rounded, condensed, expanded, stencil, pixel, blackletter, outline, retro.
variable boolean Лише варіативні шрифти, якщо true.
monospace boolean Лише моноширинні шрифти, якщо true.
styles_min integer Мінімальна кількість накреслень.
styles_max integer Максимальна кількість накреслень.
order string likes (за замовчуванням), downloads, views, name, created_at.
sort string asc або desc (за замовчуванням desc).
per_page integer Розмір сторінки (до 100, за замовчуванням 48).
page integer Номер сторінки (від 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"
    }
  ]
}

Повні метадані однієї родини шрифтів — кожна насиченість, кожен курсив, URL кожного файлу. Також повертає готові URL 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();
Приклад відповіді
{
  "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 }
      ]
    }
  ]
}

Плаский список усіх файлів шрифту родини — зручно, коли потрібні прямі URL для власних правил @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();
Приклад відповіді
{
  "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 }
  ]
}

Повертає ZIP-архів з усіма файлами WOFF2 і готовим fonts.css. Підходить, якщо хочете розмістити родину на власному хостингу.

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

Пряма заміна Google Fonts CSS2 API. Завантажує правила @font-face, що вказують на файли woff2 на наших серверах. Ідентичний синтаксис — ті самі специфікатори family/weight/italic.

GET https://jinero.online/api/v1/fonts/css
ПараметрТипОпис
family string Slug родини, за потреби з осями. Для кількох родин повторіть параметр.
display string Значення CSS font-display: swap (за замовчуванням), 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');
}
Спробуйте наживо Введіть slug родини й завантажте її через CSS-ендпоінт
Чуєш їх, доцю, га? Кумедна ж ти, прощайся без ґольфів! — 0123456789
—

Визначає шрифт на обрізаному зображенні тексту. Працює на навченій CNN-моделі ембедингів, що порівнює шрифти за візуальною формою й стилем, — не потрібні ні текст, ні OCR, просто завантажте щільно обрізаний фрагмент тексту. Підтримує латиницю й кирилицю. Для найкращого результату обріжте до одного рядка тексту.

POST https://jinero.online/api/v1/fonts/recognize
ПараметрТипОпис
image файл (multipart) Щільно обрізаний фрагмент тексту. jpg/jpeg/png/webp/bmp, до 8 МБ.
top_k integer Кількість збігів у відповіді. 3–20, за замовчуванням 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
  }
}

Стандартна семантика HTTP. Помилки повертають JSON із полем `message` (або CSS-коментар для ендпоінта /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 */

Про Fonts API jinero.online

Публічний REST API для пошуку, завантаження й підключення нашої бібліотеки open-source шрифтів — сумісний із синтаксисом Google Fonts CSS2.

CSS як пряма заміна

Та сама структура URL, що й у Google Fonts CSS2, — замініть хост, і ваші наявні теги <link> працюватимуть далі.

Відкриті ліцензії

Кожна родина має метадані про ліцензію й дизайнера. Створюйте каталоги, сторінки з атрибуцією й засоби вибору шрифтів без скрейпінгу.

Власний хостинг

Завантажуйте готовий ZIP для кожної родини — файли WOFF2 і згенерований fonts.css. Збирання не потрібне.

Без ключа

Публічні ендпоінти для читання безкоштовні, з лімітом запитів на IP. Коли потрібні вищі ліміти, згенеруйте API-токен у профілі.

Часті запитання

Ні. Усі ендпоінти для читання (list, show, files, download, css) публічні й мають ліміт запитів на IP. Токен потрібен лише для того, щоб додавати шрифти в обране від імені користувача або отримати вищий ліміт.

Синтаксис збігається з Google Fonts CSS2 (family, wght, ital, display). Ідентифікатор родини — наш slug (напр. "inter", "jetbrains-mono"), а не назва з "+", — slug-и повертає ендпоінт пошуку.

WOFF2 для CSS-ендпоінта й більшості завантажень, із запасним TTF для завантаження окремих накреслень. Ендпоінт /fonts/{slug} повертає всі доступні формати з розміром і URL.

Кожна родина шрифтів має власну ліцензію (OFL, Apache тощо). Поля license і license_url у /fonts/{slug} точно вказують, що дозволено. Перед комерційним використанням завжди перевіряйте оригінальну ліцензію.