ข้ามไปยังเนื้อหาหลัก
68รายชื่อในเอกสาร ปี 2568
สำหรับนักพัฒนา

API

3,963 รายการจากเอกสาร 77 จังหวัด เรียกเป็น JSON ได้ทันที ไม่ต้องสมัคร ไม่ต้องใช้ API key และไม่มี rate limit ทุก endpoint เป็นไฟล์นิ่งที่เสิร์ฟจาก CDN

เริ่มจากตรงนี้

index.json บอกทุก endpoint ที่มี พร้อม URL เต็มที่เรียกต่อได้เลย

curl
curl -s https://260816-karemairodnare.vercel.app/api/v1/index.json

Endpoint ทั้งหมด

ทุกเส้นทางขึ้นต้นด้วย https://260816-karemairodnare.vercel.app/api/v1

เส้นทางคืนค่าคำอธิบาย
/api/v1/index.jsonendpoints[]รายการ endpoint ทั้งหมด
/api/v1/meta.jsondatasetจำนวนเอกสาร หน้า และหมวดหมู่ของชุดข้อมูล
/api/v1/records.jsonrecords[]ทุกรายการในชุดข้อมูล 3963 รายการ
/api/v1/provinces.jsonitems[]รายชื่อจังหวัด 77 รายการ พร้อมจำนวนคนและ URL ของแต่ละจังหวัด
/api/v1/provinces/{slug}.jsonrecords[]ทุกรายการในจังหวัดที่ระบุ
/api/v1/districts.jsonitems[]รายชื่ออำเภอ 657 รายการ
/api/v1/districts/{slug}.jsonrecords[]ทุกรายการในอำเภอที่ระบุ
/api/v1/agencies.jsonitems[]รายชื่อหน่วยงาน 1945 รายการ
/api/v1/agencies/{slug}.jsonrecords[]ทุกรายการในหน่วยงานที่ระบุ
/api/v1/openapi.jsonOpenAPI 3.1สเปกสำหรับ generate client หรือเปิดใน Swagger UI

ไม่มี endpoint รายบุคคลโดยตั้งใจ หน้าเว็บของแต่ละคนเปิดสาธารณะอยู่แล้ว และ records.json ก็มีครบทุกรายการ การเรียกรายหมวดจึงครอบคลุมการใช้งานจริงโดยไม่ต้องมีไฟล์แยกรายคนอีกหลายพันไฟล์

โครงสร้างคำตอบ

ทุก endpoint ห่อด้วยรูปแบบเดียวกัน — _meta บอกเวอร์ชัน วันที่ และข้อความกำกับ ส่วนข้อมูลอยู่ใน records หรือ items

ตัวอย่างคำตอบ (ตัดให้สั้น)
{
  "_meta": {
    "version": 1,
    "snapshot": "2025-08-21",
    "site": "https://260816-karemairodnare.vercel.app",
    "notice": "เอกสารต้นทางมาจากแหล่งเผยแพร่สาธารณะ ยังไม่ได้รับการยืนยัน…",
    "kind": "province",
    "name": "ภูเก็ต",
    "slug": "ภูเก็ต",
    "count": 12
  },
  "records": [
    {
      "id": "7b531cf1189eb6f0c4643494",
      "name": "…",
      "maskedId": "167xxxxxx0996",
      "scoreChange": 44,
      "agency": "อบต.…",
      "district": "…",
      "province": "ภูเก็ต",
      "verificationSource": "ยืนยันจากเว็บไซต์หน่วยงาน",
      "sources": [{ "file": "54_เพชรบูรณ์.pdf", "page": 2 }],
      "url": "https://260816-karemairodnare.vercel.app/person/…"
    }
  ]
}
ฟิลด์ชนิดหมายเหตุ
idstringตัวระบุภายในชุดข้อมูล คงที่ตราบที่ยังเป็นเวอร์ชัน 1
namestringชื่อตามที่ปรากฏในเอกสาร ไม่ได้แก้คำสะกด
maskedIdstringเลขที่ถูกปิดบางส่วนตามรูปแบบในเอกสาร ไม่ใช่ตัวระบุที่ยืนยันได้ลำพัง
scoreChangenumberผลต่างคะแนนที่ระบุในเอกสาร
agencystringหน่วยงานตามที่ระบุในเอกสาร
districtstringอำเภอ
provincestringจังหวัด
verificationSourcestringที่มาของการตรวจทานรายการนั้น
sourcesarrayชื่อไฟล์และเลขหน้าเอกสารต้นฉบับ มีอย่างน้อยหนึ่งรายการเสมอ
urlstringลิงก์หน้าเว็บที่แสดงบริบทครบของรายการนั้น

ตัวอย่างการใช้งาน

