Slay the Spire 2 (STS2) Sviluppatori
Crea strumenti, bot e contenuti con i dati di Spire Codex. Tutto è gratuito e aperto.
Widget tooltip
Aggiungi tooltip al passaggio del mouse in stile Wowhead per carte, reliquie e pozioni a qualsiasi sito. Un tag script, zero dipendenze.
Installazione
<script src="https://spire-codex.com/widget/spire-codex-tooltip.js"></script>Sintassi
[[Strike]]Tooltip carta (tipo predefinito)[[card:Bash]]Carta (esplicito)[[relic:Burning Blood]]Reliquia[[potion:Fire Potion]]Pozione[[character:Ironclad]]Personaggio[[monster:Jaw Worm]]Mostro[[power:Strength]]Potere[[event:Neow]]Evento[[encounter:Lagavulin]]Incontro[[enchantment:Sharp]]Incantesimo[[keyword:Exhaust]]Parola chiave[[orb:Lightning]]Orbe[[affliction:Bound]]Afflizione[[achievement:Minimalist]]ObiettivoAPI JavaScript
SpireCodex.scan()Riesamina la pagina per nuovi pattern [[...]] (per SPA)SpireCodex.scan(element)Esamina un elemento DOM specificoWidget changelog
Incorpora un visualizzatore di changelog compatto e interattivo con la cronologia degli aggiornamenti di Spire Codex e il cambio di versione.
Installazione
<div id="scx-changelog"></div>
<script src="https://spire-codex.com/widget/spire-codex-changelog.js"></script>data-version="1.0.4"Mostra una versione specifica (predefinita: l'ultima)API REST
Database completo del gioco accessibile tramite un'API REST pubblica. Nessuna autenticazione richiesta: la quota del sito per IP copre la navigazione e le chiamate occasionali, e l'uso dell'API senza chiave ottiene la tariffa base qui sotto. Per script e strumenti, crea una chiave API e inviala nell'header X-API-Key. Creane una nella pagina del tuo profilo. Una chiave raggruppa le tue richieste per identità invece che per IP (stabile tra reti, mai condivisa con altri utenti dietro lo stesso NAT) e ti dà il tracciamento dell'uso; il limite del suo livello si applica per endpoint. Le risposte includono X-RateLimit-Remaining / X-RateLimit-Reset per regolare il ritmo delle richieste.
Limiti di richieste
| Traffico del sito | 300/minute | per IP |
| Senza chiave API | 15/minute | |
| Utente registrato | 60/minute | creane una nel tuo profilo |
| Accademico | 100/minute | concesso su richiesta |
| A pagamento | 120/minute | sostenitori |
Tutti i limiti contano per endpoint: la tabella è la tua quota su ogni rotta, non un pool globale. Alcuni endpoint pesanti hanno budget propri che valgono per ogni chiamante a prescindere dalla chiave (vedi l'export delle partite qui sotto; lo ZIP della lingua è 10/ora). Controlla X-RateLimit-Remaining e rallenta in caso di 429 (Retry-After è impostato).
Export massivo di partite
GET /api/exports/runs?limit=1000&start=2026-06-01T00:00:00ZTrasmette le partite ufficiali come JSONL, una partita per riga.
limit Limita la pagina; una pagina piena restituisce un cursore per la successiva.start / end Limitano a una finestra semiaperta di data di invio. Tienili costanti durante la paginazione; il cursore non li include.Questo endpoint ha un budget proprio di 120 crediti all'ora, condiviso tra chiamanti con e senza chiave: una richiesta paginata costa 1 credito, un prelievo illimitato (senza limit) ne costa 60. La sincronizzazione continua funziona quindi meglio con prelievi paginati distanziati di ~30 s; in caso di 429, rispetta Retry-After e riprendi con lo stesso cursore.
Serve l'intero corpus? Una chiamata senza parametri reindirizza a un file statico rigenerato una volta al giorno, /exports/runs-latest.jsonl.gz, con la stessa forma di riga; /api/exports/runs/manifest indica quando è stato generato e quante partite contiene. Ogni riga include player_token, un identificatore pseudonimo stabile dell'account che ha inviato la partita, null per le partite anonime.
Solo una patch? /api/exports/runs?version=v0.111.0 reindirizza a un file statico per versione dalla mappa versions del manifest, /exports/runs-v0.111.0.jsonl.gz; combinato con limit e cursor scorre invece una sola patch a pagine.
URL di base
https://spire-codex.comCanale beta (contenuti non pubblicati dal ramo beta di Steam): aggiungi questo a qualsiasi endpoint di entità: ?channel=beta. Versione beta attuale: /api/beta/version. Diff completo rispetto a 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.
Endpoint
Documentazione interattiva completa (generata automaticamente dal backend, sempre aggiornata): /docs
Entità
Aggregazioni e ricerche
Languages
Community e invii
Download massivi
Multilingua
Aggiungi questo parametro di query a qualsiasi endpoint: ?lang=jpn. 15 lingue supportate:
eng, deu, esp, fra, ita, jpn, kor, pol, ptb, rus, spa, tha, tur, zhs, zht
Avvio rapido
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 carta in miniatura
Riproduci la miniatura della carta usata in gioco (nelle schermate Cronologia partite / Game Over) in qualsiasi progetto web. Sei livelli PNG composti con mask-image CSS, niente canvas, niente WebGL, solo sprite colorati. I colori provengono direttamente dal codice decompilato del gioco: NTinyCard, CardPoolModel.DeckEntryCardColor.
Anteprima



Ironclad / Attack / Common


Silent / Skill / Uncommon


Defect / Power / Rare


Necrobinder / Skill / Rare


Regent / Attack / Uncommon


Curse


Event


QuestRisorse sprite
Tutti i 10 PNG sono serviti con CORS abilitato, anteponi l'URL di base a ogni nome file. Ogni sprite è 128×128, RGBA, bianco su trasparente (pensato per essere colorato via 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 rarityColori del pool (dorso carta)
Fonte: CardPoolModel.DeckEntryCardColor. Abbinali al campo color restituito da /api/cards.
Colori di rarità (banner)
Fonte: NTinyCard.GetBannerColor. Abbinali al campo rarity.
Ricetta minima HTML + CSS
Nome file del ritratto: attack = Carte Attacco, power = Carte Potere, skill = tutto il resto (Abilità, Stato, Maledizione, …)
<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>Componente React
Versione React pronta all'uso. Fonte: 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" />Immagini complete delle carte
Ogni carta di /api/cards include due URL pronti all'uso della carta completa renderizzata dal gioco (cornice, illustrazione, banner e testo, esattamente come appare in gioco). Le carte degli antichi sono webp animati.
image_url_card— La carta base. null per l'unica carta senza render (mad_science); lì usa image_url (l'illustrazione del ritratto) come ripiego.image_url_card_upg— La carta potenziata. null quando la carta non ha potenziamento.
// 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"
}I render localizzati si trovano in una sottocartella per lingua, ad esempio: cards-full/stable/jpn/bash.webp. Tutte le 15 lingue sono disponibili.
Render delle carte incantate
Ogni carta viene renderizzata anche con ogni incantesimo che può legalmente ricevere, esattamente come la disegna l'anteprima incantesimo in gioco (badge, valore e testo aggiunto). Gli URL seguono un unico schema:
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}: id minuscoli da /api/enchantments e /api/cards (es. sharp, corrupted, sown).- Esistono solo le combinazioni valide di carta e incantesimo (l'export usa le regole di applicabilità del gioco), quindi una combinazione non valida restituisce 404. I campi card_type / applicable_to su /api/enchantments descrivono quali carte sono idonee.
- Esistono varianti base e potenziata per ogni combinazione, in tutte le 14 lingue, con il testo dell'incantesimo completamente localizzato.
Esportazioni dati
Scarica tutti i dati del gioco in un unico archivio ZIP. Ogni archivio contiene file JSON per ogni tipo di entità (carte, reliquie, mostri, poteri e altro).
15 lingue disponibili. Download di esempio: Giapponese, Coreano, Cinese, Francese, Tedesco
Documentazione interattiva dell'API
Documentazione Swagger/OpenAPI completa con funzione di prova.
Apri la documentazione dell'API →Open source
Spire Codex è open source. La pipeline di estrazione dei dati, l'API e il frontend sono tutti disponibili su GitHub.
Vedi su GitHub →