OverwolfSpire Codex ist jetzt auf Overwolf. Mehr erfahren →

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]]Erfolg

JavaScript-API

SpireCodex.scan()Seite erneut nach neuen [[...]]-Mustern durchsuchen (für SPAs)
SpireCodex.scan(element)Ein bestimmtes DOM-Element durchsuchen

Changelog-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-Traffic300/minutepro IP
Kein API-Schlüssel15/minute
Registrierter Nutzer60/minuteerstelle einen in deinem Profil
Forschung100/minuteauf Anfrage
Bezahlt120/minuteUnterstü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:00Z

Streamt 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.com

Beta-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

GET/api/cardsAlle Karten (Filter: color, type, rarity, keyword, tag, spawns, search)
GET/api/cards/{id}Einzelne Karte
GET/api/charactersAlle Charaktere
GET/api/characters/{id}Einzelner Charakter
GET/api/relicsAlle Relikte (Filter: rarity, pool, ancient, search)
GET/api/relics/{id}Einzelnes Relikt
GET/api/potionsAlle Tränke (Filter: rarity, pool, search)
GET/api/potions/{id}Einzelner Trank
GET/api/monstersAlle Monster (Filter: type, search)
GET/api/monsters/{id}Einzelnes Monster
GET/api/powersAlle Kräfte (Filter: type, stack_type, search)
GET/api/powers/{id}Einzelne Kraft
GET/api/eventsAlle Ereignisse (Filter: type, act, search)
GET/api/events/{id}Einzelnes Ereignis
GET/api/encountersAlle Begegnungen (Filter: room_type, act, search)
GET/api/encounters/{id}Einzelne Begegnung
GET/api/enchantmentsAlle Verzauberungen
GET/api/enchantments/{id}Einzelne Verzauberung
GET/api/keywordsKartenschlüsselwörter
GET/api/keywords/{id}Einzelnes Schlüsselwort
GET/api/intentsAlle Absichtstypen
GET/api/intents/{id}Einzelne Absicht
GET/api/orbsAlle Orb-Typen
GET/api/orbs/{id}Einzelner Orb
GET/api/afflictionsLeidenstypen
GET/api/afflictions/{id}Einzelnes Leiden
GET/api/modifiersModifikatoren des benutzerdefinierten Modus
GET/api/modifiers/{id}Einzelner Modifikator
GET/api/achievementsAlle Erfolge
GET/api/achievements/{id}Einzelner Erfolg
GET/api/badgesAlle Abzeichen
GET/api/badges/{id}Einzelnes Abzeichen
GET/api/epochsAlle Epochen
GET/api/epochs/{id}Einzelne Epoche
GET/api/storiesAlle Geschichten
GET/api/stories/{id}Einzelne Geschichte
GET/api/actsAlle Akte
GET/api/acts/{id}Einzelner Akt
GET/api/ascensionsAlle Aufstiegsstufen
GET/api/ascensions/{id}Einzelne Aufstiegsstufe
GET/api/glossaryAlle Glossarbegriffe
GET/api/glossary/{id}Einzelner Begriff

Aggregationen & Nachschlagen

GET/api/statsAnzahl der Entitäten
GET/api/ancient-poolsAlle Relikt-Pools der Urahnen mit Bedingungen
GET/api/ancient-pools/{id}Pools eines einzelnen Urahnen
GET/api/unlocksFreischaltbare Entitäten nach Typ gruppiert, mit Epochenkontext
GET/api/history/{entity_type}/{entity_id}Versionshistorie pro Entität aus den Changelogs
GET/api/update-history/{entity_type}/{entity_id}Update-Historie pro Entität nach Spiel-Patches
GET/api/names/{entity_type}/{entity_id}Sprachübergreifende Namenssuche für eine Entität
GET/api/searchEinheitliche Seitensuche über Entitäten, Referenzeinträge, Mechaniken, Guides, Neuigkeiten, Seiten und Bilddateien, mit Tippfehlertoleranz (q, lang)
GET/api/search/semanticMeaning-based entity search, same item shape as /api/search (q, limit); empty when the feature is off
GET/api/merchant/configMerchant pricing config extracted from the game
GET/api/mechanics/constantsMechanics constants: room odds, gold ranges, ascension tuning
GET/api/mechanics/sectionsIndex of the mechanics pages
GET/api/mechanics/sections/{slug}One mechanics page as markdown with template tokens resolved
GET/api/changelogsAlle Changelogs
GET/api/changelogs/recent-additionsNeueste Entitäten für das Band auf der Startseite
GET/api/changelogs/{tag}Einzelner Changelog nach Tag (z. B. v1.0.20)
GET/api/newsSteam-Ankündigungen (lokal gespiegelt, damit sie erhalten bleiben)
GET/api/news/{gid}Einzelner News-Artikel mit bereinigtem Inhalt
GET/api/versionsVerfügbare Beta-Datenversionen für die Versionsauswahl
GET/api/news/codexSpire Codex site news, newest first
GET/api/news/codex/{slug}One site news entry
GET/api/announcementsActive site banner messages

