Slay the Spire 2 (STS2) Desenvolvedores
Crie ferramentas, bots e conteúdo com os dados do Spire Codex. Tudo é gratuito e aberto.
Widget de tooltip
Adicione tooltips ao passar o mouse no estilo Wowhead para cartas, relíquias e poções em qualquer site. Uma tag script, zero dependências.
Instalação
<script src="https://spire-codex.com/widget/spire-codex-tooltip.js"></script>Sintaxe
[[Strike]]Tooltip de carta (tipo padrão)[[card:Bash]]Carta (explícito)[[relic:Burning Blood]]Relíquia[[potion:Fire Potion]]Poção[[character:Ironclad]]Personagem[[monster:Jaw Worm]]Monstro[[power:Strength]]Poder[[event:Neow]]Evento[[encounter:Lagavulin]]Encontro[[enchantment:Sharp]]Encantamento[[keyword:Exhaust]]Palavra-chave[[orb:Lightning]]Orbe[[affliction:Bound]]Aflição[[achievement:Minimalist]]ConquistaAPI JavaScript
SpireCodex.scan()Verifica a página novamente em busca de novos padrões [[...]] (para SPAs)SpireCodex.scan(element)Verifica um elemento DOM específicoWidget de changelog
Incorpore um visualizador de changelog compacto e interativo mostrando o histórico de atualizações do Spire Codex com troca de versão.
Instalação
<div id="scx-changelog"></div>
<script src="https://spire-codex.com/widget/spire-codex-changelog.js"></script>data-version="1.0.4"Mostra uma versão específica (padrão: mais recente)API REST
Banco de dados completo do jogo acessível por uma API REST pública. Sem autenticação: a cota do site por IP cobre navegação e chamadas casuais, e o uso da API sem chave recebe a taxa base abaixo. Para scripts e ferramentas, crie uma chave de API e envie-a no cabeçalho X-API-Key. Crie uma na página do seu perfil. Uma chave agrupa suas requisições por identidade em vez de IP (estável entre redes, nunca compartilhada com outros usuários atrás do mesmo NAT) e oferece acompanhamento de uso; o limite do nível se aplica por endpoint. As respostas trazem X-RateLimit-Remaining / X-RateLimit-Reset para você dosar as requisições.
Limites de requisições
| Tráfego do site | 300/minute | por IP |
| Sem chave de API | 15/minute | |
| Usuário registrado | 60/minute | crie uma no seu perfil |
| Acadêmico | 100/minute | concedido sob solicitação |
| Pago | 120/minute | apoiadores |
Todos os limites contam por endpoint: a tabela é a sua cota em cada rota, não um pool global. Alguns endpoints pesados têm orçamentos próprios que valem para todo chamador, com ou sem chave (veja a exportação de partidas abaixo; o ZIP de idioma é 10/hora). Observe X-RateLimit-Remaining e recue ao receber 429 (Retry-After é definido).
Exportação em massa de partidas
GET /api/exports/runs?limit=1000&start=2026-06-01T00:00:00ZTransmite as partidas oficiais como JSONL, uma partida por linha.
limit Limita a página; uma página cheia retorna um cursor para a próxima.start / end Restringem a uma janela semiaberta de data de envio. Mantenha-os constantes ao paginar; o cursor não os inclui.Este endpoint tem orçamento próprio de 120 créditos por hora, compartilhado por chamadores com e sem chave: uma requisição paginada custa 1 crédito, uma busca sem limite custa 60. Sincronização contínua funciona melhor com buscas paginadas espaçadas ~30 s; em 429, respeite o Retry-After e retome com o mesmo cursor.
Precisa do corpus inteiro? Uma chamada sem parâmetros redireciona para um arquivo estático reconstruído uma vez por dia, /exports/runs-latest.jsonl.gz, com o mesmo formato de linha; /api/exports/runs/manifest informa quando foi gerado e quantas runs contém. Cada linha traz player_token, um identificador pseudônimo estável da conta que enviou a run, null em runs anônimas.
Só um patch? /api/exports/runs?version=v0.111.0 redireciona para um arquivo estático por versão do mapa versions do manifesto, /exports/runs-v0.111.0.jsonl.gz; combinado com limit e cursor, ele pagina um único patch.
URL base
https://spire-codex.comCanal beta (conteúdo não lançado do ramo beta da Steam): adicione isto a qualquer endpoint de entidade: ?channel=beta. Versão beta atual: /api/beta/version. Diferença completa em relação ao 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
Documentação interativa completa (gerada automaticamente do backend, sempre atual): /docs
Entidades
Agregações e consultas
Languages
Comunidade e envios
Downloads em massa
Vários idiomas
Adicione este parâmetro de consulta a qualquer endpoint: ?lang=jpn. 15 idiomas suportados:
eng, deu, esp, fra, ita, jpn, kor, pol, ptb, rus, spa, tha, tur, zhs, zht
Início 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 em miniatura
Reproduza a miniatura de carta do jogo (usada nas telas de Histórico de partidas / Fim de jogo) em qualquer projeto web. Seis camadas PNG compostas com mask-image do CSS, sem canvas, sem WebGL, só sprites coloridos. As cores vêm direto do código descompilado do jogo: NTinyCard, CardPoolModel.DeckEntryCardColor.
Prévia



