Slay the Spire 2 (STS2) นักพัฒนา
สร้างเครื่องมือ บอท และคอนเทนต์ด้วยข้อมูลของ Spire Codex ทุกอย่างฟรีและเปิดกว้าง
วิดเจ็ตทูลทิป
เพิ่มทูลทิปแบบ Wowhead สำหรับการ์ด เรลิก และโพชั่นในเว็บไซต์ใดก็ได้ แท็ก script เดียว ไม่มี dependency
การติดตั้ง
<script src="https://spire-codex.com/widget/spire-codex-tooltip.js"></script>ไวยากรณ์
[[Strike]]ทูลทิปการ์ด (ประเภทเริ่มต้น)[[card:Bash]]การ์ด (ระบุชัดเจน)[[relic:Burning Blood]]เรลิก[[potion:Fire Potion]]ยา[[character:Ironclad]]ตัวละคร[[monster:Jaw Worm]]มอนสเตอร์[[power:Strength]]พลัง[[event:Neow]]อีเวนต์[[encounter:Lagavulin]]การเผชิญหน้า[[enchantment:Sharp]]เอ็นแชนต์[[keyword:Exhaust]]คีย์เวิร์ด[[orb:Lightning]]ออร์บ[[affliction:Bound]]อาการ[[achievement:Minimalist]]ความสำเร็จJavaScript API
SpireCodex.scan()สแกนหน้าใหม่เพื่อหารูปแบบ [[...]] ที่เพิ่มมา (สำหรับ SPA)SpireCodex.scan(element)สแกนองค์ประกอบ DOM ที่ระบุวิดเจ็ตบันทึกการเปลี่ยนแปลง
ฝังตัวแสดงบันทึกการเปลี่ยนแปลงแบบกะทัดรัดและโต้ตอบได้ แสดงประวัติการอัปเดตของ Spire Codex พร้อมสลับเวอร์ชัน
การติดตั้ง
<div id="scx-changelog"></div>
<script src="https://spire-codex.com/widget/spire-codex-changelog.js"></script>data-version="1.0.4"แสดงเวอร์ชันที่ระบุ (ค่าเริ่มต้น: ล่าสุด)REST API
ฐานข้อมูลเกมทั้งหมดเข้าถึงได้ผ่าน REST API สาธารณะ ไม่ต้องยืนยันตัวตน: โควตาเว็บไซต์ต่อ IP ครอบคลุมการเรียกดูและการเรียกใช้ทั่วไป ส่วนการใช้ API โดยไม่มีคีย์จะได้อัตราพื้นฐานด้านล่าง สำหรับสคริปต์และเครื่องมือ ให้สร้างคีย์ API แล้วส่งในเฮดเดอร์ X-API-Key สร้างได้ที่หน้าโปรไฟล์ของคุณ คีย์จะจัดกลุ่มคำขอของคุณตามตัวตนแทน IP (คงที่ข้ามเครือข่าย ไม่แชร์กับผู้ใช้อื่นหลัง NAT เดียวกัน) และให้การติดตามการใช้งาน เพดานของระดับใช้แยกต่อ endpoint การตอบกลับมี X-RateLimit-Remaining / X-RateLimit-Reset เพื่อให้คุณควบคุมจังหวะคำขอได้
ขีดจำกัดอัตรา
| ทราฟฟิกเว็บไซต์ | 300/minute | ต่อ IP |
| ไม่มีคีย์ API | 15/minute | |
| ผู้ใช้ที่ลงทะเบียน | 60/minute | สร้างได้ในโปรไฟล์ของคุณ |
| วิชาการ | 100/minute | ให้เมื่อร้องขอ |
| แบบชำระเงิน | 120/minute | ผู้สนับสนุน |
เพดานทั้งหมดนับแยกต่อ endpoint: ตารางคือโควตาของคุณในแต่ละเส้นทาง ไม่ใช่พูลรวม endpoint หนักบางตัวมีงบของตัวเองที่ใช้กับผู้เรียกทุกคนไม่ว่าจะมีคีย์หรือไม่ (ดูการส่งออกการเล่นด้านล่าง ZIP ภาษาอยู่ที่ 10 ครั้ง/ชั่วโมง) คอยดู X-RateLimit-Remaining และหยุดรอเมื่อเจอ 429 (มี Retry-After ให้)
ส่งออกการเล่นจำนวนมาก
GET /api/exports/runs?limit=1000&start=2026-06-01T00:00:00Zสตรีมการเล่นอย่างเป็นทางการเป็น JSONL หนึ่งการเล่นต่อบรรทัด
limit จำกัดขนาดหน้า หน้าที่เต็มจะคืน cursor สำหรับหน้าถัดไปstart / end จำกัดช่วงเวลาที่ส่งแบบครึ่งเปิด ให้คงค่าเดิมระหว่างเปลี่ยนหน้า cursor ไม่ได้เก็บค่าเหล่านี้ไว้endpoint นี้มีงบของตัวเอง 120 เครดิตต่อชั่วโมง ใช้ร่วมกันทั้งผู้เรียกที่มีคีย์และไม่มีคีย์: คำขอแบบแบ่งหน้าใช้ 1 เครดิต การดึงทั้งหมดโดยไม่จำกัดใช้ 60 เครดิต การซิงก์ต่อเนื่องจึงเหมาะกับการดึงแบบแบ่งหน้าห่างกันราว 30 วินาที หากเจอ 429 ให้ทำตาม Retry-After และเริ่มต่อด้วย cursor เดิม
ต้องการข้อมูลทั้งหมด? การเรียกโดยไม่ระบุพารามิเตอร์จะเปลี่ยนเส้นทางไปยังไฟล์สแตติกที่สร้างใหม่วันละครั้ง /exports/runs-latest.jsonl.gz ในรูปแบบบรรทัดเดียวกัน; /api/exports/runs/manifest บอกเวลาที่สร้างและจำนวนรัน แต่ละบรรทัดมี player_token ซึ่งเป็นรหัสนามแฝงคงที่ของบัญชีที่ส่ง เป็น null สำหรับรันแบบไม่ระบุตัวตน
ต้องการแค่แพตช์เดียว? /api/exports/runs?version=v0.111.0 จะเปลี่ยนเส้นทางไปยังไฟล์สแตติกรายเวอร์ชันจากแผนที่ versions ในเมนิเฟสต์ คือ /exports/runs-v0.111.0.jsonl.gz; หากรวมกับ limit และ cursor จะเลื่อนดูเฉพาะแพตช์เดียวเป็นหน้า ๆ แทน
URL พื้นฐาน
https://spire-codex.comช่องเบต้า (เนื้อหาที่ยังไม่ปล่อยจากสาขาเบต้าของ Steam): เพิ่มสิ่งนี้ต่อท้าย endpoint เอนทิตีใดก็ได้: ?channel=beta. เวอร์ชันเบต้าปัจจุบัน: /api/beta/version. ความแตกต่างทั้งหมดเทียบกับ 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
เอกสารแบบโต้ตอบฉบับเต็ม (สร้างอัตโนมัติจาก backend อัปเดตเสมอ): /docs
เอนทิตี
การรวมข้อมูลและการค้นหา
Languages
ชุมชนและการส่งข้อมูล
ดาวน์โหลดจำนวนมาก
หลายภาษา
เพิ่มพารามิเตอร์คิวรีนี้ต่อท้าย endpoint ใดก็ได้: ?lang=jpn. รองรับ 15 ภาษา:
eng, deu, esp, fra, ita, jpn, kor, pol, ptb, rus, spa, tha, tur, zhs, zht
เริ่มต้นอย่างรวดเร็ว
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));สไปรต์การ์ดขนาดจิ๋ว
สร้างภาพย่อการ์ดในเกม (ใช้ในหน้าประวัติการเล่น / Game Over) ในโปรเจกต์เว็บใดก็ได้ ใช้เลเยอร์ PNG หกชั้นประกอบด้วย CSS mask-image ไม่ต้องใช้ canvas หรือ WebGL แค่สไปรต์ที่ย้อมสี สีมาจากโค้ดเกมที่ถอดคอมไพล์โดยตรง: NTinyCard, CardPoolModel.DeckEntryCardColor.
ตัวอย่าง