Languages

GET/api/languagesAvailable languages with display names
GET/api/translationsTranslation maps for filter values and UI strings (lang)
GET/api/localizationsThe game's own localization tables as ICU MessageFormat, all of them or the ones named in ?tables= (max 50; unknown names are 404)
GET/api/localizations/tablesNames of the available localization tables
GET/api/localizations/{table}One localization table

Community & Einreichungen

GET/api/guidesAlle Guides (Filter: category, difficulty, tag, search)
GET/api/guides/{slug}Einzelner Guide mit gerendertem Markdown
POST/api/guidesGuide einreichen (Discord-Webhook, ratenbegrenzt)
POST/api/runsSubmit a run for community stats and leaderboards. The run is attached to an account only with Authorization: Bearer <jwt>; a bare steam_id is kept as a hint
POST/api/runs/claimAttach the signed-in account to previously-submitted anonymous runs by hash
GET/api/runs/listEingereichte Läufe mit Filtern und Paginierung durchsuchen (inkl. ascension_min/ascension_max und winrate_min/winrate_max nach Siegrate des Einreichers, die Inhalts-Brackets) Jede Zeile enthält player_token, eine stabile pseudonyme Kennung des einreichenden Kontos, null bei anonymen Läufen. total_is_lower_bound is true when the exact count ran out of time and total is a capped lower bound.
GET/api/runs/leaderboardRun leaderboards (fastest, highest_ascension); filter by character, players, game_mode, ascension_min, winrate_min (the content brackets), build_id
GET/api/runs/shared/{run_hash}Einzelner eingereichter Lauf nach Hash (ratenbegrenzt)
GET/api/runs/statsAggregierte Community-Statistiken (filtern nach character, ascension, username)
GET/api/runs/community-statsThe /stats hub dataset: event decision splits, deadliest encounters, win rates by ascension/character, records. Takes the same bracket keys as the metrics tables; an unknown bracket returns HTTP 400
GET/api/charts/metaDiagrammregister für den /stats/charts-Explorer: verfügbare Diagramme, Filter, Aufteilungen und Laufstatistiken
GET/api/charts/{chart}One pre-aggregated chart (filter: players, ascension, game_mode, username, split, bracket=a10|wr30|wr50|wr75, build_id, plus per-chart params). A saved chart id from the chart builder returns that saved chart instead
POST/api/chartsSave a chart spec to your profile (bearer token, 100 per account)
PATCH/api/charts/{id}Update the title, visibility or spec of your own saved chart; DELETE removes it
GET/api/charts/mineYour saved charts, newest first (bearer token)
GET/api/charts/publicNewest public saved charts (limit)
GET/api/tierlists/shared/{share_id}Public read-only view of a shared tier list
GET/api/beta/diffWas die aktuelle Beta pro Entitätstyp hinzufügt, ändert und entfernt; Grundlage jedes BETA-Labels
GET/api/beta/versionDie aktuelle Beta-Version
GET/api/runs/scores/{type}Codex Score + Codex Elo per entity (cards/relics/potions); ?bracket= grades within a run bracket (a10|wr30|wr50|wr75, a game version, or any metrics bracket; unknown is HTTP 400) (the in-game mod sends the same via ?stat_filter=a10|a10_wr30|a10_wr50|a10_wr75); relics accept ?act=1|2|3 to rank by acquisition act; ?character= switches to that character's slice (entries gain a scope field)
GET/api/runs/leaderboard/seed-rankSeed + globale Platzierung für einen Seed (?seed=&steam_id=); Rangfelder sind null ohne gewonnenen Lauf
POST/api/auth/steam/ticketEin Steamworks-Web-Auth-Ticket gegen das Site-JWT tauschen (stille Anmeldung im Spiel); 503, bis der Server einen Steam-Schlüssel hat
GET/api/runs/metrics/{type}Dense metrics table for cards/relics/potions, one row per entity: Codex Score, win_rate with a Wilson 95% win_rate_ci, hold_rate, lift and lift_n over the floor-adjusted expectation (null under 20 seats), Codex Elo and pick_rate from free choice screens for cards and relics, a wax block on relics (Toy Box copies split out), and used/use_rate on potions. Counts are per seat, so a 4P run is four seats; the response carries total_runs, total_seats, total_wins and data_through. ?bracket=all|solo|2p|3p|4p|a10|daily|custom|wr30|wr50|wr75 or a composite like solo:standard; ?character= switches to that character's slice (rows gain per-character Elo and Pick%). An unknown bracket returns HTTP 400
GET/api/runs/metrics/shopsShop shelf table, one row per card, relic or potion: seen, bought, buy_rate, and the buyers' win_rate, win_rate_ci and lift. Same bracket keys as the other metrics tables
GET/api/runs/metrics/eventsEvent option table: chosen, share of that event's choices, win_rate, win_rate_ci and lift. Same bracket keys as the other metrics tables
GET/api/runs/metrics/campfiresRest-site choice table (rest, smith, and the rest) with a localized name per ?lang=: chosen, share, low_hp_share, win_rate, win_rate_ci and lift. Same bracket keys as the other metrics tables
GET/api/runs/versionsEindeutige Spiel-Build-IDs mit eingereichten Läufen
GET/api/runs/leaderboard/rank/{run_hash}Rank of one winning run within its ladder (category)
GET/api/leaderboards/eloTop players by Codex Elo over solo A10 standard runs, refreshed nightly; powers /top-players (limit, min_runs)
GET/api/runs/stats/{type}/{id}Community stats for one card, relic or potion, with per-bracket and per-character splits
GET/api/runs/stats/{type}/{id}/historyDaily Codex Score and Elo history for one entity (bracket=all|a10|wr30|wr50|wr75)
GET/api/runs/top/{type}/{character}Most-picked entities of a type for one character (limit)
GET/api/runs/encounter-statsPer-encounter appearances, fatal rate, avg damage and turns, per character too (act, room_type, multiplayer, bracket, build_id, encounter, page, limit)
GET/api/runs/encounter-seriesThe given encounters (max 20) rolled up per bracket and per recent game version
GET/api/runs/pulseCommunity run and win totals plus data_through
GET/api/runs/snapshot-statusWhether the stats are loaded or rebuilding
GET/api/runs/{run_hash}/similarNearest winning solo decks to a run and what they took that it didn't
GET/api/runs/archetypesCommunity deck archetypes, clustered nightly
GET/api/runs/encounter-buildsWhich archetypes die to an encounter and which walk past it (encounter)
GET/api/runs/deck-advisorWhat the winning decks nearest a partial deck carry that it doesn't yet (character, cards, relics)
GET/api/runs/pick-coachNearest archetypes for a partial deck and a score per offered card (character, cards, relics, offer, target)
GET/api/pairings/{item_type}/{item_id}Cards, relics and potions that show up in the same runs as this item
GET/api/draft-recs/{item_type}/{item_id}Cards players most often draft when they already hold this item
POST/api/draft-adviceRank the offered cards for the current deck
GET/api/replaysRuns with a replay to watch; same filters and row shape as /api/runs/list plus replay_url
GET/api/replays/summaryHow many replays are watchable, overall and per character
GET/api/runs/{run_hash}/replayThe stored replay journal as gzip; POST uploads one for a run you own, DELETE removes it
GET/api/players/{username}/insightsOne player's public insights with community comparison; 404 for unknown or private profiles
GET/api/players/{username}/statsDie eigenen Karten-, Relikt-, Trank-, Ereignis-, Laden- und Lagerfeuerstatistiken eines Spielers mit persönlichem Lift; gleiche Filter und Privatsphäre wie bei Insights
GET/api/presence/activeLive runs from the in-game mod, deepest first
GET/api/presence/{steam_id}One player's live run; 404 when they aren't in one
GET/api/thanksGitHub contributors, special thanks, and public supporters
GET/api/mod/latestLatest mod build and the game version it was verified against
GET/api/rate-limitsThe public rate-limit tiers
POST/api/feedbackFeedback senden (Discord-Webhook)