Ironclad / Attack / Common


Silent / Skill / Uncommon


Defect / Power / Rare


Necrobinder / Skill / Rare


Regent / Attack / Uncommon


Curse


Event


QuestRecursos de sprite
Todos os 10 PNGs são servidos com CORS habilitado, basta colocar a URL base antes de cada nome de arquivo. Cada sprite tem 128×128, RGBA, branco sobre transparente (feito para ser colorido 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 rarityCores do conjunto (verso da carta)
Fonte: CardPoolModel.DeckEntryCardColor. Compare com o campo color retornado por /api/cards.
Cores de raridade (faixa)
Fonte: NTinyCard.GetBannerColor. Compare com o campo rarity.
Receita mínima de HTML + CSS
Nome do arquivo do retrato: attack = Cartas de Ataque, power = Cartas de Poder, skill = todo o resto (Habilidade, Status, Maldição, …)
<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
Versão React pronta para 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" />Imagens completas de cartas
Cada carta de /api/cards inclui duas URLs prontas para uso da carta completa renderizada pelo jogo (moldura, arte, faixa e texto, exatamente como no jogo). Cartas dos ancestrais são webps animados.
image_url_card— A carta base. null para a única carta sem render (mad_science); use image_url (a arte do retrato) como alternativa nesse caso.image_url_card_upg— A carta aprimorada. null quando a carta não tem aprimoramento.
// 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"
}Renders localizados ficam em uma subpasta de idioma, por exemplo: cards-full/stable/jpn/bash.webp. Todos os 15 idiomas estão disponíveis.
Renders de cartas encantadas
Cada carta também é renderizada com cada encantamento que pode receber legalmente, exatamente como a prévia de encantamento do jogo a desenha (emblema, valor e texto adicionado). As URLs seguem um único padrão:
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 em minúsculas de /api/enchantments e /api/cards (ex.: sharp, corrupted, sown).- Só existem combinações válidas de carta e encantamento (a exportação usa as regras de aplicabilidade do próprio jogo), então uma combinação inválida retorna 404. Os campos card_type / applicable_to em /api/enchantments descrevem quais cartas se qualificam.
- Existem variantes base e aprimorada para cada combinação, em todos os 14 idiomas, com o texto do encantamento totalmente localizado.
Exportações de dados
Baixe todos os dados do jogo em um único arquivo ZIP. Cada arquivo contém JSONs para cada tipo de entidade (cartas, relíquias, monstros, poderes e mais).
Documentação interativa da API
Documentação completa Swagger/OpenAPI com função de teste.
Abrir documentação da API →Código aberto
O Spire Codex é de código aberto. O pipeline de extração de dados, a API e o frontend estão todos disponíveis no GitHub.
Ver no GitHub →