CNX ODP API Reference

ดึงข้อมูลผู้ประกอบการเชียงใหม่ที่ผ่านการตรวจสอบแล้ว พร้อมฟิลด์เฉพาะอุตสาหกรรม MICE ที่ไม่มีที่ไหนเก็บ — ความพร้อมออกใบกำกับ ภาษีเต็มรูป เงื่อนไขการวางบิลองค์กร ที่จอดรถโค้ช ความจุระดับกรุ๊ป และจำนวนเซ็ตอาหารตามข้อจำกัดด้านศาสนา

Draft Specification

เอกสารชุดนี้เป็นการออกแบบ API สำหรับการนำเสนอ — endpoint, payload และ error code ทั้งหมดเป็นตัวอย่างการออกแบบ ยังไม่เปิดให้เรียกใช้งานจริง ชื่อสถานที่ในตัวอย่างเป็นข้อมูลสมมติ ไม่ใช่ธุรกิจจริง หากต้องการเข้าร่วมเป็น Distributor รุ่นแรก ติดต่อเราผ่าน LINE OA

Introduction

CNX ODP API เป็น REST API ที่ตอบกลับเป็น JSON ทั้งหมด รองรับเฉพาะการเชื่อมต่อผ่าน HTTPS ทุก request ต้องแนบ API key และทุก response จะมีเวลาที่ข้อมูลถูกตรวจสอบล่าสุดกำกับไว้เสมอ

ปรัชญาของ API ชุดนี้คือ ข้อมูลชุดเดียวที่ทั้งเมืองอ้างอิงร่วมกัน ผู้ประกอบการอัปเดตครั้งเดียวผ่าน LINE OA แล้วทุกแพลตฟอร์มที่เชื่อมต่ออยู่จะเห็นข้อมูลชุดเดียวกันทันที

quick start
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
VersionStatusDefault
v1Preview — 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)60120
MarTech Growth300600
Enterprise SLAตามที่ตกลงในสัญญาตามที่ตกลงในสัญญา
response headers
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 ต่างจากผู้ให้บริการแผนที่ทั่วไป

FieldTypeDescription
idreqstringตัวระบุถาวรของสถานที่
namereqstringชื่อสถานที่ภาษาไทย
districtstringอำเภอในจังหวัดเชียงใหม่
mice_summaryobjectตัวเลขชี้ขาด 4 ตัวที่ฝ่ายจัดซื้อใช้คัดสถานที่ — tax_invoice, max_pax_one_bill, halal_sets_capacity, coach_parking_slots
mice_profilestringพาธของ sub-resource ที่เก็บโปรไฟล์ MICE เต็ม — ดูหัวข้อ MICE Object
eventsarray<object>งานที่ยืนยันแล้วของสถานที่นี้ พร้อม lead time ของการจอง
verified_attimestampเวลาที่ข้อมูลถูกตรวจสอบล่าสุด (ISO 8601)
sourcestringที่มาของข้อมูล — ปัจจุบันคือ CNX ODP · Hommuang

Event object

แต่ละรายการใน events คืองานที่ยืนยันแล้วของสถานที่นั้น lead_time_days คือระยะห่างระหว่าง วันที่ยืนยันการจอง กับวันจัดงาน — ไม่ใช่จำนวนวันนับจากวันนี้ ค่าจึงคงที่ตลอดอายุของ record และใช้เทียบข้ามสถานที่ได้ บอกได้ว่าสถานที่ไหนต้องจองล่วงหน้านานแค่ไหน

