Slay the Spire 2 (STS2) Développeurs
Créez des outils, des bots et du contenu avec les données de Spire Codex. Tout est gratuit et ouvert.
Widget d'infobulles
Ajoutez des infobulles au survol façon Wowhead pour les cartes, reliques et potions sur n'importe quel site. Une balise script, zéro dépendance.
Installation
<script src="https://spire-codex.com/widget/spire-codex-tooltip.js"></script>Syntaxe
[[Strike]]Infobulle de carte (type par défaut)[[card:Bash]]Carte (explicite)[[relic:Burning Blood]]Relique[[potion:Fire Potion]]Potion[[character:Ironclad]]Personnage[[monster:Jaw Worm]]Monstre[[power:Strength]]Pouvoir[[event:Neow]]Événement[[encounter:Lagavulin]]Rencontre[[enchantment:Sharp]]Enchantement[[keyword:Exhaust]]Mot-clé[[orb:Lightning]]Orbe[[affliction:Bound]]Affliction[[achievement:Minimalist]]SuccèsAPI JavaScript
SpireCodex.scan()Réanalyse la page pour de nouveaux motifs [[...]] (pour les SPA)SpireCodex.scan(element)Analyse un élément DOM précisWidget de journal des modifications
Intégrez un visualiseur de journal compact et interactif affichant l'historique des mises à jour de Spire Codex avec changement de version.
Installation
<div id="scx-changelog"></div>
<script src="https://spire-codex.com/widget/spire-codex-changelog.js"></script>data-version="1.0.4"Affiche une version précise (par défaut : la dernière)API REST
Base de données complète du jeu accessible via une API REST publique. Aucune authentification requise : le quota web par IP couvre la navigation et les appels occasionnels, et l'usage de l'API sans clé bénéficie du taux de base ci-dessous. Pour les scripts et outils, créez une clé API et envoyez-la dans l'en-tête X-API-Key. Créez-en une sur votre page de profil. Une clé regroupe vos requêtes par identité plutôt que par IP (stable entre réseaux, jamais partagée avec d'autres utilisateurs derrière le même NAT) et vous donne un suivi d'utilisation ; son plafond de palier s'applique par endpoint. Les réponses contiennent X-RateLimit-Remaining / X-RateLimit-Reset pour que vous puissiez espacer vos requêtes.
Limites de débit
| Trafic du site | 300/minute | par IP |
| Sans clé API | 15/minute | |
| Utilisateur enregistré | 60/minute | créez-en une sur votre profil |
| Académique | 100/minute | accordé sur demande |
| Payant | 120/minute | soutiens |
Tous les plafonds comptent par endpoint : le tableau est votre quota sur chaque route, pas un pool global. Quelques endpoints lourds ont leur propre budget qui s'applique à tout appelant, clé ou non (voir l'export de parties ci-dessous ; le ZIP de langue est à 10/heure). Surveillez X-RateLimit-Remaining et patientez en cas de 429 (Retry-After est renseigné).
Export de parties en masse
GET /api/exports/runs?limit=1000&start=2026-06-01T00:00:00ZDiffuse les parties officielles en JSONL, une partie par ligne.
limit Borne la page ; une page pleine renvoie un curseur pour la suivante.start / end Restreignent à une fenêtre semi-ouverte de date de soumission. Gardez-les constants pendant la pagination ; le curseur ne les intègre pas.Cet endpoint dispose de son propre budget de 120 crédits par heure, partagé entre appelants avec et sans clé : une requête paginée coûte 1 crédit, une récupération sans limite en coûte 60. La synchronisation continue fonctionne donc mieux par récupérations paginées espacées d'environ 30 s ; en cas de 429, respectez Retry-After et reprenez avec le même curseur.
Besoin de tout le corpus ? Un appel sans paramètre redirige vers un fichier statique régénéré une fois par jour, /exports/runs-latest.jsonl.gz, avec la même forme de ligne ; /api/exports/runs/manifest indique quand il a été généré et combien de parties il contient. Chaque ligne contient player_token, un identifiant pseudonyme stable du compte ayant soumis la partie, null pour les parties anonymes.
Un seul correctif ? /api/exports/runs?version=v0.111.0 redirige vers un fichier statique par version issu de la carte versions du manifeste, /exports/runs-v0.111.0.jsonl.gz ; combiné à limit et cursor, il parcourt un seul correctif par pages.
URL de base
https://spire-codex.comCanal bêta (contenu non publié de la branche bêta Steam) : ajoutez ceci à n'importe quel endpoint d'entité : ?channel=beta. Version bêta actuelle : /api/beta/version. Diff complet par rapport à 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.
Endpoints
Documentation interactive complète (générée automatiquement depuis le backend, toujours à jour) : /docs
Entités
Agrégations et recherches
Languages
Communauté et soumissions
Téléchargements en masse
Multilingue
Ajoutez ce paramètre de requête à n'importe quel endpoint : ?lang=jpn. 15 langues prises en charge :
eng, deu, esp, fra, ita, jpn, kor, pol, ptb, rus, spa, tha, tur, zhs, zht
Démarrage rapide
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 de mini-carte
Reproduisez la miniature de carte du jeu (utilisée sur les écrans Historique des parties / Game Over) dans n'importe quel projet web. Six calques PNG composés avec mask-image en CSS, sans canvas, sans WebGL, juste des sprites teintés. Les couleurs viennent directement du code décompilé du jeu : NTinyCard, CardPoolModel.DeckEntryCardColor.
Aperçu



