Slay the Spire 2 (STS2) Desarrolladores
Crea herramientas, bots y contenido con los datos de Spire Codex. Todo es gratuito y abierto.
Widget de tooltips
Añade tooltips al estilo Wowhead para cartas, reliquias y pociones a cualquier sitio web. Una etiqueta script, cero dependencias.
Instalación
<script src="https://spire-codex.com/widget/spire-codex-tooltip.js"></script>Sintaxis
[[Strike]]Tooltip de carta (tipo por defecto)[[card:Bash]]Carta (explícito)[[relic:Burning Blood]]Reliquia[[potion:Fire Potion]]Poción[[character:Ironclad]]Personaje[[monster:Jaw Worm]]Monstruo[[power:Strength]]Poder[[event:Neow]]Evento[[encounter:Lagavulin]]Encuentro[[enchantment:Sharp]]Encantamiento[[keyword:Exhaust]]Palabra clave[[orb:Lightning]]Orbe[[affliction:Bound]]Aflicción[[achievement:Minimalist]]LogroAPI de JavaScript
SpireCodex.scan()Vuelve a escanear la página en busca de nuevos patrones [[...]] (para SPA)SpireCodex.scan(element)Escanea un elemento DOM concretoWidget de registro de cambios
Incrusta un visor de cambios compacto e interactivo que muestra el historial de actualizaciones de Spire Codex con cambio de versión.
Instalación
<div id="scx-changelog"></div>
<script src="https://spire-codex.com/widget/spire-codex-changelog.js"></script>data-version="1.0.4"Muestra una versión concreta (por defecto: la última)API REST
Base de datos completa del juego accesible a través de una API REST pública. Sin autenticación: la cuota web por IP cubre la navegación y las llamadas ocasionales, y el uso de la API sin clave recibe la tarifa base de abajo. Para scripts y herramientas, crea una clave de API y envíala en la cabecera X-API-Key. Crea una en tu página de perfil. Una clave agrupa tus peticiones por identidad en lugar de por IP (estable entre redes, nunca compartida con otros usuarios tras el mismo NAT) y te da seguimiento de uso; el límite de su nivel se aplica por endpoint. Las respuestas incluyen X-RateLimit-Remaining / X-RateLimit-Reset para que puedas dosificar las peticiones.
Límites de peticiones
| Tráfico web | 300/minute | por IP |
| Sin clave de API | 15/minute | |
| Usuario registrado | 60/minute | crea una en tu perfil |
| Académico | 100/minute | se concede bajo petición |
| De pago | 120/minute | colaboradores |
Todos los límites cuentan por endpoint: la tabla es tu cuota en cada ruta, no un fondo global. Algunos endpoints pesados tienen sus propios presupuestos que se aplican a todos los llamantes sin importar la clave (ver la exportación de partidas más abajo; el ZIP de idioma es 10/hora). Vigila X-RateLimit-Remaining y espera ante un 429 (se envía Retry-After).
Exportación masiva de partidas
GET /api/exports/runs?limit=1000&start=2026-06-01T00:00:00ZTransmite las partidas oficiales como JSONL, una partida por línea.
limit Limita la página; una página completa devuelve un cursor para la siguiente.start / end Restringen a una ventana semiabierta de fecha de envío. Mantenlos constantes al paginar; el cursor no los incluye.Este endpoint tiene su propio presupuesto de 120 créditos por hora, compartido por llamantes con y sin clave: una petición paginada cuesta 1 crédito, una descarga sin límite cuesta 60. La sincronización continua funciona mejor con descargas paginadas espaciadas ~30 s; ante un 429, respeta Retry-After y reanuda con el mismo cursor.
¿Necesitas todo el corpus? Una llamada sin parámetros redirige a un archivo estático regenerado una vez al día, /exports/runs-latest.jsonl.gz, con la misma forma de línea; /api/exports/runs/manifest indica cuándo se generó y cuántas partidas contiene. Cada línea incluye player_token, un identificador seudónimo estable de la cuenta que envió la partida, null en partidas anónimas.
¿Solo un parche? /api/exports/runs?version=v0.111.0 redirige a un archivo estático por versión del mapa versions del manifiesto, /exports/runs-v0.111.0.jsonl.gz; combinado con limit y cursor pagina en su lugar un único parche.
URL base
https://spire-codex.comCanal beta (contenido no publicado de la rama beta de Steam): añade esto a cualquier endpoint de entidad: ?channel=beta. Versión beta actual: /api/beta/version. Diferencias completas respecto 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.
Endpoints
Documentación interactiva completa (generada automáticamente desde el backend, siempre actual): /docs
Entidades
Agregaciones y consultas
Languages
Comunidad y envíos
Descargas masivas
Multiidioma
Añade este parámetro de consulta a cualquier endpoint: ?lang=jpn. 15 idiomas compatibles:
eng, deu, esp, fra, ita, jpn, kor, pol, ptb, rus, spa, tha, tur, zhs, zht
Inicio rápido
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 carta en miniatura
Reproduce la miniatura de carta del juego (usada en las pantallas de Historial de partidas / Fin de partida) en cualquier proyecto web. Seis capas PNG compuestas con mask-image de CSS, sin canvas, sin WebGL, solo sprites teñidos. Los colores salen directamente del código descompilado del juego: NTinyCard, CardPoolModel.DeckEntryCardColor.
Vista previa



