Slay the Spire 2 (STS2) Entwickler
Baue Tools, Bots und Inhalte mit Spire Codex-Daten. Alles ist kostenlos und offen.
Tooltip-Widget
Füge jeder Website Hover-Tooltips im Wowhead-Stil für Karten, Relikte und Tränke hinzu. Ein Script-Tag, keine Abhängigkeiten.
Installation
<script src="https://spire-codex.com/widget/spire-codex-tooltip.js"></script>Syntax
[[Strike]]Karten-Tooltip (Standardtyp)[[card:Bash]]Karte (explizit)[[relic:Burning Blood]]Relikt[[potion:Fire Potion]]Trank[[character:Ironclad]]Charakter[[monster:Jaw Worm]]Monster[[power:Strength]]Kraft[[event:Neow]]Event[[encounter:Lagavulin]]Begegnung[[enchantment:Sharp]]Verzauberung[[keyword:Exhaust]]Schlüsselwort[[orb:Lightning]]Orb[[affliction:Bound]]Leiden[[achievement:Minimalist]]ErfolgJavaScript-API
SpireCodex.scan()Seite erneut nach neuen [[...]]-Mustern durchsuchen (für SPAs)SpireCodex.scan(element)Ein bestimmtes DOM-Element durchsuchenChangelog-Widget
Bette einen kompakten, interaktiven Changelog-Viewer ein, der die Update-Historie von Spire Codex mit Versionswechsel zeigt.
Installation
<div id="scx-changelog"></div>
<script src="https://spire-codex.com/widget/spire-codex-changelog.js"></script>data-version="1.0.4"Eine bestimmte Version anzeigen (Standard: neueste)REST-API
Die komplette Spieldatenbank ist über eine öffentliche REST-API erreichbar. Keine Authentifizierung nötig: Das Website-Kontingent pro IP deckt Browsen und gelegentliche Aufrufe ab, und API-Nutzung ohne Schlüssel bekommt die Basisrate unten. Für Skripte und Tools erstelle einen API-Schlüssel und sende ihn im Header X-API-Key. Erstelle einen auf deiner Profilseite. Ein Schlüssel ordnet deine Anfragen nach Identität statt IP zu (stabil über Netzwerke hinweg, nie mit anderen Nutzern hinter demselben NAT geteilt) und bietet Nutzungsstatistiken; das Stufenlimit gilt pro Endpunkt. Antworten enthalten X-RateLimit-Remaining / X-RateLimit-Reset, damit du Anfragen dosieren kannst.
Ratenlimits
| Website-Traffic | 300/minute | pro IP |
| Kein API-Schlüssel | 15/minute | |
| Registrierter Nutzer | 60/minute | erstelle einen in deinem Profil |
| Forschung | 100/minute | auf Anfrage |
| Bezahlt | 120/minute | Unterstützer |
Alle Limits gelten pro Endpunkt: Die Tabelle ist dein Kontingent auf jeder Route, kein globaler Pool. Einige aufwendige Endpunkte haben eigene Budgets, die für jeden Aufrufer unabhängig vom Schlüssel gelten (siehe Lauf-Export unten; das Sprach-ZIP ist auf 10/Stunde begrenzt). Beobachte X-RateLimit-Remaining und warte bei 429 ab (Retry-After ist gesetzt).
Massen-Export von Läufen
GET /api/exports/runs?limit=1000&start=2026-06-01T00:00:00ZStreamt offizielle Läufe als JSONL, ein Lauf pro Zeile.
limit Begrenzt die Seite; eine volle Seite liefert einen Cursor für die nächste.start / end Beschränken auf ein halboffenes Einreichungszeitfenster. Beim Blättern konstant halten; der Cursor enthält sie nicht.Dieser Endpunkt hat ein eigenes Budget von 120 Credits pro Stunde, das sich Aufrufer mit und ohne Schlüssel teilen: Eine paginierte Anfrage kostet 1 Credit, ein unbegrenzter Abruf (ohne limit) 60. Dauerhaftes Synchronisieren klappt daher am besten mit paginierten Abrufen im Abstand von ~30s; bei 429 Retry-After beachten und mit demselben Cursor fortsetzen.
Den ganzen Bestand? Ein Aufruf ohne Parameter leitet auf eine einmal täglich neu erzeugte statische Datei um, /exports/runs-latest.jsonl.gz, mit derselben Zeilenform; /api/exports/runs/manifest nennt Erzeugungszeit und Anzahl der Läufe. Jede Zeile enthält player_token, eine stabile pseudonyme Kennung des einreichenden Kontos, null bei anonymen Läufen.
Nur ein einzelner Patch? /api/exports/runs?version=v0.111.0 leitet zu einer statischen Datei je Version aus der versions-Map des Manifests weiter, /exports/runs-v0.111.0.jsonl.gz; zusammen mit limit und cursor blättert es stattdessen seitenweise durch einen einzelnen Patch.
Basis-URL
https://spire-codex.comBeta-Kanal (unveröffentlichte Inhalte aus dem Steam-Beta-Zweig): Hänge dies an jeden Entitäts-Endpunkt an: ?channel=beta. Aktuelle Beta-Version: /api/beta/version. Vollständiger Diff gegenüber 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.
Endpunkte
Vollständige interaktive Doku (automatisch aus dem Backend erzeugt, immer aktuell): /docs
Entitäten
Aggregationen & Nachschlagen
Languages
Community & Einreichungen
Massen-Downloads
Mehrsprachig
Hänge diesen Query-Parameter an jeden Endpunkt an: ?lang=jpn. 15 Sprachen werden unterstützt:
eng, deu, esp, fra, ita, jpn, kor, pol, ptb, rus, spa, tha, tur, zhs, zht
Schnellstart
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));Mini-Karten-Sprite
Baue das Kartenminiaturbild aus dem Spiel (auf den Bildschirmen Laufverlauf / Game Over verwendet) in jedem Webprojekt nach. Sechs PNG-Ebenen, per CSS mask-image kombiniert, kein Canvas, kein WebGL, nur eingefärbte Sprites. Die Farben stammen direkt aus dem dekompilierten Spielcode: NTinyCard, CardPoolModel.DeckEntryCardColor.
Vorschau