Ironclad / Attack / Common


Silent / Skill / Uncommon


Defect / Power / Rare


Necrobinder / Skill / Rare


Regent / Attack / Uncommon


Curse


Event


Questไฟล์สไปรต์
PNG ทั้ง 10 ไฟล์ให้บริการโดยเปิด CORS ใส่ URL พื้นฐานไว้หน้าชื่อไฟล์แต่ละไฟล์ สไปรต์แต่ละภาพขนาด 128×128, RGBA, สีขาวบนพื้นโปร่งใส (ตั้งใจให้ย้อมสีด้วย 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 rarityสีพูล (หลังการ์ด)
ที่มา: CardPoolModel.DeckEntryCardColor. จับคู่กับฟิลด์ color ที่ /api/cards ส่งกลับมา
สีความหายาก (แบนเนอร์)
ที่มา: NTinyCard.GetBannerColor. จับคู่กับฟิลด์ rarity
สูตร HTML + CSS แบบเรียบง่าย
ชื่อไฟล์ภาพพอร์เทรต: attack = การ์ดโจมตี, power = การ์ดพาวเวอร์, skill = ที่เหลือทั้งหมด (สกิล, สถานะ, คำสาป, …)
<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
เวอร์ชัน React พร้อมใช้ ที่มา: 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" />รูปการ์ดแบบเต็ม
การ์ดทุกใบจาก /api/cards มี URL พร้อมใช้สองรายการสำหรับการ์ดเต็มที่เกมเรนเดอร์ (กรอบ ภาพ แบนเนอร์ และข้อความ เหมือนในเกมทุกประการ) การ์ดเอนเชียนต์เป็น webp แบบเคลื่อนไหว
image_url_card— การ์ดพื้นฐาน เป็น null สำหรับการ์ดใบเดียวที่ไม่มีการเรนเดอร์ (mad_science) ให้ใช้ image_url (ภาพพอร์เทรต) แทนในกรณีนั้นimage_url_card_upg— การ์ดที่อัปเกรด เป็น null เมื่อการ์ดไม่มีการอัปเกรด
// 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"
}ภาพเรนเดอร์ที่แปลแล้วอยู่ในโฟลเดอร์ย่อยของภาษา ตัวอย่างเช่น: cards-full/stable/jpn/bash.webp. มีให้ครบทั้ง 15 ภาษา
ภาพเรนเดอร์การ์ดที่เอนแชนต์
การ์ดทุกใบยังถูกเรนเดอร์พร้อมเอนแชนต์แต่ละแบบที่รับได้ตามกติกา เหมือนที่ตัวอย่างเอนแชนต์ในเกมวาดทุกประการ (ตราสัญลักษณ์ ตัวเลข และข้อความการ์ดที่เพิ่ม) URL ใช้รูปแบบเดียว:
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 ตัวพิมพ์เล็กจาก /api/enchantments และ /api/cards (เช่น sharp, corrupted, sown)- มีเฉพาะการจับคู่การ์ดกับเอนแชนต์ที่ถูกต้องเท่านั้น (การส่งออกใช้กฎการใช้งานของเกมเอง) การจับคู่ที่ไม่ถูกต้องจึงได้ 404 ฟิลด์ card_type / applicable_to ใน /api/enchantments อธิบายว่าการ์ดใบไหนเข้าเกณฑ์
- ทุกการจับคู่มีทั้งเวอร์ชันพื้นฐานและอัปเกรด ครบทั้ง 14 ภาษา พร้อมข้อความเอนแชนต์ที่แปลครบถ้วน
ส่งออกข้อมูล
ดาวน์โหลดข้อมูลเกมทั้งหมดเป็นไฟล์ ZIP เดียว แต่ละไฟล์มี JSON ของเอนทิตีทุกประเภท (การ์ด เรลิก มอนสเตอร์ พาวเวอร์ และอื่นๆ)
เอกสาร API แบบโต้ตอบ
เอกสาร Swagger/OpenAPI ฉบับเต็มพร้อมฟังก์ชันทดลองใช้
เปิดเอกสาร API →โอเพนซอร์ส
Spire Codex เป็นโอเพนซอร์ส ไปป์ไลน์ดึงข้อมูล API และ frontend ทั้งหมดอยู่บน GitHub
ดูบน GitHub →