Fonts API
Публічний REST API для пошуку, завантаження й підключення нашої бібліотеки open-source шрифтів. Сумісний із синтаксисом Google Fonts CSS2.
Безкоштовний публічний 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();
Посторінковий список родин шрифтів із фільтрами. Підходить для поля пошуку, вибору шрифту чи масового отримання метаданих.
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.
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.
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. Підходить, якщо хочете розмістити родину на власному хостингу.
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.
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');
}
Визначає шрифт на обрізаному зображенні тексту. Працює на навченій CNN-моделі ембедингів, що порівнює шрифти за візуальною формою й стилем, — не потрібні ні текст, ні OCR, просто завантажте щільно обрізаний фрагмент тексту. Підтримує латиницю й кирилицю. Для найкращого результату обріжте до одного рядка тексту.
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} точно вказують, що дозволено. Перед комерційним використанням завжди перевіряйте оригінальну ліцензію.