JavaScript
const res = await fetch("https://260816-karemairodnare.vercel.app/api/v1/provinces.json");
const { items } = await res.json();

// ทุกรายการมี url ที่ encode มาให้แล้ว จึงไม่ต้องประกอบ path ภาษาไทยเอง
const phuket = items.find((item) => item.name === "ภูเก็ต");
const { _meta, records } = await fetch(phuket.url).then((r) => r.json());

console.log(_meta.count, records[0].name, records[0].sources[0].file);
Python
import json, urllib.request

def get(url):
    with urllib.request.urlopen(url) as res:
        return json.load(res)

items = get("https://260816-karemairodnare.vercel.app/api/v1/provinces.json")["items"]
phuket = next(item for item in items if item["name"] == "ภูเก็ต")

data = get(phuket["url"])
print(data["_meta"]["count"], data["records"][0]["name"])
curl + jq — สิบอันดับคะแนนที่แก้ไขสูงสุด
curl -s https://260816-karemairodnare.vercel.app/api/v1/records.json \
  | jq '.records | sort_by(-.scoreChange)[:10] | map({name, scoreChange, province})'

เรื่อง slug ภาษาไทย

เส้นทางใช้ชื่อไทยตรงๆ เพื่อให้อ่านออกโดยไม่ต้องเปิดตารางเทียบ แต่ HTTP client บางตัวไม่ encode ให้อัตโนมัติ ทางที่ปลอดภัยที่สุดคืออ่านฟิลด์ url จากรายการหมวด ซึ่ง encode มาให้เรียบร้อยแล้ว ถ้าจำเป็นต้องประกอบเองให้ encode ทุกครั้ง

JavaScript
// ถ้ารู้ชื่ออยู่แล้วและไม่อยากดึงรายการหมวดก่อน ต้อง encode ชื่อเสมอ
const slug = encodeURIComponent("เพชรบูรณ์");
const url = "https://260816-karemairodnare.vercel.app/api/v1/provinces/" + slug + ".json";

ข้อกำหนดทางเทคนิค

  • ไม่ต้องยืนยันตัวตน ไม่มี API key ไม่มี rate limit และเปิด CORS ให้ทุก origin จึงเรียกจากเบราว์เซอร์ได้โดยตรง
  • แคช max-age=86400 ต่อด้วย stale-while-revalidate ข้อมูลเปลี่ยนเฉพาะตอน deploy ใหม่ กรุณาเก็บผลไว้ใช้ซ้ำแทนการเรียกทุกครั้ง
  • เวอร์ชัน อยู่ทั้งในเส้นทาง (/api/v1/) และใน _meta.version การเพิ่มฟิลด์ถือว่ายังเข้ากันได้ ถ้าต้องเปลี่ยนโครงสร้างจะขึ้น v2 โดย v1 ยังอยู่ที่เดิม
  • OpenAPI 3.1 อยู่ที่ /api/v1/openapi.json เปิดใน Swagger UI หรือใช้ generate client ได้
  • ดาวน์โหลดทั้งชุด ถ้าต้องการทำงานแบบออฟไลน์หรือเปิดในสเปรดชีต ใช้ไฟล์จากหน้า ชุดข้อมูล ซึ่งมี CSV ให้ด้วย

ก่อนนำไปใช้

  • เอกสารต้นทางมาจากแหล่งเผยแพร่สาธารณะ ยังไม่ได้รับการยืนยันจากหน่วยงานใด และไม่ได้เป็นการระบุสถานะทางคดี ความผิด หรือคำพิพากษาของบุคคล ข้อความนี้อยู่ใน _meta.notice ของทุกคำตอบ เพื่อให้ติดไปกับข้อมูลเสมอ แม้ผู้ใช้ปลายทางจะไม่เคยเห็นหน้านี้
  • ชื่อที่คล้ายกันอาจเป็นคนละบุคคล ทุกแถวจึงมี sources ที่อ้างชื่อไฟล์และเลขหน้า ขอความกรุณาอย่าตัดฟิลด์นี้ออกเมื่อนำไปเผยแพร่ต่อ
  • การนำไปทำระบบค้นชื่อรายคน แจ้งเตือน หรือจัดอันดับบุคคล เป็นการใช้งานที่เกินกว่าความแม่นยำที่ชุดข้อมูลนี้รองรับได้

การอ้างอิง

ชุดข้อมูลการแก้ไขคะแนน ปี 2025. เรียบเรียงจากเอกสาร 77 จังหวัด. สืบค้นจาก https://260816-karemairodnare.vercel.app/api

วิธีการจัดทำและข้อจำกัดของชุดข้อมูลอยู่ในหน้า ที่มาและข้อจำกัด