Pokékipe Public API
วิเคราะห์ข้อมูล Pokémon แข่งขันฟรี ดึงมาจาก usage stats รายเดือนของ Smogon รีเฟรชทุกเดือน ใช้งานทั่วไปไม่ต้องมีบัญชี สร้างคีย์ส่วนตัวจาก Account Settings เพื่อยกเพดาน rate-limit สำหรับ bulk pull
Endpoints
100+
Formats
30+
รีเฟรช
รายเดือน
Auth
Optional
License
CC BY 4.0
ทำไมถึงมีอยู่
API นี้คืออะไร และไม่ใช่อะไร
สี่เรื่องที่ต้องรู้ก่อนเขียน code บรรทัดแรกที่ยิง /api/v1/
API นี้คืออะไร
JSON surface แบบ read-only ทับข้อมูล Pokémon แข่งขันของทั้งโลก ถาม "meta ใน Gen 9 OU ที่ 1500+ ELO เดือนนี้คืออะไร?" หรือ "ใคร counter Pokémon ตัวนี้ใน top cut ของทัวร์นี้?" แล้วได้คำตอบ call เดียว shape นิ่งและมี doc
ข้อมูลมาจากไหน
battle log รายเดือนของ Smogon (chaos JSON สาธารณะ), feed ทัวร์นาเมนต์ทางการ (Pokémon Company, VGC, Smogon Tour), และแหล่งจาก community เช่น Limitless TCG สำหรับ event ที่ community จัด Pokékipe มี pipeline ingestion, normalization และ enrichment ของตัวเองอยู่ด้านบน แล้วเปิดผลที่ clean แล้วออกมาใหม่
API นี้ไม่ใช่อะไร
ไม่ใช่ bridge ของ Pokémon Showdown แบบ live, ไม่ใช่ simulator การต่อสู้, ไม่ใช่ endpoint damage calculator, ไม่ใช่ engine สร้างทีม เครื่องมือพวกนี้อยู่บนเว็บ API คือ layer ข้อมูลที่เครื่องมือพวกนั้นนั่งอยู่บน
เครดิตต้นทาง
ให้เครดิตที่ควรให้ Smogon, ผู้ export chaos-format JSON และ community ผู้เล่นที่ลงเกมทุกเดือน คือเหตุผลที่ dataset นี้มีอยู่ Pokékipe ทำให้มัน query ได้ ไม่ได้เป็นเจ้าของข้อมูลต้นทาง
เริ่มใช้งาน
Call แรกของคุณ ใน 30 วินาที
สามตัวอย่าง copy-paste ที่ดึง format catalog ไม่ต้องมี API key ไม่ต้อง setup ไม่ต้องสมัคร เลือกแท็บภาษา paste แล้วรัน
curl -s https://pokekipe.com/api/v1/formats \
| jq '.[0:3]'แทน path ด้วย endpoint ใด ๆ ใน reference ด้านล่าง call แรกควรกลับมาใน 1 วินาทีบน cache ที่ warm
การยืนยันตัวตน
การยืนยันตัวตนและ rate limit
เรียก API แบบไม่ระบุตัวตนใช้งานได้สำหรับงานทั่วไป คีย์ส่วนตัว (ฟรี สร้างได้จากการตั้งค่าบัญชี) จะยกเพดาน rate-limit ให้นักวิเคราะห์และนักสร้างเครื่องมือที่ดึงข้อมูลจำนวนมาก คีย์ไม่ปลดล็อก endpoint ใหม่ มันแค่ยกเพดานเท่านั้น
Anonymous, ไม่มีคีย์
Defaultยิง call โดยไม่ต้องมี header ใด ๆ bucket ผูกกับ IP ของคุณ ดังนั้น script เล็ก ๆ หรือ LLM agent ที่ยิงไม่กี่ request ต่อ session จะไม่ชน limit
- ไม่ต้องมีบัญชี ไม่ต้องสมัคร ไม่ต้องตั้ง header
- Bucket ต่อ IP เหมาะกับ script ad-hoc และ tool-use ของ LLM agent
- ชน 429 ถ้าคุณดึง bulk ต่อเนื่อง เปลี่ยนไปใช้คีย์ส่วนตัว
ต่อนาที
60
ต่อวัน
5,000
Authenticated, ด้วยคีย์ส่วนตัว
แนะนำสำหรับ bulkส่งคีย์ของคุณเป็น X-API-Key (หรือ Authorization: Bearer pk_live_…) call แบบ anonymous ยังใช้งานคู่กันได้ คีย์แค่ยกเพดาน ไม่ปลดล็อก endpoint ใหม่
- Bucket ต่อ user: IP เปลี่ยนจะไม่รีเซ็ตการนับ
- เพดานสูงกว่าบนทุก per-route limit
- สูงสุด 5 คีย์ที่ active ต่อบัญชี เพิกถอนได้ทุกเมื่อ
ต่อนาที
600
ต่อวัน
100,000
Headers ในทุก response
ทุก response ที่สำเร็จจะแนบ rate-limit headers ด้านล่าง เพื่อให้ client คุม pace ตัวเองได้โดยไม่ต้องลองใหม่ อ่านครั้งเดียวต่อ response แล้วชะลอทันทีที่ Remaining เหลือไม่กี่ request อย่ารอให้เป็นศูนย์
| Header | ความหมาย |
|---|---|
| X-RateLimit-Tier | tier ที่คุณอยู่: anonymous (ไม่มีคีย์) หรือ authenticated (JWT หรือ API key ตรวจแล้ว) |
| X-RateLimit-Limit-Min | เพดานต่อนาทีสำหรับ tier ของคุณ (60 anonymous, 600 authenticated) |
| X-RateLimit-Limit-Day | เพดานต่อวันสำหรับ tier ของคุณ (5,000 anonymous, 100,000 authenticated) |
| X-RateLimit-Remaining-Min | จำนวนการเรียกที่เหลือใน window นาทีปัจจุบัน ชะลอเมื่อใกล้ศูนย์ |
| X-RateLimit-Remaining-Day | จำนวนการเรียกที่เหลือใน window วันปัจจุบัน รีเซ็ตที่นาทีเดียวกันบนเข็มนาฬิกาทุกวัน |
| Retry-After | ส่งเฉพาะตอน 429 รอจำนวนวินาทีนี้ก่อนลองใหม่ ปกติต่ำกว่า 60 สำหรับ window ต่อนาที |
Errors
Errors ที่อาจเจอ
ใช้ HTTP status code มาตรฐาน body เป็น JSON เสมอ พร้อม field "detail" บอกว่าพังตรงไหน มอง 4xx เป็นปัญหา contract (request ของคุณ) และ 5xx เป็นปัญหาฝั่งเรา (ลองใหม่พร้อม backoff)
OK
OK. body คือ JSON payload ตามที่ระบุใน reference อาเรย์ว่างหมายถึง "ไม่มีแถว" ไม่ใช่ "หายไป" จัดการมันเป็นข้อมูล ไม่ใช่ความล้มเหลว
Not Modified
Not Modified. cache headers ผ่านการตรวจสอบแล้ว ใช้ body ที่ cache ไว้ ไม่ต้องแปลงใหม่ ระบบส่งกลับอัตโนมัติเมื่อคุณส่ง If-None-Match หรือ If-Modified-Since
Bad Request
Bad Request. query parameter หรือ body shape ผิด detail message จะบอกชื่อ field ที่มีปัญหาแบบเป๊ะ ๆ อย่ายิงซ้ำโดยไม่แก้ input
Unauthorized
Unauthorized. request ต้องการ API key หรือ session แต่ไม่ได้ส่งมา หรือ credential ใช้ไม่ได้/ถูกเพิกถอน อย่ายิงซ้ำ ออก credential ใหม่
Not Found
Not Found. path หรือ resource ไม่มีอยู่ สำหรับ route แบบ per-Pokémon เคสนี้มักหมายถึง format นั้นยังไม่มี usage data สำหรับ Pokémon ตัวนั้น ไม่ใช่พิมพ์ผิดฝั่งคุณ
Too Many Requests
Too Many Requests. คุณชน rate-limit ceiling อ่าน Retry-After แล้วรอ exponential backoff ก็ดี แต่มักไม่จำเป็นเพราะ window สั้น
Server Error
Internal Server Error. มีอะไรพังฝั่งเรา ลองยิงซ้ำหลังรอสักไม่กี่วินาที ถ้ายังเป็น ปิงเราใน Discord พร้อม request URL
Service Unavailable
Service Unavailable. เรากำลัง deploy หรือโหลดเต็มชั่วคราว ลองใหม่พร้อม backoff อัปเดต status ที่ Discord ของ community
กฎพื้นฐาน
เงื่อนไขการใช้งาน
สี่กฎพื้นฐาน อ่านครั้งเดียว ประหยัด ping Discord ในอนาคต
เครดิตต้นทาง
ต้องให้เครดิตเมื่อ redistribute หรือ republish ให้เครดิต Pokékipe (ลิงก์ไป https://pokekipe.com) และให้เครดิต Smogon สำหรับ chaos JSON ต้นทางที่พวกเขา publish ทุกเดือน
Best-effort, ไม่มี SLA
Best-effort ไม่มี SLA ข้อมูลเสิร์ฟแบบ "as is" ไม่มีการการันตี uptime cache ให้ดุ และ degrade อย่างนุ่มนวลเมื่อ endpoint ช้าหรือกลับ 429
Versioning
Schema ภายใต้ /api/v1/ จะ backwards-compatible ภายใน lifecycle ของ v1 การเปลี่ยนแบบ breaking ไป /api/v2/ พร้อมแจ้งล่วงหน้าใน Discord และ sunset header บน path ที่ deprecate แล้ว
การใช้เชิงพาณิชย์
อนุญาตให้ใช้เชิงพาณิชย์ภายใต้ CC BY 4.0 ถ้าคุณสร้างอะไรบน API นี้ เราอยากได้ยินใน Discord ของ community
ดูทุก endpoint ในที่เดียว
เลื่อนดูทุก endpoint พร้อมคำอธิบาย, ตาราง parameter, schema ของ request และ response, และ code sample แบบ curl, JavaScript และ Python ค้นทั้ง API ในช่องเดียว deep-link ไปทุก operation แชร์ URL ได้
- 100+ endpoints
- ·
- 3-pane navigation, content, samples
- ·
- full-text search
- ·
- ตัวอย่าง request แบบ live