Ironclad / Attack / Common


Silent / Skill / Uncommon


Defect / Power / Rare


Necrobinder / Skill / Rare


Regent / Attack / Uncommon


Curse


Event


QuestSprite-Dateien
Alle 10 PNGs werden mit aktiviertem CORS ausgeliefert, setze die Basis-URL vor jeden Dateinamen. Jedes Sprite ist 128×128, RGBA, weiß auf transparent (zum Einfärben per CSS gedacht).
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 rarityPool-Farben (Kartenrückseite)
Quelle: CardPoolModel.DeckEntryCardColor. Gleiche diese mit dem Feld color ab, das /api/cards zurückgibt.
Seltenheitsfarben (Banner)
Quelle: NTinyCard.GetBannerColor. Gleiche mit dem Feld rarity ab.
Minimales HTML + CSS-Rezept
Dateiname des Porträts: attack = Angriffskarten, power = Kraftkarten, skill = alles andere (Fähigkeit, Status, Fluch, …)
<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-Komponente
Direkt einsetzbare React-Version. Quelle: 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" />Vollständige Kartenbilder
Jede Karte aus /api/cards enthält zwei fertige URLs für die vollständig gerenderte Karte (Rahmen, Artwork, Banner und Text, genau wie im Spiel). Karten der Urahnen sind animierte WebPs.
image_url_card— Die Basiskarte. null für die eine Karte ohne Render (mad_science); nutze dort ersatzweise image_url (das Porträt-Artwork).image_url_card_upg— Die verbesserte Karte. null, wenn die Karte keine Verbesserung hat.
// 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"
}Lokalisierte Renders liegen in einem Sprach-Unterordner, zum Beispiel: cards-full/stable/jpn/bash.webp. Alle 15 Sprachen sind verfügbar.
Renders verzauberter Karten
Jede Karte wird zusätzlich mit jeder Verzauberung gerendert, die sie regulär erhalten kann, genau wie die Verzauberungsvorschau im Spiel sie zeichnet (Abzeichen, Wert und ergänzter Kartentext). Die URLs folgen einem Muster:
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}: kleingeschriebene IDs aus /api/enchantments und /api/cards (z. B. sharp, corrupted, sown).- Es gibt nur gültige Kombinationen aus Karte und Verzauberung (der Export nutzt die Anwendbarkeitsregeln des Spiels), eine ungültige Kombination ergibt also 404. Die Felder card_type / applicable_to in /api/enchantments beschreiben, welche Karten infrage kommen.
- Für jede Kombination gibt es Basis- und verbesserte Varianten in allen 14 Sprachen, mit vollständig lokalisiertem Verzauberungstext.
Datenexporte
Lade alle Spieldaten als ein einziges ZIP-Archiv herunter. Jedes Archiv enthält JSON-Dateien für jeden Entitätstyp (Karten, Relikte, Monster, Kräfte und mehr).
15 Sprachen verfügbar. Beispiel-Downloads: Japanisch, Koreanisch, Chinesisch, Französisch, Deutsch
Interaktive API-Doku
Vollständige Swagger/OpenAPI-Dokumentation mit Ausprobieren-Funktion.
API-Doku öffnen →Open Source
Spire Codex ist Open Source. Die Datenextraktions-Pipeline, die API und das Frontend sind alle auf GitHub verfügbar.
Auf GitHub ansehen →