Slay the Spire 2 (STS2) Разработчики
Создавайте инструменты, ботов и контент на данных 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]]ДостижениеJavaScript API
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
Полная база данных игры доступна через публичный 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).
Массовый экспорт забегов
GET /api/exports/runs?limit=1000&start=2026-06-01T00:00:00ZПередаёт официальные забеги в формате JSONL, по одному забегу на строку.
limit Ограничивает страницу; полная страница возвращает курсор для следующей.start / end Ограничивают полуоткрытым окном по времени отправки. Держите их неизменными при пагинации; курсор их не содержит.У этого эндпоинта собственный бюджет в 120 кредитов в час, общий для вызывающих с ключом и без: постраничный запрос стоит 1 кредит, неограниченная выгрузка (без limit) — 60. Поэтому постоянная синхронизация лучше всего работает постраничными запросами с интервалом ~30 с; при 429 соблюдайте Retry-After и продолжайте с тем же курсором.
Нужен весь корпус? Вызов без параметров перенаправляет на статический файл, пересобираемый раз в сутки, /exports/runs-latest.jsonl.gz, с тем же форматом строк; /api/exports/runs/manifest сообщает время генерации и число забегов. Каждая строка содержит player_token, стабильный псевдонимный идентификатор загрузившего аккаунта, null у анонимных забегов.
Нужен только один патч? /api/exports/runs?version=v0.111.0 перенаправляет на статический файл этой версии из карты versions манифеста, /exports/runs-v0.111.0.jsonl.gz; вместе с limit и cursor он вместо этого постранично выгружает один патч.
Базовый URL
https://spire-codex.comБета-канал (невыпущенный контент из бета-ветки Steam): добавьте это к любому эндпоинту сущностей: ?channel=beta. Текущая бета-версия: /api/beta/version. Полный список отличий от main: /api/beta/diff.
The community stats pages were reorganized: /community-stats, /leaderboards/metrics, /charts, and the /meta page now live under /stats, /leaderboards/elo is /top-players, and run submission moved to /runs/submit. Old URLs redirect.
Эндпоинты
Полная интерактивная документация (генерируется из бэкенда автоматически, всегда актуальна): /docs
Сущности
Агрегации и поиск
Languages
Сообщество и отправки
Массовая загрузка
Многоязычность
Добавьте этот параметр запроса к любому эндпоинту: ?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));Мини-спрайт карты
Воспроизведите игровую миниатюру карты (используется на экранах истории забегов и Game Over) в любом веб-проекте. Шесть слоёв PNG, собранных через CSS mask-image, без canvas и WebGL, только тонированные спрайты. Цвета взяты напрямую из декомпилированного кода игры: NTinyCard, CardPoolModel.DeckEntryCardColor.
Предпросмотр



Ironclad / Attack / Common


Silent / Skill / Uncommon


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.
Минимальный рецепт на HTML + CSS
Имя файла портрета: 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-компонент
Готовая 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).- Существуют только допустимые сочетания карты и зачарования (экспорт использует правила применимости самой игры), поэтому недопустимое сочетание даёт 404. Поля card_type / applicable_to в /api/enchantments описывают, какие карты подходят.
- Для каждого сочетания есть базовый и улучшенный варианты на всех 14 языках с полностью локализованным текстом зачарования.
Экспорт данных
Скачайте все данные игры одним ZIP-архивом. Каждый архив содержит JSON-файлы для каждого типа сущностей (карты, реликвии, монстры, способности и другое).
Доступно 15 языков. Примеры загрузок: Японский, Корейский, Китайский, Французский, Немецкий
Интерактивная документация API
Полная документация Swagger/OpenAPI с возможностью попробовать запросы.
Открыть документацию API →Открытый исходный код
Spire Codex имеет открытый исходный код. Пайплайн извлечения данных, API и фронтенд доступны на GitHub.
Открыть на GitHub →