Massen-Downloads

GET/api/exports/runsJSONL-Stream offizieller Läufe (Paginierung über limit/start/end/cursor; eigenes Budget von 120 Credits pro Stunde, siehe Massen-Export oben)
GET/api/exports/runs/manifestWhen the daily full run dump was generated and how many runs it holds
GET/api/exports/{lang}ZIP aller Entitäts-JSONs für eine Sprache (10/Stunde)
GET/api/imagesKategorien der Bildergalerie
GET/api/images/searchBilder nach Dateiname suchen
GET/api/images/game/{version}/{category}/browseSeitenweises Durchsuchen der Ordner eines vollständigen Asset-Dumps (path, offset, limit)
GET/api/images/game/{version}/{category}/downloadZIP der Dateien eines Dump-Ordners (path; maximal 2000 Dateien)

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=Rare

Python

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
Quest

Sprite-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 rarity

Pool-Farben (Kartenrückseite)

Quelle: CardPoolModel.DeckEntryCardColor. Gleiche diese mit dem Feld color ab, das /api/cards zurückgibt.

ironclad#D62000
silent#5EBD00
defect#3EB3ED
necrobinder#CD4EED
regent#E36600
colorless#A3A3A3
event#A3A3A3
curse#585B61
quest#24476A
status#FFFFFF
token#FFFFFF

Seltenheitsfarben (Banner)

Quelle: NTinyCard.GetBannerColor. Gleiche mit dem Feld rarity ab.

Basic#9C9C9C
Starter#9C9C9C
Common#9C9C9C
Uncommon#64FFFF
Rare#FFDA36
Curse#E669FF
Event#13BE1A
Ancient#13BE1A
Quest#F46836
Status#9C9C9C
Token#9C9C9C

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).

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 →