Spire Codex теперь доступен в Overwolf. Получите внутриигровой оверлей с живым поиском карт и загрузкой забегов в один клик. Подробнее →Создавайте инструменты, ботов и контент на данных Spire Codex. Всё бесплатно и открыто.
Добавьте на любой сайт всплывающие подсказки в стиле Wowhead для карт, реликвий и зелий. Один тег script, ноль зависимостей.
<script src="https://spire-codex.com/widget/spire-codex-tooltip.js"></script>[[Strike]]Подсказка карты (тип по умолчанию)[[card:Bash]]Карта (явно)[[relic:Burning Blood]]Реликвия[[potion:Fire Potion]]Зелье[[character:Ironclad]]Персонаж[[monster:Jaw Worm]]Монстр[[power:Strength]]Сила[[event:Neow]]Событие[[encounter:Lagavulin]]Сражение[[enchantment:Sharp]]Зачарование[[keyword:Exhaust]]Ключевое слово[[orb:Lightning]]Сфера[[affliction:Bound]]Недуг[[achievement:Minimalist]]ДостижениеSpireCodex.scan()Повторно сканирует страницу на новые шаблоны [[...]] (для SPA)SpireCodex.scan(element)Сканирует конкретный элемент DOMВстройте компактный интерактивный просмотрщик списка изменений с историей обновлений Spire Codex и переключением версий.
<div id="scx-changelog"></div>
<script src="https://spire-codex.com/widget/spire-codex-changelog.js"></script>data-version="1.0.4"Показывает конкретную версию (по умолчанию: последняя)Полная база данных игры доступна через публичный REST API. Аутентификация не нужна: лимит сайта на IP покрывает просмотр и редкие вызовы, а использование API без ключа получает базовый лимит ниже. Для скриптов и инструментов создайте ключ API и передавайте его в заголовке X-API-Key. Ключ группирует ваши запросы по учётной записи, а не по IP (стабильно между сетями, никогда не делится с другими пользователями за тем же NAT) и даёт учёт использования; лимит уровня применяется на каждый эндпоинт. Ответы содержат X-RateLimit-Remaining / X-RateLimit-Reset, чтобы вы могли регулировать частоту запросов.
| Трафик сайта | 300/minute | на IP |
| Без ключа API | 15/minute | |
| Зарегистрированный пользователь | 60/minute | создайте в своём профиле |
| Академический | 100/minute | по запросу |
| Платный | 120/minute | спонсоры |
Все лимиты считаются на каждый эндпоинт: таблица — это ваша квота на каждый маршрут, а не общий пул. Несколько тяжёлых эндпоинтов имеют собственные бюджеты, которые действуют для всех вызывающих независимо от ключа (см. экспорт забегов ниже; языковой ZIP — 10 в час). Следите за X-RateLimit-Remaining и делайте паузу при 429 (задаётся Retry-After).
Воспроизведите игровую миниатюру карты (используется на экранах истории забегов и Game Over) в любом веб-проекте. Шесть слоёв PNG, собранных через CSS mask-image, без canvas и WebGL, только тонированные спрайты. Цвета взяты напрямую из декомпилированного кода игры: NTinyCard, CardPoolModel.DeckEntryCardColor.



Ironclad / Attack / Common

Скачайте все данные игры одним ZIP-архивом. Каждый архив содержит JSON-файлы для каждого типа сущностей (карты, реликвии, монстры, способности и другое).
Доступно 15 языков. Примеры загрузок: Японский, Корейский, Китайский, Французский, Немецкий
Полная документация Swagger/OpenAPI с возможностью попробовать запросы.
Открыть документацию API →Spire Codex имеет открытый исходный код. Пайплайн извлечения данных, API и фронтенд доступны на GitHub.
Открыть на GitHub →GET /api/runs/export?limit=1000&start=2026-06-01T00:00:00ZПередаёт официальные забеги в формате JSONL, по одному забегу на строку.
limit Ограничивает страницу; полная страница возвращает курсор для следующей.start / end Ограничивают полуоткрытым окном по времени отправки. Держите их неизменными при пагинации; курсор их не содержит.У этого эндпоинта собственный бюджет в 120 кредитов в час, общий для вызывающих с ключом и без: постраничный запрос стоит 1 кредит, неограниченная выгрузка (без limit) — 60. Поэтому постоянная синхронизация лучше всего работает постраничными запросами с интервалом ~30 с; при 429 соблюдайте Retry-After и продолжайте с тем же курсором.
https://spire-codex.comБета-канал (невыпущенный контент из бета-ветки Steam): добавьте это к любому эндпоинту сущностей: ?channel=beta. Текущая бета-версия: /api/beta/version. Полный список отличий от main: /api/beta/diff.
Полная интерактивная документация (генерируется из бэкенда автоматически, всегда актуальна): /docs
Добавьте этот параметр запроса к любому эндпоинту: ?lang=jpn. Поддерживается 15 языков:
eng, deu, esp, fra, ita, jpn, kor, pol, ptb, rus, spa, tha, tur, zhs, zht
cURL
curl https://spire-codex.com/api/cards?color=ironclad&rarity=RarePython
import requests
cards = requests.get("https://spire-codex.com/api/cards", params={"color": "ironclad"}).json()
for card in cards:
print(f"{card['name']} - {card['type']} ({card['rarity']})")JavaScript
const res = await fetch("https://spire-codex.com/api/relics?pool=ironclad");
const relics = await res.json();
console.log(relics.map(r => r.name));




