Slay the Spire 2 (STS2) Deweloperzy
Twórz narzędzia, boty i treści z danymi Spire Codex. Wszystko jest darmowe i otwarte.
Widżet podpowiedzi
Dodaj podpowiedzi po najechaniu w stylu Wowhead dla kart, reliktów i mikstur na dowolnej stronie. Jeden tag script, zero zależności.
Instalacja
<script src="https://spire-codex.com/widget/spire-codex-tooltip.js"></script>Składnia
[[Strike]]Podpowiedź karty (typ domyślny)[[card:Bash]]Karta (jawnie)[[relic:Burning Blood]]Relikt[[potion:Fire Potion]]Mikstura[[character:Ironclad]]Postać[[monster:Jaw Worm]]Potwór[[power:Strength]]Moc[[event:Neow]]Wydarzenie[[encounter:Lagavulin]]Starcie[[enchantment:Sharp]]Zaklęcie[[keyword:Exhaust]]Słowo kluczowe[[orb:Lightning]]Kula[[affliction:Bound]]Dolegliwość[[achievement:Minimalist]]OsiągnięcieAPI JavaScript
SpireCodex.scan()Ponownie skanuje stronę w poszukiwaniu nowych wzorców [[...]] (dla SPA)SpireCodex.scan(element)Skanuje konkretny element DOMWidżet listy zmian
Osadź kompaktową, interaktywną przeglądarkę listy zmian pokazującą historię aktualizacji Spire Codex z przełączaniem wersji.
Instalacja
<div id="scx-changelog"></div>
<script src="https://spire-codex.com/widget/spire-codex-changelog.js"></script>data-version="1.0.4"Pokazuje konkretną wersję (domyślnie: najnowsza)REST API
Pełna baza danych gry dostępna przez publiczne REST API. Bez uwierzytelniania: limit strony na IP pokrywa przeglądanie i okazjonalne wywołania, a użycie API bez klucza dostaje bazowy limit poniżej. Do skryptów i narzędzi utwórz klucz API i wysyłaj go w nagłówku X-API-Key. Utwórz go na stronie swojego profilu. Klucz grupuje twoje żądania według tożsamości zamiast IP (stabilnie między sieciami, nigdy niedzielony z innymi użytkownikami za tym samym NAT) i daje śledzenie użycia; limit jego poziomu obowiązuje per endpoint. Odpowiedzi zawierają X-RateLimit-Remaining / X-RateLimit-Reset, żebyś mógł dawkować żądania.
Limity żądań
| Ruch na stronie | 300/minute | na IP |
| Bez klucza API | 15/minute | |
| Zarejestrowany użytkownik | 60/minute | utwórz w swoim profilu |
| Akademicki | 100/minute | przyznawany na prośbę |
| Płatny | 120/minute | wspierający |
Wszystkie limity liczą się per endpoint: tabela to twój przydział na każdej trasie, nie globalna pula. Kilka ciężkich endpointów ma własne budżety, które obowiązują każdego wywołującego niezależnie od klucza (zob. eksport rozgrywek poniżej; ZIP językowy to 10/godz.). Obserwuj X-RateLimit-Remaining i wstrzymaj się przy 429 (ustawiany jest Retry-After).
Masowy eksport rozgrywek
GET /api/exports/runs?limit=1000&start=2026-06-01T00:00:00ZStrumieniuje oficjalne rozgrywki jako JSONL, jedna rozgrywka na wiersz.
limit Ogranicza stronę; pełna strona zwraca kursor do następnej.start / end Ograniczają do półotwartego okna daty przesłania. Utrzymuj je stałe podczas stronicowania; kursor ich nie zawiera.Ten endpoint ma własny budżet 120 kredytów na godzinę, wspólny dla wywołujących z kluczem i bez: żądanie stronicowane kosztuje 1 kredyt, pobranie bez limitu kosztuje 60. Ciągła synchronizacja działa więc najlepiej jako stronicowane pobrania co ~30 s; przy 429 respektuj Retry-After i wznów z tym samym kursorem.
Potrzebujesz całego zbioru? Wywołanie bez parametrów przekierowuje do pliku statycznego odbudowywanego raz dziennie, /exports/runs-latest.jsonl.gz, o tym samym kształcie wiersza; /api/exports/runs/manifest podaje czas wygenerowania i liczbę przebiegów. Każdy wiersz zawiera player_token, stały pseudonimowy identyfikator konta zgłaszającego, null dla anonimowych przebiegów.
Tylko jeden patch? /api/exports/runs?version=v0.111.0 przekierowuje do statycznego pliku dla tej wersji z mapy versions w manifeście, /exports/runs-v0.111.0.jsonl.gz; w połączeniu z limit i cursor stronicuje pojedynczy patch.
Bazowy URL
https://spire-codex.comKanał beta (niewydane treści z gałęzi beta Steam): dodaj to do dowolnego endpointu encji: ?channel=beta. Aktualna wersja beta: /api/beta/version. Pełna różnica względem 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.
Endpointy
Pełna interaktywna dokumentacja (generowana automatycznie z backendu, zawsze aktualna): /docs
Encje
Agregacje i wyszukiwania
Languages
Społeczność i zgłoszenia
Pobieranie masowe
Wielojęzyczność
Dodaj ten parametr zapytania do dowolnego endpointu: ?lang=jpn. Obsługiwanych jest 15 języków:
eng, deu, esp, fra, ita, jpn, kor, pol, ptb, rus, spa, tha, tur, zhs, zht
Szybki start
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));Sprite miniaturowej karty
Odtwórz miniaturę karty z gry (używaną na ekranach Historii rozgrywek / Game Over) w dowolnym projekcie webowym. Sześć warstw PNG złożonych przez CSS mask-image, bez canvas, bez WebGL, tylko barwione sprite'y. Kolory pochodzą prosto ze zdekompilowanego kodu gry: NTinyCard, CardPoolModel.DeckEntryCardColor.
Podgląd



