Developers
Build tools, bots, and content with Spire Codex data. Everything is free and open.
Tooltip Widget
Add Wowhead-style hoverable tooltips for cards, relics, and potions to any website. One script tag, zero dependencies.
Installation
<script src="https://spire-codex.com/widget/spire-codex-tooltip.js"></script>Syntax
[[Strike]]Card tooltip (default type)[[card:Bash]]Card (explicit)[[relic:Burning Blood]]Relic[[potion:Fire Potion]]Potion[[character:Ironclad]]Character[[monster:Jaw Worm]]Monster[[power:Strength]]Power[[event:Neow]]Event[[encounter:Lagavulin]]Encounter[[enchantment:Sharp]]Enchantment[[keyword:Exhaust]]Keyword[[orb:Lightning]]Orb[[affliction:Bound]]Affliction[[achievement:Minimalist]]AchievementJavaScript API
SpireCodex.scan()Re-scan the page for new [[...]] patterns (for SPAs)SpireCodex.scan(element)Scan a specific DOM elementChangelog Widget
Embed a compact, interactive changelog viewer showing Spire Codex update history with version switching.
Installation
<div id="scx-changelog"></div>
<script src="https://spire-codex.com/widget/spire-codex-changelog.js"></script>data-version="1.0.4"Show a specific version (default: latest)REST API
Full game database accessible via a public REST API. No authentication required for casual use (rate limited per IP). For scripts and tools, create an API key on your profile page and send it as the X-API-Key header to get your own dedicated rate limit (counted per endpoint) instead of sharing the per-IP cap. Responses carry X-RateLimit-Remaining / X-RateLimit-Reset so you can pace requests.
Rate limits
| No key | 300/minute | per IP |
| General | 15/minute | any issued key |
| Registered | 60/minute | create one on your profile |
| Academia | 100/minute | granted on request |
| Paid | 120/minute | supporters |
All caps count per endpoint. Watch X-RateLimit-Remaining and back off on 429 (Retry-After is set).
Base URL
https://spire-codex.comBeta channel (unreleased content from the Steam beta branch): add ?channel=beta to any entity endpoint. The current beta version is at /api/beta/version and the full diff against main at /api/beta/diff.
Endpoints
Full interactive docs at /docs (auto-generated from the backend, always current).
Entities
Aggregations & Lookups
Community & Submissions
Bulk Downloads
Multi-Language
Add ?lang=jpn to any endpoint. 15 languages supported:
eng, deu, esp, fra, ita, jpn, kor, pol, ptb, rus, spa, tha, tur, zhs, zht
Quick Start
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));Tiny Card Sprite
Reproduce the game’s in-run card thumbnail (used on the Run History / Game Over screens) in any web project. Six PNG layers composited with CSS mask-image, no canvas, no WebGL, just tinted sprites. Colors come straight from the decompiled NTinyCard and CardPoolModel.DeckEntryCardColor.
Preview



Ironclad / Attack / Common


Silent / Skill / Uncommon


Defect / Power / Rare


Necrobinder / Skill / Rare


Regent / Attack / Uncommon


Curse


Event


QuestSprite assets
All 10 PNGs are served with CORS enabled, drop the base URL in front of each filename. Each sprite is 128×128, RGBA, white-on-transparent (meant to be tinted 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 rarityPool (card back) colors
From CardPoolModel.DeckEntryCardColor. Match these against the color field returned by /api/cards.
Rarity (banner) colors
From NTinyCard.GetBannerColor. Match against rarity.
Minimal HTML + CSS recipe
Portrait filename: attack for Attack cards, power for Power cards, skill for everything else (Skill, Status, Curse, …).
<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 component
Drop-in React version (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" />Full card images
Every card from /api/cards includes two ready-to-use URLs for the full game-rendered card (frame, art, banner, and text, exactly as it looks in-game). Ancient cards are animated webps.
image_url_card— the base card.nullfor the one card with no render (mad_science); fall back toimage_url(the portrait art) there.image_url_card_upg— the upgraded card.nullwhen the card has no upgrade.
// 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"
}Localized renders live under a language subfolder, e.g. cards-full/stable/jpn/bash.webp. All 15 languages are available.
Enchanted card renders
Every card is also rendered with each enchantment it can legally take, exactly as the in-game enchant preview draws it (badge, amount, and added card text). The URLs follow one pattern:
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}and{card}are lowercase ids from/api/enchantmentsand/api/cards(e.g.sharp,corrupted,sown).- Only valid card and enchantment combinations exist (the export uses the game's own applicability rules), so an invalid combo is a 404. The
card_type/applicable_tofields on/api/enchantmentsdescribe which cards qualify. - Base and upgraded variants exist for every combo, in all 14 languages, with the enchantment text fully localized.
Data Exports
Download all game data as a single ZIP archive. Each archive contains JSON files for every entity type (cards, relics, monsters, powers, and more).
Interactive API Docs
Full Swagger/OpenAPI documentation with try-it-out functionality.
Open API Docs →Open Source
Spire Codex is open source. The data extraction pipeline, API, and frontend are all available on GitHub.
View on GitHub →