Defect / Power / Rare


Necrobinder / Skill / Rare


Regent / Attack / Uncommon


Curse


Event


QuestВсе 10 PNG отдаются с включённым CORS, подставьте базовый URL перед каждым именем файла. Каждый спрайт 128×128, RGBA, белый на прозрачном (предназначен для тонирования через CSS).
https://spire-codex.com/static/images/ui/run_history_card/
card_back.png ← tinted by pool
desc_box.png ← dark description area (render at 25% opacity)
attack_portrait.png ← portrait per card type
attack_portrait_shadow.png
skill_portrait.png
skill_portrait_shadow.png
power_portrait.png
power_portrait_shadow.png
banner_shadow.png ← render at 60% opacity
banner.png ← tinted by rarityИсточник: CardPoolModel.DeckEntryCardColor. Сопоставьте их с полем color, которое возвращает /api/cards.
Источник: NTinyCard.GetBannerColor. Сопоставьте с полем rarity.
Имя файла портрета: attack = Карты атаки, power = Карты способностей, skill = всё остальное (навык, статус, проклятие, …)
<div class="tiny-card" style="
--back: #D62000; /* pool color, Ironclad */
--banner: #FFDA36; /* rarity color, Rare */
position: relative;
width: 64px;
height: 64px;
">
<!-- 1. card back, tinted by pool -->
<div class="layer" style="
background-color: var(--back);
mask: url(https://spire-codex.com/static/images/ui/run_history_card/card_back.png) center/contain no-repeat;
-webkit-mask: url(https://spire-codex.com/static/images/ui/run_history_card/card_back.png) center/contain no-repeat;
"></div>
<!-- 2. description box -->
<img class="layer" src="https://spire-codex.com/static/images/ui/run_history_card/desc_box.png" style="opacity:.25">
<!-- 3. portrait shadow + portrait (attack/skill/power) -->
<img class="layer" src="https://spire-codex.com/static/images/ui/run_history_card/attack_portrait_shadow.png">
<img class="layer" src="https://spire-codex.com/static/images/ui/run_history_card/attack_portrait.png"
style="filter: brightness(.95) sepia(.15)">
<!-- 4. banner shadow + banner tinted by rarity -->
<img class="layer" src="https://spire-codex.com/static/images/ui/run_history_card/banner_shadow.png" style="opacity:.6">
<div class="layer" style="
background-color: var(--banner);
mask: url(https://spire-codex.com/static/images/ui/run_history_card/banner.png) center/contain no-repeat;
-webkit-mask: url(https://spire-codex.com/static/images/ui/run_history_card/banner.png) center/contain no-repeat;
"></div>
</div>
<style>
.tiny-card .layer {
position: absolute; inset: 0;
width: 100%; height: 100%;
object-fit: contain;
}
</style>Готовая React-версия. Исходник: TinyCard.tsx
import TinyCard from "./TinyCard";
// Feed in the three fields from /api/cards:
<TinyCard color="ironclad" type="Attack" rarity="Rare" className="w-16 h-16" />Каждая карта из /api/cards содержит два готовых URL полной карты, отрендеренной игрой (рамка, арт, баннер и текст, ровно как в игре). Карты древних — анимированные webp.
image_url_card — Базовая карта. null для единственной карты без рендера (mad_science); там используйте image_url (арт портрета).image_url_card_upg — Улучшенная карта. null, если у карты нет улучшения.// e.g. /api/cards/bash
{
"id": "BASH",
"image_url": "/static/images/cards/bash.webp", // portrait art
"image_url_card": "https://cdn.spire-codex.com/cards-full/stable/bash.webp",
"image_url_card_upg": "https://cdn.spire-codex.com/cards-full/stable/bash_upg.webp"
}Локализованные рендеры лежат в подпапке языка, например: cards-full/stable/jpn/bash.webp. Доступны все 15 языков.
Каждая карта также отрендерена с каждым зачарованием, которое она может законно получить, ровно так, как рисует внутриигровой предпросмотр зачарования (значок, значение и добавленный текст). URL следуют одному шаблону:
https://cdn.spire-codex.com/cards-full/stable/ench/{enchantment}/{card}.webp // English, base
https://cdn.spire-codex.com/cards-full/stable/ench/{enchantment}/{card}_upg.webp // English, upgraded
https://cdn.spire-codex.com/cards-full/stable/{lang}/ench/{enchantment}/{card}.webp // localized
// e.g. Anger with Corrupted, in Japanese:
https://cdn.spire-codex.com/cards-full/stable/jpn/ench/corrupted/anger.webp{enchantment} / {card}: идентификаторы в нижнем регистре из /api/enchantments и /api/cards (например, sharp, corrupted, sown).