Открытое API
Самообновляемая карточка в описание профиля на Шикимори — одной строкой BBCode. И открытое JSON API для тех, кто хочет нарисовать свою. Без ключей и регистрации для разработчиков.
01 · Встраивание
Вставьте код в поле «О себе» в настройках профиля на Шикимори. Картинка перерисовывается из свежих данных примерно раз в час — описание больше трогать не нужно.
[url=https://shikimatch.com/profile/%D0%B2%D0%B0%D1%88%20%D0%BD%D0%B8%D0%BA][img]https://shikimatch.com/api/profile-card/%D0%B2%D0%B0%D1%88%20%D0%BD%D0%B8%D0%BA.png[/img][/url]Введите ник, чтобы увидеть карточку
themedark · lightformatportrait · landscapelocaleru · en02 · Данные
Всё, что профиль показывает о вкусе, в стабильном формате: класс зрителя, его смесь, любимые жанры и статистика списка. Соберите свою карточку, бота или виджет.
https://shikimatch.com/api/public/v1/profile/<nickname>?locale=ru|enНик кодируйте через encodeURIComponent — в никах бывают кириллица, пробелы и эмодзи.
{
"version": 1,
"nickname": "Nagisa",
"profileUrl": "https://shikimatch.com/profile/Nagisa",
"avatarUrl": "https://shikimori.io/system/users/x160/…png",
"cardImageUrl": "https://shikimatch.com/api/profile-card/Nagisa?locale=ru",
"stats": {
"total": 412, "completed": 301, "scored": 288,
"meanScore": 7.41, "highScorePercent": 47, "nichePercent": 18
},
"viewerClass": {
"slug": "romantic",
"name": "Романтик",
"family": "…",
"quote": "…",
"tags": ["…", "…"],
"rare": false,
"accent": "#d96f91",
"url": "https://shikimatch.com/types/romantic",
"artUrl": "https://shikimatch.com/types/cards/romantic.webp"
},
"spectrum": [
{ "name": "Романтик", "percent": 41, "accent": "#d96f91" }
],
"topGenres": [
{ "name": "Романтика", "meanScore": 8.12, "count": 64, "iconUrl": "…" }
],
"syncedAt": "2026-10-13T09:30:00.000Z"
}nickname, profileUrlavatarUrlcardImageUrlstatsviewerClassspectrumtopGenressyncedAtОтдаём профили только тех, кто сам входил на ShikiMatch и принял политику конфиденциальности.
Ответы кэшируются на час. Не дёргайте API на каждый показ виджета — храните копию.
CORS открыт, ключи не нужны. До 60 запросов в минуту с одного IP — любому виджету хватит.
Формат /v1 не сломается. Новые поля могут появляться — незнакомые просто пропускайте.
Покажите — с радостью поделимся. Не хватает поля — напишите, добавим: maksimhard1@gmail.com
const nickname = "Nagisa";
const response = await fetch(
"https://shikimatch.com/api/public/v1/profile/" + encodeURIComponent(nickname) + "?locale=ru",
);
if (response.ok) {
const profile = await response.json();
console.log(profile.viewerClass?.name, profile.stats.meanScore);
} else {
const { error } = await response.json(); // "not_found" | "not_registered" | …
}not_foundТакого ника нет
not_registeredЧеловек не входил на ShikiMatch — его данные наружу не отдаются
privateПрофиль закрыт
—Больше 60 запросов в минуту с одного IP