Ironclad / Attack / Common


Silent / Skill / Uncommon


Defect / Power / Rare


Necrobinder / Skill / Rare


Regent / Attack / Uncommon


Curse


Event


QuestFichiers de sprites
Les 10 PNG sont servis avec CORS activé, placez l'URL de base devant chaque nom de fichier. Chaque sprite fait 128×128, RGBA, blanc sur transparent (conçu pour être teinté en 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 rarityCouleurs de pool (dos de carte)
Source : CardPoolModel.DeckEntryCardColor. Faites-les correspondre au champ color renvoyé par /api/cards.
Couleurs de rareté (bannière)
Source : NTinyCard.GetBannerColor. Faites-les correspondre au champ rarity.
Recette HTML + CSS minimale
Nom de fichier du portrait : attack = Cartes d'Attaque, power = Cartes de Pouvoir, skill = tout le reste (Compétence, Statut, Malédiction, …)
<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>Composant React
Version React prête à l'emploi. Source : 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" />Images de cartes complètes
Chaque carte de /api/cards inclut deux URL prêtes à l'emploi de la carte complète rendue par le jeu (cadre, illustration, bannière et texte, exactement comme en jeu). Les cartes des anciens sont des webp animés.
image_url_card— La carte de base. null pour la seule carte sans rendu (mad_science) ; utilisez alors image_url (l'illustration du portrait) en repli.image_url_card_upg— La carte améliorée. null quand la carte n'a pas d'amélioration.
// 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"
}Les rendus localisés se trouvent dans un sous-dossier de langue, par exemple : cards-full/stable/jpn/bash.webp. Les 15 langues sont disponibles.
Rendus de cartes enchantées
Chaque carte est aussi rendue avec chaque enchantement qu'elle peut légalement recevoir, exactement comme l'aperçu d'enchantement en jeu la dessine (badge, valeur et texte ajouté). Les URL suivent un seul modèle :
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}: identifiants en minuscules issus de /api/enchantments et /api/cards (ex. sharp, corrupted, sown).- Seules les combinaisons valides de carte et d'enchantement existent (l'export utilise les règles d'applicabilité du jeu), une combinaison invalide renvoie donc 404. Les champs card_type / applicable_to de /api/enchantments décrivent quelles cartes sont éligibles.
- Des variantes de base et améliorée existent pour chaque combinaison, dans les 14 langues, avec le texte d'enchantement entièrement localisé.
Exports de données
Téléchargez toutes les données du jeu en une seule archive ZIP. Chaque archive contient des fichiers JSON pour chaque type d'entité (cartes, reliques, monstres, pouvoirs et plus).
Documentation interactive de l'API
Documentation Swagger/OpenAPI complète avec fonction d'essai.
Ouvrir la documentation de l'API →Open source
Spire Codex est open source. Le pipeline d'extraction des données, l'API et le frontend sont tous disponibles sur GitHub.
Voir sur GitHub →