Ironclad / Attack / Common


Silent / Skill / Uncommon


Defect / Power / Rare


Necrobinder / Skill / Rare


Regent / Attack / Uncommon


Curse


Event


QuestZasoby sprite'ów
Wszystkie 10 PNG jest serwowanych z włączonym CORS, wstaw bazowy URL przed każdą nazwą pliku. Każdy sprite ma 128×128, RGBA, biały na przezroczystym (do barwienia przez 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 rarityKolory puli (rewers karty)
Źródło: CardPoolModel.DeckEntryCardColor. Dopasuj je do pola color zwracanego przez /api/cards.
Kolory rzadkości (baner)
Źródło: NTinyCard.GetBannerColor. Dopasuj do pola rarity.
Minimalny przepis HTML + CSS
Nazwa pliku portretu: attack = Karty Ataku, power = Karty Mocy, skill = cała reszta (Umiejętność, Stan, Klątwa, …)
<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>Komponent React
Gotowa do użycia wersja React. Źródło: 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" />Pełne obrazy kart
Każda karta z /api/cards zawiera dwa gotowe adresy URL pełnej karty wyrenderowanej przez grę (ramka, grafika, baner i tekst, dokładnie jak w grze). Karty starożytnych to animowane webp.
image_url_card— Karta bazowa. null dla jedynej karty bez renderu (mad_science); wtedy użyj image_url (grafiki portretu).image_url_card_upg— Karta ulepszona. null, gdy karta nie ma ulepszenia.
// 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"
}Zlokalizowane rendery znajdują się w podfolderze języka, na przykład: cards-full/stable/jpn/bash.webp. Dostępnych jest wszystkie 15 języków.
Rendery zaklętych kart
Każda karta jest też renderowana z każdym zaklęciem, które może legalnie otrzymać, dokładnie tak, jak rysuje ją podgląd zaklęcia w grze (odznaka, wartość i dodany tekst karty). Adresy URL mają jeden schemat:
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}: identyfikatory małymi literami z /api/enchantments i /api/cards (np. sharp, corrupted, sown).- Istnieją tylko prawidłowe kombinacje karty i zaklęcia (eksport używa reguł stosowalności samej gry), więc nieprawidłowa kombinacja zwraca 404. Pola card_type / applicable_to w /api/enchantments opisują, które karty się kwalifikują.
- Dla każdej kombinacji istnieją warianty bazowy i ulepszony, we wszystkich 14 językach, z w pełni zlokalizowanym tekstem zaklęcia.
Eksport danych
Pobierz wszystkie dane gry jako jedno archiwum ZIP. Każde archiwum zawiera pliki JSON dla każdego typu encji (karty, relikty, potwory, moce i więcej).
Interaktywna dokumentacja API
Pełna dokumentacja Swagger/OpenAPI z możliwością wypróbowania.
Otwórz dokumentację API →Open source
Spire Codex jest open source. Pipeline ekstrakcji danych, API i frontend są dostępne na GitHubie.
Zobacz na GitHubie →