CNX ODP API Reference
ดึงข้อมูลผู้ประกอบการเชียงใหม่ที่ผ่านการตรวจสอบแล้ว พร้อมฟิลด์เฉพาะอุตสาหกรรม MICE ที่ไม่มีที่ไหนเก็บ — ความพร้อมออกใบกำกับ ภาษีเต็มรูป เงื่อนไขการวางบิลองค์กร ที่จอดรถโค้ช ความจุระดับกรุ๊ป และจำนวนเซ็ตอาหารตามข้อจำกัดด้านศาสนา
Draft Specification
Introduction
CNX ODP API เป็น REST API ที่ตอบกลับเป็น JSON ทั้งหมด รองรับเฉพาะการเชื่อมต่อผ่าน HTTPS ทุก request ต้องแนบ API key และทุก response จะมีเวลาที่ข้อมูลถูกตรวจสอบล่าสุดกำกับไว้เสมอ
ปรัชญาของ API ชุดนี้คือ ข้อมูลชุดเดียวที่ทั้งเมืองอ้างอิงร่วมกัน ผู้ประกอบการอัปเดตครั้งเดียวผ่าน LINE OA แล้วทุกแพลตฟอร์มที่เชื่อมต่ออยู่จะเห็นข้อมูลชุดเดียวกันทันที
curl https://api.hommuang.com/v1/venues/cnx-odp-0042 \
-H "Authorization: Bearer $CNX_ODP_KEY"
Base URL & Versioning
ทุก endpoint อยู่ภายใต้ base URL เดียว เวอร์ชันระบุอยู่ใน path เพื่อให้การอัปเกรดไม่กระทบระบบที่ใช้งานอยู่
https://api.hommuang.com/v1
| Version | Status | Default |
|---|---|---|
| v1 | Preview — schema อาจเปลี่ยนได้ก่อน GA | ✓ |
เมื่อ v1 ขึ้นสถานะ GA เราจะประกาศนโยบาย deprecation ล่วงหน้าอย่างน้อยหนึ่งรอบก่อนปิดเวอร์ชันเก่า
Authentication
ยืนยันตัวตนด้วย Bearer token ในเฮดเดอร์ Authorization request ที่ไม่มี key หรือใช้ key ที่ถูกเพิกถอนแล้วจะได้รับ 401
Authorization: Bearer pk_cnx_live_7f3a9c2e1b8d4056
| Key type | ใช้ที่ไหน | สิทธิ์ |
|---|---|---|
| pk_cnx_… | ฝั่ง client หรือ server ก็ได้ | อ่านข้อมูลสาธารณะในแพ็กเกจ Open Data |
| sk_cnx_… | ฝั่ง server เท่านั้น ห้าม bundle ไปกับ frontend | อ่านข้อมูลเต็ม รวม City Data Insights ระดับ Enterprise |
เก็บ secret key ให้ปลอดภัย
sk_cnx_ ให้สิทธิ์เข้าถึงข้อมูลระดับองค์กร เก็บไว้ใน environment variable เท่านั้น อย่า commit ลง repository และอย่าส่งไปกับโค้ดฝั่งเบราว์เซอร์Rate Limits
โควตาคิดตามแพ็กเกจที่ใช้งาน ทุก response จะแนบเฮดเดอร์บอกโควตาคงเหลือกลับมาด้วยเสมอ
| แพ็กเกจ | Requests / นาที | Burst |
|---|---|---|
| Open Data (Free) | 60 | 120 |
| MarTech Growth | 300 | 600 |
| Enterprise SLA | ตามที่ตกลงในสัญญา | ตามที่ตกลงในสัญญา |
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1785225600
เมื่อเกินโควตา API จะตอบ 429 Too Many Requests พร้อมเฮดเดอร์ Retry-After เป็นจำนวนวินาที แนะนำให้ทำ exponential backoff ฝั่ง client
CNX ODP IDs
ทุก resource มี ID ที่คงที่ตลอดอายุการใช้งาน ไม่เปลี่ยนแม้ผู้ประกอบการจะแก้ชื่อร้าน ย้ายที่ตั้ง หรือเปลี่ยนเจ้าของ และจะไม่ถูกนำกลับมาใช้ซ้ำ คุณจึงใช้เป็น key ในการ cache ฝั่งคุณได้อย่างปลอดภัย
cnx-odp-0042
└── prefix ─┘└ sequence
# ตัวอย่างอื่น
cnx-bus-r3 # เส้นทางขนส่ง
cnx-odp-0117 # สถานที่
Venue Object
โครงสร้างหลักของแพลตฟอร์ม อ็อบเจกต์ mice คือส่วนที่ทำให้ CNX ODP ต่างจากผู้ให้บริการแผนที่ทั่วไป
| Field | Type | Description |
|---|---|---|
| idreq | string | ตัวระบุถาวรของสถานที่ |
| namereq | string | ชื่อสถานที่ภาษาไทย |
| district | string | อำเภอในจังหวัดเชียงใหม่ |
| mice_summary | object | ตัวเลขชี้ขาด 4 ตัวที่ฝ่ายจัดซื้อใช้คัดสถานที่ — tax_invoice, max_pax_one_bill, halal_sets_capacity, coach_parking_slots |
| mice_profile | string | พาธของ sub-resource ที่เก็บโปรไฟล์ MICE เต็ม — ดูหัวข้อ MICE Object |
| events | array<object> | งานที่ยืนยันแล้วของสถานที่นี้ พร้อม lead time ของการจอง |
| verified_at | timestamp | เวลาที่ข้อมูลถูกตรวจสอบล่าสุด (ISO 8601) |
| source | string | ที่มาของข้อมูล — ปัจจุบันคือ CNX ODP · Hommuang |
Event object
แต่ละรายการใน events คืองานที่ยืนยันแล้วของสถานที่นั้น lead_time_days คือระยะห่างระหว่าง วันที่ยืนยันการจอง กับวันจัดงาน — ไม่ใช่จำนวนวันนับจากวันนี้ ค่าจึงคงที่ตลอดอายุของ record และใช้เทียบข้ามสถานที่ได้ บอกได้ว่าสถานที่ไหนต้องจองล่วงหน้านานแค่ไหน
| Field | Type | Description |
|---|---|---|
| typereq | enum | ประเภทงาน — meeting, incentive, convention, exhibition, forum |
| datereq | date | วันจัดงาน รูปแบบ YYYY-MM-DD |
| lead_time_days | integer | จำนวนวันที่จองล่วงหน้าก่อนวันจัดงาน |
{
"id": "cnx-odp-0042",
"name": "ขันโตกล้านนา เฮือนเพ็ญ",
"district": "เมืองเชียงใหม่",
"mice_summary": {
"tax_invoice": "full_form",
"max_pax_one_bill": 200,
"halal_sets_capacity": 200,
"coach_parking_slots": 3
},
"mice_profile": "/v1/venues/cnx-odp-0042/mice",
"events": [
{ "type": "forum", "date": "2026-09-18", "lead_time_days": 62 }
],
"verified_at": "2026-07-21T09:14+07:00",
"source": "CNX ODP · Hommuang"
}
MICE Object
โปรไฟล์ MICE เต็มของสถานที่ แยกเป็น sub-resource เพื่อให้เรคคอร์ดหลักอ่านง่าย และให้ฝั่งคุณดึงเฉพาะเมื่อต้องใช้
นี่คือส่วนที่ทำให้ CNX ODP มีเหตุผลจะมีอยู่ ผู้จัดงานไมซ์ใช้เงินองค์กร เกณฑ์คัดสถานที่จึงไม่ใช่ “อาหารอร่อยไหม” แต่เป็น “วางบิลบริษัทได้ไหม จอดรถโค้ชได้กี่คัน ทำฮาลาลได้กี่เซ็ต” — คำถามที่ต้องโทรถามทีละร้าน เพราะไม่มีฐานข้อมูลไหนเก็บไว้
ทุกฟิลด์ในกลุ่มนี้ออกแบบเป็น ตัวเลขและเงื่อนไข ไม่ใช่ค่า true/false เพราะ “มีฮาลาล” ไม่ช่วยคนที่ต้องเลี้ยง 200 คน แต่ halal_sets_capacity: 200 ช่วย
group_capability
ความสามารถระดับกรุ๊ป เป็นตัวเลข ไม่ใช่ช่วงกว้าง ๆ
| Field | Type | Description |
|---|---|---|
| seated_capacity_single_seating | integer | จำนวนคนที่นั่งได้ในรอบเดียว ไม่ใช่ยอดรวมทั้งวัน |
| max_pax_one_bill | integer | จำนวนคนสูงสุดที่ออกบิลใบเดียวได้ — สำคัญกับการเคลียร์ค่าใช้จ่ายองค์กร |
| banquet_vs_cocktail | object | ความจุแยกตามรูปแบบจัดงาน — นั่งโต๊ะ (banquet) กับยืน (cocktail) ได้ไม่เท่ากัน |
| group_lead_time_days | integer | ต้องแจ้งล่วงหน้ากี่วันจึงรับกรุ๊ปได้ |
finance_docs
กลุ่มที่ตัดสินว่าสถานที่จะได้งานหรือไม่ ถ้าออกใบกำกับภาษีเต็มรูปไม่ได้ ฝ่ายจัดซื้อตัดออกทันทีไม่ว่าอาหารจะดีแค่ไหน
| Field | Type | Description |
|---|---|---|
| tax_invoicereq | enum | full_form ใบกำกับภาษีเต็มรูป · abbreviated อย่างย่อ · none ออกไม่ได้ |
| e_tax_invoice | boolean | ออกใบกำกับภาษีอิเล็กทรอนิกส์ได้หรือไม่ |
| withholding_tax_handling | boolean | รับหักภาษี ณ ที่จ่ายและออกเอกสารให้ถูกต้องได้หรือไม่ |
| payment_terms | enum | PO_30d · PO_60d · prepaid · cash_only |
| corporate_billing | boolean | วางบิลในนามนิติบุคคลได้หรือไม่ |
coach_logistics
รถโค้ชคือข้อจำกัดจริงของงานกรุ๊ป ร้านที่ดีแต่รถเข้าไม่ได้ก็ใช้งานไม่ได้
| Field | Type | Description |
|---|---|---|
| coach_parking_slots | integer | จำนวนรถโค้ชที่จอดค้างได้พร้อมกัน |
| coach_dropoff | boolean | มีจุดส่งผู้โดยสารหน้าสถานที่หรือไม่ (แม้จะจอดค้างไม่ได้) |
| minutes_from_cmice | integer | เวลาเดินทางโดยรถจากศูนย์ประชุม CMICE เป็นนาที |
| simultaneous_coach_arrival | integer | รับรถโค้ชเข้าพร้อมกันได้กี่คันโดยไม่ติดขัด |
dietary_capacity
ไม่ใช่ “มีเมนูฮาลาล” แต่เป็นทำได้กี่เซ็ต และต้องแจ้งล่วงหน้าเท่าไหร่
| Field | Type | Description |
|---|---|---|
| halal_sets_capacity | integer | จำนวนเซ็ตอาหารฮาลาลที่ผลิตได้ในหนึ่งมื้อ |
| halal_notice_hours | integer | ต้องแจ้งล่วงหน้ากี่ชั่วโมง |
staff_standards
ภาษาที่พนักงานใช้ได้จริง และมาตรฐานที่ผ่านการรับรอง
| Field | Type | Description |
|---|---|---|
| staff_languages | array<string> | รหัสภาษา ISO 639-1 ที่มีพนักงานสื่อสารได้ เช่น en, zh, ko |
| tmvs_certified | boolean | ผ่านมาตรฐานสถานที่จัดงานประเทศไทย (Thailand MICE Venue Standard) |
| sha_plus | boolean | ได้รับตรา SHA Plus ด้านสุขอนามัยและความปลอดภัย |
| liability_insurance | boolean | มีประกันความรับผิดต่อบุคคลภายนอก |
ทำไมฟิลด์พวกนี้ต้องมีคนลงพื้นที่เก็บ
Endpoints
ชุด endpoint สำหรับ v1 — ทุกตัวรองรับเฉพาะ GET เพราะ CNX ODP เป็นแหล่งข้อมูลอ่านอย่างเดียวสำหรับ Distributor การแก้ไขข้อมูลเกิดขึ้นฝั่งผู้ประกอบการผ่าน LINE OA เท่านั้น
ค้นหาและกรองด้วยเงื่อนไของค์กรจริง เช่น ?tax_invoice=full_form&halal_sets_capacity=gte:150 — คำถามที่แผนที่ทั่วไปตอบไม่ได้เลย
ดึงข้อมูลสถานที่รายตัวพร้อมอ็อบเจกต์ mice เต็ม
โปรไฟล์ MICE เต็ม 5 กลุ่ม — ดูรายละเอียดฟิลด์ที่หัวข้อ MICE Object
ร่องรอยการตรวจสอบ — ใครยืนยัน ด้วยวิธีใด เมื่อไหร่ และรอบตรวจถัดไปเมื่อใด
เส้นทางขนส่งรอบสถานที่ ผูกกับผู้ให้บริการจริงในเมือง เช่น รถเมล์เมืองและรถแดง
curl -G https://api.hommuang.com/v1/venues \
-H "Authorization: Bearer $CNX_ODP_KEY" \
-d "tax_invoice=full_form" \
-d "halal_sets_capacity=gte:150" \
-d "coach_parking_slots=gte:2"
Errors
API ใช้รหัสสถานะ HTTP ตามมาตรฐาน และแนบ error object ที่อ่านเข้าใจได้กลับมาใน body เสมอ
| Code | ความหมาย |
|---|---|
| 200 | สำเร็จ |
| 400 | พารามิเตอร์ไม่ถูกต้องหรือรูปแบบตัวกรองผิด |
| 401 | ไม่มี API key หรือ key ถูกเพิกถอนแล้ว |
| 403 | key ไม่มีสิทธิ์เข้าถึงทรัพยากรนี้ในแพ็กเกจปัจจุบัน |
| 404 | ไม่พบทรัพยากรตาม ID ที่ระบุ |
| 429 | เกินโควตา — ดูเฮดเดอร์ Retry-After |
| 5xx | ข้อผิดพลาดฝั่งเรา ลองใหม่ด้วย exponential backoff |
{
"error": {
"code": "venue_not_found",
"message": "No venue matches id cnx-odp-9999",
"status": 404,
"request_id": "req_8f2c1a7e"
}
}
แนบ request_id มาด้วยทุกครั้งที่แจ้งปัญหา จะช่วยให้ทีมเราไล่ log ได้ตรงจุด
Webhooks
แทนที่จะ poll เพื่อเช็คว่าข้อมูลเปลี่ยนหรือยัง ให้ CNX ODP ส่ง event มาหาคุณเมื่อข้อมูลถูกอัปเดตหรือตรวจสอบใหม่ นี่คือกลไกที่ทำให้ปลายทางของคุณสดใหม่ตามต้นทางโดยไม่เปลืองโควตา
| Event | เกิดขึ้นเมื่อ |
|---|---|
| venue.updated | ผู้ประกอบการแก้ไขข้อมูลผ่าน LINE OA |
| venue.verified | ทีม Local Service ยืนยันข้อมูลรอบใหม่ |
| venue.archived | สถานที่ปิดกิจการหรือถูกถอนออกจากระบบ |
{
"event": "venue.verified",
"venue_id": "cnx-odp-0042",
"verified_by": "LFFintech Local Service",
"occurred_at": "2026-07-21T09:14+07:00"
}
อยู่ระหว่างออกแบบ
อยากเป็น Distributor รุ่นแรก?
แพ็กเกจ Open Data ให้ดึง API ข้อมูลพื้นฐานได้ฟรี ไม่มีค่าแรกเข้าและไม่มีค่ารายเดือน — ทักมาคุยกับทีมเทคนิคของเราได้เลย