FieldTypeDescription
typereqenumประเภทงาน — meeting, incentive, convention, exhibition, forum
datereqdateวันจัดงาน รูปแบบ YYYY-MM-DD
lead_time_daysintegerจำนวนวันที่จองล่วงหน้าก่อนวันจัดงาน
example response
{
  "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

GET/v1/venues/{venue_id}/mice

โปรไฟล์ MICE เต็มของสถานที่ แยกเป็น sub-resource เพื่อให้เรคคอร์ดหลักอ่านง่าย และให้ฝั่งคุณดึงเฉพาะเมื่อต้องใช้

นี่คือส่วนที่ทำให้ CNX ODP มีเหตุผลจะมีอยู่ ผู้จัดงานไมซ์ใช้เงินองค์กร เกณฑ์คัดสถานที่จึงไม่ใช่ “อาหารอร่อยไหม” แต่เป็น “วางบิลบริษัทได้ไหม จอดรถโค้ชได้กี่คัน ทำฮาลาลได้กี่เซ็ต” — คำถามที่ต้องโทรถามทีละร้าน เพราะไม่มีฐานข้อมูลไหนเก็บไว้

ทุกฟิลด์ในกลุ่มนี้ออกแบบเป็น ตัวเลขและเงื่อนไข ไม่ใช่ค่า true/false เพราะ “มีฮาลาล” ไม่ช่วยคนที่ต้องเลี้ยง 200 คน แต่ halal_sets_capacity: 200 ช่วย

group_capability

ความสามารถระดับกรุ๊ป เป็นตัวเลข ไม่ใช่ช่วงกว้าง ๆ

FieldTypeDescription
seated_capacity_single_seatingintegerจำนวนคนที่นั่งได้ในรอบเดียว ไม่ใช่ยอดรวมทั้งวัน
max_pax_one_billintegerจำนวนคนสูงสุดที่ออกบิลใบเดียวได้ — สำคัญกับการเคลียร์ค่าใช้จ่ายองค์กร
banquet_vs_cocktailobjectความจุแยกตามรูปแบบจัดงาน — นั่งโต๊ะ (banquet) กับยืน (cocktail) ได้ไม่เท่ากัน
group_lead_time_daysintegerต้องแจ้งล่วงหน้ากี่วันจึงรับกรุ๊ปได้

finance_docs

กลุ่มที่ตัดสินว่าสถานที่จะได้งานหรือไม่ ถ้าออกใบกำกับภาษีเต็มรูปไม่ได้ ฝ่ายจัดซื้อตัดออกทันทีไม่ว่าอาหารจะดีแค่ไหน

FieldTypeDescription
tax_invoicereqenumfull_form ใบกำกับภาษีเต็มรูป · abbreviated อย่างย่อ · none ออกไม่ได้
e_tax_invoicebooleanออกใบกำกับภาษีอิเล็กทรอนิกส์ได้หรือไม่
withholding_tax_handlingbooleanรับหักภาษี ณ ที่จ่ายและออกเอกสารให้ถูกต้องได้หรือไม่
payment_termsenumPO_30d · PO_60d · prepaid · cash_only
corporate_billingbooleanวางบิลในนามนิติบุคคลได้หรือไม่

coach_logistics

รถโค้ชคือข้อจำกัดจริงของงานกรุ๊ป ร้านที่ดีแต่รถเข้าไม่ได้ก็ใช้งานไม่ได้

FieldTypeDescription
coach_parking_slotsintegerจำนวนรถโค้ชที่จอดค้างได้พร้อมกัน
coach_dropoffbooleanมีจุดส่งผู้โดยสารหน้าสถานที่หรือไม่ (แม้จะจอดค้างไม่ได้)
minutes_from_cmiceintegerเวลาเดินทางโดยรถจากศูนย์ประชุม CMICE เป็นนาที
simultaneous_coach_arrivalintegerรับรถโค้ชเข้าพร้อมกันได้กี่คันโดยไม่ติดขัด

dietary_capacity

ไม่ใช่ “มีเมนูฮาลาล” แต่เป็นทำได้กี่เซ็ต และต้องแจ้งล่วงหน้าเท่าไหร่

FieldTypeDescription
halal_sets_capacityintegerจำนวนเซ็ตอาหารฮาลาลที่ผลิตได้ในหนึ่งมื้อ
halal_notice_hoursintegerต้องแจ้งล่วงหน้ากี่ชั่วโมง

staff_standards

ภาษาที่พนักงานใช้ได้จริง และมาตรฐานที่ผ่านการรับรอง

FieldTypeDescription
staff_languagesarray<string>รหัสภาษา ISO 639-1 ที่มีพนักงานสื่อสารได้ เช่น en, zh, ko
tmvs_certifiedbooleanผ่านมาตรฐานสถานที่จัดงานประเทศไทย (Thailand MICE Venue Standard)
sha_plusbooleanได้รับตรา SHA Plus ด้านสุขอนามัยและความปลอดภัย
liability_insurancebooleanมีประกันความรับผิดต่อบุคคลภายนอก

ทำไมฟิลด์พวกนี้ต้องมีคนลงพื้นที่เก็บ

ไม่มีฟิลด์ใดในกลุ่มนี้ดึงอัตโนมัติจากที่ไหนได้ ต้องถามเจ้าของร้านและตรวจหน้างานจริง — นี่คือเหตุผลที่ CNX ODP ต้องมีทีม Local Service และชาวฮอมแฮงลงพื้นที่ และเป็นเหตุผลที่คู่แข่งลอกฐานข้อมูลนี้ไม่ได้ด้วยการ crawl

Endpoints

ชุด endpoint สำหรับ v1 — ทุกตัวรองรับเฉพาะ GET เพราะ CNX ODP เป็นแหล่งข้อมูลอ่านอย่างเดียวสำหรับ Distributor การแก้ไขข้อมูลเกิดขึ้นฝั่งผู้ประกอบการผ่าน LINE OA เท่านั้น

GET/v1/venues

ค้นหาและกรองด้วยเงื่อนไของค์กรจริง เช่น ?tax_invoice=full_form&halal_sets_capacity=gte:150 — คำถามที่แผนที่ทั่วไปตอบไม่ได้เลย

GET/v1/venues/{venue_id}

ดึงข้อมูลสถานที่รายตัวพร้อมอ็อบเจกต์ mice เต็ม

GET/v1/venues/{venue_id}/mice

โปรไฟล์ MICE เต็ม 5 กลุ่ม — ดูรายละเอียดฟิลด์ที่หัวข้อ MICE Object

GET/v1/venues/{venue_id}/verification

ร่องรอยการตรวจสอบ — ใครยืนยัน ด้วยวิธีใด เมื่อไหร่ และรอบตรวจถัดไปเมื่อใด

GET/v1/transport/routes

เส้นทางขนส่งรอบสถานที่ ผูกกับผู้ให้บริการจริงในเมือง เช่น รถเมล์เมืองและรถแดง

GET /v1/venues
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 ถูกเพิกถอนแล้ว
403key ไม่มีสิทธิ์เข้าถึงทรัพยากรนี้ในแพ็กเกจปัจจุบัน
404ไม่พบทรัพยากรตาม ID ที่ระบุ
429เกินโควตา — ดูเฮดเดอร์ Retry-After
5xxข้อผิดพลาดฝั่งเรา ลองใหม่ด้วย exponential backoff
error shape
{
  "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สถานที่ปิดกิจการหรือถูกถอนออกจากระบบ
webhook payload
{
  "event": "venue.verified",
  "venue_id": "cnx-odp-0042",
  "verified_by": "LFFintech Local Service",
  "occurred_at": "2026-07-21T09:14+07:00"
}

อยู่ระหว่างออกแบบ

Webhooks จะเปิดให้ใช้หลัง v1 ขึ้นสถานะ GA ถ้าทีมคุณต้องการใช้ตั้งแต่รุ่นแรก บอกเราได้ เราออกแบบลำดับความสำคัญตามผู้ใช้กลุ่มแรก

อยากเป็น Distributor รุ่นแรก?

แพ็กเกจ Open Data ให้ดึง API ข้อมูลพื้นฐานได้ฟรี ไม่มีค่าแรกเข้าและไม่มีค่ารายเดือน — ทักมาคุยกับทีมเทคนิคของเราได้เลย