Ironclad / Attack / Common


Silent / Skill / Uncommon


Defect / Power / Rare


Necrobinder / Skill / Rare


Regent / Attack / Uncommon


Curse


Event


QuestRecursos de sprites
Los 10 PNG se sirven con CORS habilitado, antepón la URL base a cada nombre de archivo. Cada sprite es de 128×128, RGBA, blanco sobre transparente (pensado para teñirse con 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 rarityColores de reserva (dorso de carta)
Fuente: CardPoolModel.DeckEntryCardColor. Compáralos con el campo color que devuelve /api/cards.
Colores de rareza (banner)
Fuente: NTinyCard.GetBannerColor. Compáralos con el campo rarity.
Receta mínima de HTML + CSS
Nombre de archivo del retrato: attack = Cartas de Ataque, power = Cartas de Poder, skill = todo lo demás (Habilidad, Estado, Maldición, …)
<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 de React
Versión de React lista para usar. Fuente: 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" />Imágenes completas de cartas
Cada carta de /api/cards incluye dos URL listas para usar de la carta completa renderizada por el juego (marco, arte, banner y texto, exactamente como se ve en el juego). Las cartas de ancestros son webp animados.
image_url_card— La carta base. null para la única carta sin render (mad_science); usa image_url (el arte del retrato) como alternativa ahí.image_url_card_upg— La carta mejorada. null cuando la carta no tiene mejora.
// 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"
}Los renders localizados están en una subcarpeta de idioma, por ejemplo: cards-full/stable/jpn/bash.webp. Los 15 idiomas están disponibles.
Renders de cartas encantadas
Cada carta también se renderiza con cada encantamiento que puede recibir legalmente, exactamente como la dibuja la vista previa de encantamiento del juego (insignia, valor y texto añadido). Las URL siguen un único patrón:
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}: ids en minúsculas de /api/enchantments y /api/cards (p. ej. sharp, corrupted, sown).- Solo existen combinaciones válidas de carta y encantamiento (la exportación usa las reglas de aplicabilidad del propio juego), así que una combinación inválida da 404. Los campos card_type / applicable_to de /api/enchantments describen qué cartas cumplen.
- Existen variantes base y mejorada para cada combinación, en los 14 idiomas, con el texto del encantamiento totalmente localizado.
Exportaciones de datos
Descarga todos los datos del juego en un único archivo ZIP. Cada archivo contiene ficheros JSON para cada tipo de entidad (cartas, reliquias, monstruos, poderes y más).
Documentación interactiva de la API
Documentación completa Swagger/OpenAPI con función para probar las llamadas.
Abrir la documentación de la API →Código abierto
Spire Codex es de código abierto. El pipeline de extracción de datos, la API y el frontend están disponibles en GitHub.
Ver en GitHub →