API สำหรับนักพัฒนา › คู่มือฉบับเต็ม
คู่มือ Bazi API v2
v2ทุก endpoint · พารามิเตอร์ · ความหมายของทุกช่องคำตอบ · ราคา · ความปลอดภัย · ตัวอย่างโค้ด — ชื่อช่องและรหัสเป็นภาษาอังกฤษ ข้อความในคำตอบเลือกได้ 10 ภาษา
01.ภาพรวม
Bazi API v2 ให้ดึงข้อมูลดวงจีนชุดเดียวกับหน้าเว็บไปใช้ในเว็บ/แอป/ระบบของคุณ คำนวณด้วยเอนจินตัวเดียวกับหน้าเว็บ — ดวงเดียวกันได้ผลเดียวกัน
- ที่อยู่:
https://bazi.fengshuix.com/api/v2/…· HTTPS เท่านั้น · รับ/ส่ง JSON (UTF-8) - ตัดเครดิตทุกครั้งที่เรียกสำเร็จ (endpoint ฟรีไม่ตัด) · ราคาต่อครั้งของบัญชีคุณแสดงในแต่ละ endpoint ด้านล่าง และที่หน้า "คีย์ API"
- ถูกตัดโทเคนเฉพาะเมื่อคำนวณสำเร็จ — error ทุกกรณีไม่เสียโทเคน
- สิทธิ์สร้างคีย์: เปิดให้รายบัญชีโดยทีมงาน (ติดต่อทีมงานถ้าหน้า API แจ้งว่ายังไม่ได้เปิด)
GET /api/v2/pricing — ราคาอาจปรับโดยทีมงาน อย่าเขียนตัวเลขตายตัว02.เริ่มใช้งานใน 5 นาที
- ไปที่ /partner/keys → สร้างคีย์ → คัดลอกเก็บทันที (ระบบแสดงตัวเต็มครั้งเดียว)
- เก็บคีย์ในตัวแปรแวดล้อมของเซิร์ฟเวอร์ เช่น
BAZI_API_KEY— ห้ามใส่ในโค้ดหน้าเว็บ/แอปฝั่งผู้ใช้ - ทดสอบฟรี:
GET /api/v2/me·GET /api/v2/profiles - เรียกจริง: ดูจังหวะวันนี้ด้วย
POST /api/v2/transit
curl https://bazi.fengshuix.com/api/v2/me -H "x-api-key: $BAZI_API_KEY"
curl -X POST https://bazi.fengshuix.com/api/v2/transit \
-H "x-api-key: $BAZI_API_KEY" -H "Content-Type: application/json" \
-d '{"birth":{"date":"1990-05-15","time":"14:30","gender":"male"},"lang":"th"}'03.คีย์ · สิทธิ์ · ความปลอดภัยพื้นฐาน
- ส่งคีย์ในหัว
x-api-keyทุกคำขอ · ห้ามใส่ใน URL (ระบบตอบ 400 เพราะ URL ไปอยู่ใน log ของ proxy/เบราว์เซอร์) - ฐานข้อมูลเก็บคีย์เป็นค่า hash เท่านั้น — ทีมงานก็ดูคีย์ของคุณไม่ได้ · ทำหายต้องลบแล้วสร้างใหม่
- scope: จำกัดคีย์ให้เรียกได้เฉพาะบางกลุ่ม (chart · transit · reports · search) เช่นคีย์ของแอปวันจรให้แค่ transit
- เพดานโทเคนต่อวัน: ตั้งต้น 200 · ปรับเองได้ที่หน้าคีย์ · 0 = ไม่จำกัด · คีย์หลุดก็เสียไม่เกินเพดาน
- จำกัด IP: ระบุ IP เซิร์ฟเวอร์ที่เรียกได้ (คั่นด้วยจุลภาค)
- ปิด/ลบคีย์ ได้ทันทีที่หน้าคีย์ · สร้างได้สูงสุด 10 คีย์ต่อบัญชี
- ต้องการความปลอดภัยสูงขึ้น (คีย์หลุดอย่างเดียวใช้ไม่ได้ · กันยิงซ้ำ · เข้ารหัสข้อมูลเกิด) → หัวข้อ 11
04.รูปแบบคำขอ/คำตอบ
endpoint ที่คำนวณดวงใช้ POST + JSON body (ไม่เกิน 20 KB) · endpoint ฟรีใช้ GET · ทุกคำตอบมี Cache-Control: no-store
{
"success": true,
"request_id": "1f0c…", // อ้างอิงเวลาติดต่อทีมงาน · ตรงกับ /api/v2/usage
"endpoint": "transit", // ชื่อที่ใช้คิดราคา
"cost": 3, // โทเคนที่ถูกตัดครั้งนี้ (0 = ฟรี)
"balance_after": 497, // ยอดคงเหลือหลังตัด (null = ไม่ได้ตัด)
"resolved": { … }, // ค่าที่ระบบตีความจากคำขอ เช่นเวลาที่ใช้คำนวณ
"warnings": [ "unknown_birth_time: hour pillar omitted from every calculation" ],
"data": { "subject": { "source": "profile", "profile_id": "…", "gender": "male", "unknown_birth_time": false }, … }
}
// ผิดพลาด
{ "success": false, "request_id": "…", "error": "birth.date must be YYYY-MM-DD" }05.ระบุดวง (profile_id / birth)
ส่งอย่างใดอย่างหนึ่ง:
- profile_id (แนะนำ) — ดวงที่บันทึกในบัญชีเจ้าของคีย์ วันเกิดไม่ต้องวิ่งผ่านเครือข่ายเลย และได้การตั้งค่าวิเคราะห์ที่เซฟไว้ครบ (ธาตุให้คุณ/โทษที่ตั้งเอง · ไตรทิศ · สูตรนับราศีแฝง) ผลจึงตรงกับหน้าเว็บ · ดวงของบัญชีอื่นเรียกไม่ได้ (ตอบ 404)
- birth — ข้อมูลเกิดดิบ สำหรับลูกค้าของคุณเอง · ระบบไม่บันทึกและไม่เขียนลง log · ไม่ต้องส่งชื่อ
| ชื่อ | ชนิด | คำอธิบาย |
|---|---|---|
| date * | "YYYY-MM-DD" | วันเกิดตามปฏิทินสากล (1900–2100) |
| time | "HH:mm" | เวลาเกิด 24 ชม. · ไม่ทราบ = ไม่ต้องส่ง → ระบบตัดเสายามออกจากทุกการคำนวณ และใส่ warnings |
| gender * | "male" | "female" | ใช้คำนวณทิศทางวัยจรและกว้าประจำตัว |
| tz_offset | number | เขตเวลาของสถานที่เกิด เป็นชั่วโมง (−12 ถึง 14) · ตั้งต้น 7 (ไทย) |
| location_id | string | รหัสเมือง (ตารางท้ายคู่มือ) — ใช้เขตเวลา+ลองจิจูดของเมืองนั้น |
| true_solar_time | boolean | ปรับเวลาสุริยะจริงตามลองจิจูด · ต้องส่ง longitude หรือ location_id คู่กัน |
| longitude | number | ลองจิจูดสถานที่เกิด (−180 ถึง 180) |
| solar_term_adjustment | "auto" | "before" | "after" | เกิดคาบเส้นสารท: บังคับให้นับเป็นก่อน/หลังสารท · ตั้งต้น auto |
| twin_order | number | ลำดับแฝด 1–9 (แฝดลำดับคู่ วัยจรเดินกลับทิศ ตามสูตรหน้าเว็บ) |
| identical_twin | boolean | แฝดแท้ (ใช้คู่ twin_order) |
| settings | object | ค่า Advanced แบบหน้า Edit ดวง (ไม่ส่ง = ค่าเริ่มต้น): formula ("ravi" | "raymond_lo" | "joey_yap" | "joseph_yu") · san_hui_transform (boolean · กฎไตรทิศ) · hidden_stems_for_strength (boolean) · day_master_type (extreme_weak | weak | weak_sick | strong | extreme_strong | two_elements) · favorable_elements / unfavorable_elements (["Wood","Fire","Earth","Metal","Water"]) · stem_effects { "1"–"10": "good"|"bad"|"neutral" } · branch_effects { "1"–"12": … } — เก็บค่านี้ไว้กับผู้ใช้ฝั่งคุณแล้วส่งมาทุกครั้ง ผลจะตรงกับเว็บ · ค่า Advanced ที่ใช้คำนวณจริง (ทั้งช่องด้านบนและใน settings หรือที่เซฟไว้กับ profile_id) ส่งกลับใน data.subject.advanced ชื่อเดียวกัน — ตรวจได้ว่าระบบยึดค่าที่ตั้ง |
{ "birth": { "date": "1985-11-02", "gender": "female" } } // ไม่ทราบเวลาเกิด
{ "birth": { "date": "1990-05-15", "time": "23:30", "gender": "male", "tz_offset": 8 } } // เกิดที่จีน
{ "birth": { "date": "1990-05-15", "time": "06:10", "gender": "male",
"location_id": "th_chiangmai", "true_solar_time": true } } // เวลาสุริยะจริง06.เวลา (วันจร/ยามจร)
| ชื่อ | ชนิด | คำอธิบาย |
|---|---|---|
| at | ISO-8601 | เวลาที่ถาม พร้อมเขตเวลา เช่น "2026-10-01T14:30:00+07:00" |
| date | "YYYY-MM-DD" | ถามทั้งวัน (ใช้แทน at) · ส่งคู่ time ได้ |
| time | "HH:mm" | ใช้คู่กับ date |
| tz | string | ชื่อเขตเวลา IANA ("Asia/Bangkok") หรือ offset ("+07:00") · ตั้งต้น Asia/Bangkok |
- ไม่ส่งเวลา = ตอนนี้ ตามเขตเวลา tz (ตั้งต้น Asia/Bangkok) — ใช้ตอบคำถามแบบ "วันนี้เป็นยังไง"
- ส่ง
dateอย่างเดียว = ทั้งวัน (ไม่ชี้ยาม ได้ครบ 12 ยาม) · ส่งatหรือdate+time= ณ เวลานั้น - คำตอบมี
resolvedบอกเวลาที่ใช้จริงเสมอ (source: "now" | "request") - ขอบเขต: วันเปลี่ยน 23:00 (ยามชวด) · ปีเปลี่ยนที่ลี่ชุน 立春 · เดือนเปลี่ยนที่สารทใหญ่ 節 — ตรงกับหน้าเว็บ
{ "profile_id": "…" } // ตอนนี้ (เวลาไทย)
{ "profile_id": "…", "tz": "Asia/Tokyo" } // ตอนนี้ (เวลาญี่ปุ่น)
{ "profile_id": "…", "at": "2026-10-01T14:30:00+07:00" } // เวลาที่ระบุ
{ "profile_id": "…", "date": "2027-02-03" } // ทั้งวัน07.รายการ endpoint ทั้งหมด
ข้อมูลบัญชี + คีย์นี้
scope: —/api/v2/meยอดโทเคนคงเหลือ · ระดับสมาชิก · ขอบเขต/เพดานรายวันของคีย์ที่ใช้เรียก · ใช้ไปแล้ววันนี้
พารามิเตอร์ * = ต้องส่ง
ไม่มีพารามิเตอร์
ช่องสำคัญในคำตอบ (ใต้ data)
| ช่อง | ความหมาย |
|---|---|
| balance | โทเคนคงเหลือของบัญชี (ยอดเดียวกับหน้าเว็บ) |
| role | ระดับสมาชิกที่ใช้คิดราคา (แพ็กหมดอายุ = Freemium) |
| key.scopes | กลุ่มที่คีย์นี้เรียกได้: chart · transit · reports · search |
| key.daily_cap / spent_today | เพดานโทเคนต่อวันของคีย์ (0 = ไม่จำกัด) และที่ใช้ไปวันนี้ (นับตามเวลาไทย) |
| key.test | true = คีย์เทส (ไม่คิดเงิน · รับเฉพาะดวงตัวอย่างของบัญชี — ดูหัวข้อค่าใช้จ่าย) |
ตัวอย่างคำตอบ (ย่อจากผลจริง)
{ "success": true, "endpoint": "me", "cost": 0, "balance_after": null,
"data": { "balance": 500, "role": "Premium",
"key": { "name": "My App", "display": "bz_live_3fa1…9c2e", "scopes": ["chart","transit","reports","search"],
"daily_cap": 200, "spent_today": 18, "expires_at": null } } }ราคาต่อครั้งของคุณ
scope: —/api/v2/pricingราคาจริงที่จะถูกตัดต่อการเรียกแต่ละ endpoint ตามระดับสมาชิกของคุณ (หักส่วนลดแล้ว) — เช็กก่อนเรียกของแพง
พารามิเตอร์ * = ต้องส่ง
ไม่มีพารามิเตอร์
ช่องสำคัญในคำตอบ (ใต้ data)
| ช่อง | ความหมาย |
|---|---|
| prices[].endpoint | ชื่อ endpoint (chart · luck_pillars · transit · calendar_month · calendar_year · report_career · report_finance · compatibility · life_scanner · auspicious_dates) |
| prices[].cost | โทเคนที่จะถูกตัดต่อครั้ง |
| prices[].web_price | ราคาเดียวกันบนหน้าเว็บของระดับคุณ · null = ไม่มีบนเว็บ |
ตัวอย่างคำตอบ (ย่อจากผลจริง)
{ "success": true, "data": { "role": "Freemium", "prices": [
{ "endpoint": "chart", "cost": 5, "web_price": null },
{ "endpoint": "report_career", "cost": 210, "web_price": 299 }, … ] } }ประวัติการเรียก
scope: —/api/v2/usageประวัติการเรียกทุกคีย์ของบัญชีย้อนหลัง 90 วัน — ไม่มีข้อมูลดวง
พารามิเตอร์ * = ต้องส่ง
| ชื่อ | ชนิด | คำอธิบาย |
|---|---|---|
| page | number (query) | หน้า เริ่ม 1 |
| per_page | number (query) | 1–200 · ตั้งต้น 50 |
| end_user | string (query) | กรองเฉพาะรหัสผู้ใช้ที่ส่งมาทาง X-End-User |
ตัวอย่างคำขอ
GET /api/v2/usage?page=1&per_page=50
ช่องสำคัญในคำตอบ (ใต้ data)
| ช่อง | ความหมาย |
|---|---|
| items[].endpoint / cost / status / ms | สิ่งที่เรียก · โทเคนที่ตัด · HTTP status · เวลาประมวลผล (มิลลิวินาที) |
| items[].request_id | ใช้อ้างอิงเวลาติดต่อทีมงาน (ตรงกับ request_id ในคำตอบ) |
| items[].this_key | true = เรียกด้วยคีย์ที่ใช้ขอประวัตินี้ |
| items[].end_user | รหัสผู้ใช้ฝั่งคุณที่ส่งมาทาง X-End-User (null = ไม่ได้ส่ง) |
ตัวอย่างคำตอบ (ย่อจากผลจริง)
{ "success": true, "data": { "page": 1, "per_page": 50, "total": 3,
"items": [ { "at": "2026-09-26 03:12:44.120Z", "endpoint": "transit", "cost": 3, "status": 200, "ms": 84, "request_id": "…", "this_key": true } ] } }ฤกษ์มงคลส่วนตัว 30 วัน (พาร์ตเนอร์)
scope: search/api/v2/partner/auspicious-30dเฉพาะพาร์ตเนอร์ที่อนุมัติแล้ว (สมัครที่ /partner/apply) · ส่งวันเกิด/เวลาเกิด ไม่ต้องมีดวงในระบบ → ยามดีทุกวันใน 30 วันนับจากวันเริ่ม พร้อมเกรด คะแนน เหตุผล กิจกรรมที่เหมาะ และคำแนะนำยิงแอด/คอนเทนต์ · คะแนนฐานใช้สูตรเดียวกับหน้าค้นหาฤกษ์
พารามิเตอร์ * = ต้องส่ง
| ชื่อ | ชนิด | คำอธิบาย |
|---|---|---|
| profile_id | string | ดวงที่บันทึกในบัญชีเจ้าของคีย์ (ดูจาก GET /api/v2/profiles) — ส่งอย่างใดอย่างหนึ่งกับ birth |
| birth | object | ข้อมูลเกิดดิบ (ดูหัวข้อ "ระบุดวง") — ส่งอย่างใดอย่างหนึ่งกับ profile_id |
| lang | string | ภาษาของป้ายชื่อ/คำอธิบาย: th (ตั้งต้น) · en · zh-TW · zh-CN · ko · ja · ru · vi · id · es |
| start_date | "YYYY-MM-DD" | วันเริ่ม · ไม่ส่ง = วันนี้ (ตามเขตเวลา tz_offset) · นับ 30 วันอัตโนมัติ |
| tz_offset | number | เขตเวลาของเวลาในผลลัพธ์ (ชั่วโมง) · ตั้งต้น 7 |
| mode | "every_day" | "auspicious_days" | every_day (ตั้งต้น) = ทุกวันได้ยามดีของวันนั้น (ตัดยามที่ชงเสาปี/วันของเจ้าชะตา · วันเจี้ยนร้ายลดเกรด) · auspicious_days = เฉพาะวันฤกษ์ตามหน้าค้นฤกษ์หมวดทั่วไป |
| min_grade | "A+" | "A" | "B" | "C" | เกรดต่ำสุดที่ส่งกลับ · ตั้งต้น B |
| sort | "datetime" | "score" | "purpose" | เรียงตามวันเวลา (ตั้งต้น) · ดีสุดก่อน · จุดประสงค์ (แล้วดีสุดก่อน) — ทุกยามมี sort_keys ให้จัดเรียงเองได้ |
| purposes | string[] | กรองเฉพาะยามที่เหมาะกับจุดประสงค์: launch · direct_sale · promotion · limited_offer · education · brand_trust · announcement · testimonial · community · collaboration · viral · retargeting · lead_generation · live_commerce · niche |
| per_day | number | จำนวนยามดีสุดต่อวัน 1–12 (ไม่ส่ง = ทุกยามที่ผ่านเกรด) |
| limit | number | จำนวนยามที่ส่งกลับ 1–400 · ตั้งต้น 400 |
ตัวอย่างคำขอ
{ "birth": { "date": "1988-05-14", "time": "09:30", "gender": "female" }, "start_date": "2026-10-01", "sort": "score", "per_day": 3, "lang": "th" }ช่องสำคัญในคำตอบ (ใต้ data)
| ช่อง | ความหมาย |
|---|---|
| window | start_date · end_date · days (30) · tz_offset · mode |
| slots[].start_at / end_at / hour_range | ช่วงเวลาจริงของยาม (ISO พร้อมเขตเวลา) · ยามชวด = 23:00 ของคืนก่อน ถึง 00:59 |
| slots[].grade / score / score_breakdown | เกรด A+ (≥88) · A (≥75) · B (≥62) · C · คะแนน 0–100 = คะแนนเว็บ×0.45 + %ธาตุให้คุณ×0.25 + ยามมงคลซ้อนธาตุให้คุณ 15 (อย่างเดียว 7) + วันมงคล 10 + เจี้ยนดี 5 / ร้าย −15 |
| slots[].web_score / favorable_percentage | คะแนนยามตามสูตรหน้าค้นฤกษ์ · % ธาตุให้คุณใน 8 อักษรของฤกษ์ |
| slots[].reasons / factors | เหตุผลภาษาคน · ดาวมงคลของวัน · ดาวเขียวประจำยาม · ยามเป็นธาตุให้คุณ · เจี้ยน · ภาคี/ปะทะกับดวง |
| slots[].activities | กิจกรรมที่เหมาะ/ควรเลี่ยงของวัน (12 เจี้ยน) |
| slots[].marketing | primary · purposes[] (id · label · ad = รูปแบบแอด) · content_style · cta (soft/medium/strong) · confidence · budget · why · caution |
| slots[].sort_keys | datetime · score · purpose — ใช้จัดเรียงฝั่งผู้ใช้ |
| days[] / purposes | สรุปรายวัน (เจี้ยน · เกรดดีสุด · จำนวนยาม) · ดัชนีจุดประสงค์ (จำนวนยาม · ยามดีสุด) |
ตัวอย่างคำตอบ (ย่อจากผลจริง)
{ "success": true, "endpoint": "partner_auspicious_30d", "cost": 25, "resolved": { "start_date": "2026-10-01", "end_date": "2026-10-30", "tz_offset": 7 },
"data": { "window": { "days": 30, "mode": "every_day" }, "total": 199, "returned": 90,
"slots": [ { "id": "2026-10-29-01", "start_at": "2026-10-28T23:00:00+07:00", "grade": "A+", "score": 100,
"reasons": [ "วันมงคล: …", "ยามมงคล (ดาวเขียว) ซ้อนธาตุให้คุณ" ],
"marketing": { "primary": "live_commerce", "purposes": [ { "id": "live_commerce", "label": "ไลฟ์ขายของ", "ad": "…" } ], "cta": "strong", "budget": "…" } }, … ],
"days": [ … ], "purposes": { "launch": { "count": 41, "best_slot": "…" }, … } } }- ต้องเป็นพาร์ตเนอร์ที่แอดมินอนุมัติและเปิดฟีเจอร์ auspicious_30d · คนอื่นได้ 403
- เพดานความถี่รายพาร์ตเนอร์ (ตั้งต้น 120 ครั้ง/นาที) · ผลคำนวณเก็บแคช 12 ชม. ต่อชุดเสาดวง+วันเริ่ม (ตอบเร็ว แต่ยังคิดเงินทุกครั้ง)
- ข้อความคำแนะนำ: ไทยเมื่อ lang=th · ภาษาอื่นเป็นอังกฤษ · ชื่อเจี้ยน/ดาวแปลตาม lang
- ข้อมูลเกิดไม่ถูกเก็บ ไม่ลง log
แคตตาล็อกคอร์สเรียน
scope: —/api/v2/coursesฟรี: รายชื่อคอร์สที่เปิดสาธารณะ (โครงคอร์ส ไม่มีเนื้อหาบทเรียน) — ลิงก์ให้ผู้ใช้ไปเรียนที่เว็บเรา
พารามิเตอร์ * = ต้องส่ง
ไม่มีพารามิเตอร์
ตัวอย่างคำขอ
GET /api/v2/courses
ช่องสำคัญในคำตอบ (ใต้ data)
| ช่อง | ความหมาย |
|---|---|
| courses[] | id · title · subtitle · description · instructor · badge · certificate · token_cost · free · lessons[] (id · title · type · section · has_video · quiz_count) · url |
ตัวอย่างคำตอบ (ย่อจากผลจริง)
{ "success": true, "endpoint": "courses", "cost": 0, "data": { "courses": [ { "id": "…", "title": "…", "lessons": [ … ], "url": "https://bazi.fengshuix.com/member/courses" } ] } }- ไม่รวมคอร์สร่างและคอร์ส Invite Only · เนื้อหาบทเรียนไม่ออกทาง API
08.การคิดโทเคน · เพดาน · กันจ่ายซ้ำ
- ใช้โทเคนกระเป๋าเดียวกับหน้าเว็บ · รายการที่ถูกตัดขึ้นในประวัติโทเคนของบัญชี (
API v2: <endpoint>) - ลำดับ: ตรวจยอดพอ → คำนวณ → ตัดโทเคน → ส่งผล · ยอดไม่พอ = 402 (ไม่คำนวณ) · error = ไม่ตัด
- ราคาต่อครั้งเป็นราคาพาร์ตเนอร์ของบัญชีคุณ (ทีมงานเป็นผู้กำหนด) — อ่านค่าล่าสุดจาก GET /api/v2/pricing · เรียกซ้ำก็คิดซ้ำ
- Idempotency-Key: ใส่ค่าไม่ซ้ำ (เช่น UUID) ต่อ "งาน" หนึ่งงาน ถ้าเน็ตหลุดแล้วส่งซ้ำด้วยค่าเดิมภายใน 10 นาที จะได้คำตอบเดิม (หัว Idempotent-Replayed: true) โดยไม่ตัดซ้ำ · Key เดิมต้องเป็นคำขอเดิมทุกอย่าง (endpoint · body · การเข้ารหัส) ไม่งั้นได้ 422 · ยาว 1–100 ตัว
- X-Max-Cost: (ไม่บังคับ) ราคาสูงสุดต่อครั้งที่คุณยอมจ่าย เป็นจำนวนโทเคน — ถ้าราคาจริงสูงกว่า (เช่น ทีมงานปรับราคา) ได้ 412 ไม่คำนวณ ไม่ถูกหัก · เหมาะกับระบบที่เก็บเงินผู้ใช้ปลายทางตามราคาตายตัว
- X-End-User: (ไม่บังคับ) รหัสผู้ใช้ฝั่งคุณ 1–64 ตัว (A–Z a–z 0–9 _ . : -) ห้ามใส่อีเมล/ชื่อ — บันทึกในประวัติการเรียก ใช้แยกค่าใช้จ่ายรายผู้ใช้ (GET /api/v2/usage?end_user= · CSV ในพอร์ทัล)
- คีย์เทส (บัญชีเทส): เมื่อทีมงานเปิดบัญชีเทสให้ สร้าง "คีย์เทส" ได้ที่หน้าคีย์ — เรียก endpoint เดิมทุกตัว รับส่งข้อมูลรูปเดียวกับของจริง แต่ไม่ตัดโทเคน (cost 0 · test: true · list_price = ราคาจริง · หัว X-Bazi-Test: 1) และรับเฉพาะดวงตัวอย่างไม่เกิน 3 ดวงของบัญชี (วัน + เวลา + เพศ ต้องตรง · birth.settings ส่งต่างกันได้ · ห้าม profile_id, simulated_hour และช่องที่เลื่อนเวลาเกิด เช่น tz_offset/location_id/true_solar_time/longitude/solar_term_adjustment/twin_order · ใช้ได้เฉพาะ /api/v2) เรียกดูรายการดวงตัวอย่างที่ GET /api/v2/profiles ด้วยคีย์เทส · ไม่เกิน 500 ครั้ง/วัน/บัญชี
- ทีมงาน: เจ้าของบัญชีพาร์ตเนอร์เพิ่มทีมงานได้ที่พอร์ทัล แท็บ "ทีมงาน" — ทุกคนใช้เครดิต คีย์ และประวัติการเรียกของบัญชีเดียวกัน (คีย์ที่ทีมงานสร้างเป็นของบัญชีบริษัท) · บทบาท: แอดมินทีม · นักพัฒนา · ผู้ดู · เติมเครดิตได้เฉพาะเจ้าของบัญชี · รหัสชั่วคราวส่งทางอีเมลเท่านั้น · บัญชีสมาชิกเว็บเดิมต้องกดยอมรับคำเชิญเอง
- เพดานรายวันของคีย์: นับยอดที่ตัดจริงตั้งแต่เที่ยงคืนเวลาไทย · ถึงเพดาน = 429 (daily_cap, spent_today) · ปรับ/ปลดได้ที่หน้าคีย์
09.Rate limit
| ประเภท | เพดาน | หมายเหตุ |
|---|---|---|
| ทั่วไป (ฟรี · chart · transit · รายงาน) | 60 ครั้ง/นาที/คีย์ | |
| งานหนัก (calendar · life-scanner · auspicious-dates) | 5 ครั้ง/นาที/คีย์ | ทำพร้อมกันได้ครั้งละ 1 ต่อคีย์ |
10.รหัสข้อผิดพลาด
| HTTP | สาเหตุ / วิธีแก้ |
|---|---|
| 400 | ข้อมูลผิดรูปแบบ (error บอกช่องที่ผิด) · body ไม่ใช่ JSON · ส่งคีย์ใน URL · ยังไม่มี signing secret · Idempotency-Key ยาวเกิน 100 ตัว · ส่งช่องผิดชนิด (เช่น ตัวเลขแทนข้อความ) หรือวันที่ที่ไม่มีจริง |
| 401 | ไม่มีคีย์ · คีย์ผิด/ถูกปิด/หมดอายุ · ลายเซ็นผิด/หมดเวลา/nonce ซ้ำ |
| 402 | โทเคนไม่พอ — คำตอบมี price และ balance · ไม่มีการคำนวณ ไม่ถูกหัก |
| 403 | บัญชียังไม่ได้เปิดสิทธิ์ API · คีย์ไม่มี scope นี้ · IP ไม่อยู่ในรายการที่อนุญาต · เมนูนี้ปิดสำหรับแพ็กเกจของคุณบนเว็บ · ค้นฤกษ์เกินหน้าต่างของแพ็กเกจ |
| 404 | ไม่พบ profile_id (หรือไม่ใช่ดวงในบัญชีเจ้าของคีย์) |
| 403 (test) | คีย์เทส: บัญชียังไม่ได้เปิดบัญชีเทส · ส่ง profile_id · หรือ birth/partner_birth ไม่ตรงดวงตัวอย่าง (วัน + เวลา + เพศ) · ส่งช่องที่เลื่อนเวลาเกิด (tz_offset · location_id · true_solar_time · longitude · solar_term_adjustment · twin_order) หรือ simulated_hour |
| 409 | คำขอที่ใช้ Idempotency-Key เดียวกันยังทำงานอยู่ — รอแล้วส่งซ้ำ |
| 412 | ราคาต่อครั้งเกิน X-Max-Cost ที่ส่งมา (price · max_cost) — ไม่คำนวณ ไม่ถูกหัก · ตรวจราคาล่าสุดที่ GET /api/v2/pricing |
| 422 | Idempotency-Key นี้เคยใช้กับคำขออื่น (endpoint/body/การเข้ารหัสไม่ตรงกัน) — ใช้ Key ใหม่สำหรับงานใหม่ |
| 413 | body ใหญ่เกิน 20 KB |
| 429 | เกิน rate limit (ดู Retry-After) · ถึงเพดานโทเคนรายวันของคีย์ (daily_cap · spent_today) · มีงานหนักทำอยู่ |
| 500 | คำนวณไม่สำเร็จ — ไม่ถูกหักโทเคน · แจ้งทีมงานพร้อม request_id |
| 503 | ระบบ API ยังไม่เปิด (แอดมินทดสอบได้) หรือขัดข้องชั่วคราว |
11.ชั้นความปลอดภัยที่สอง (ลายเซ็น + เข้ารหัส)
11.1 ลายเซ็นคำขอ (HMAC-SHA256)
| หัว | ค่า |
|---|---|
| X-Bazi-Timestamp | เวลา unix (วินาที) · ต่างจากเวลาเซิร์ฟเวอร์ไม่เกิน 300 วินาที |
| X-Bazi-Nonce | สตริงสุ่ม 16–64 ตัว [A-Za-z0-9_-] · ใช้ซ้ำไม่ได้ (กันยิงซ้ำ) |
| X-Bazi-Signature | hex( HMAC-SHA256( secret, "timestamp.nonce.METHOD.path?query.E.rawBody" ) ) · E = 1 เมื่อเข้ารหัส ไม่งั้น 0 |
- METHOD ตัวพิมพ์ใหญ่ · path รวม query ถ้ามี (เช่น
/api/v2/usage?page=2) · GET ใช้ body ว่าง - rawBody = ข้อความ body ที่ส่งจริงทุกไบต์ (ถ้าเข้ารหัส = ตัวที่เข้ารหัสแล้ว)
- ผลลัพธ์: คีย์หลุดอย่างเดียวเรียกไม่ได้ · คำขอที่ถูกดักไปยิงซ้ำไม่ได้ · แก้ body ระหว่างทางไม่ได้
11.2 เข้ารหัสเนื้อข้อมูล (AES-256-GCM)
- ใช้เมื่อข้อมูลเกิดของลูกค้าต้องผ่านตัวกลาง (proxy · API gateway · ระบบ log) — ต้องลงลายเซ็นด้วยเสมอ
- หัว
X-Bazi-Encrypted: 1· body ={"iv": base64(12 bytes), "ciphertext": base64, "tag": base64(16 bytes)} - กุญแจ = SHA-256 ของข้อความ
"bazi-api-v2-enc:" + secret(32 bytes) - คำตอบกลับมาเข้ารหัสแบบเดียวกัน + "encrypted": true (รวมคำตอบ error หลังตรวจลายเซ็นผ่าน)
// Node.js — signed request (+ optional payload encryption)
import crypto from 'crypto';
const KEY = process.env.BAZI_API_KEY, SECRET = process.env.BAZI_API_SECRET; // bz_live_… / bzs_…
const encKey = crypto.createHash('sha256').update('bazi-api-v2-enc:' + SECRET).digest();
async function signedCall(path, payload, encrypt = false) {
let body = JSON.stringify(payload);
if (encrypt) {
const iv = crypto.randomBytes(12);
const c = crypto.createCipheriv('aes-256-gcm', encKey, iv);
const ct = Buffer.concat([c.update(body, 'utf8'), c.final()]);
body = JSON.stringify({ iv: iv.toString('base64'), ciphertext: ct.toString('base64'), tag: c.getAuthTag().toString('base64') });
}
const ts = Math.floor(Date.now() / 1000).toString();
const nonce = crypto.randomBytes(16).toString('hex');
const sig = crypto.createHmac('sha256', SECRET).update([ts, nonce, 'POST', path, encrypt ? '1' : '0', body].join('.')).digest('hex');
const res = await fetch('https://bazi.fengshuix.com' + path, { method: 'POST', body, headers: {
'x-api-key': KEY, 'Content-Type': 'application/json',
'X-Bazi-Timestamp': ts, 'X-Bazi-Nonce': nonce, 'X-Bazi-Signature': sig,
...(encrypt ? { 'X-Bazi-Encrypted': '1' } : {}) } });
const out = await res.json();
if (!out.encrypted) return out;
const d = crypto.createDecipheriv('aes-256-gcm', encKey, Buffer.from(out.iv, 'base64'));
d.setAuthTag(Buffer.from(out.tag, 'base64'));
return JSON.parse(Buffer.concat([d.update(Buffer.from(out.ciphertext, 'base64')), d.final()]).toString('utf8'));
}
await signedCall('/api/v2/transit', { birth: { date: '1990-05-15', time: '14:30', gender: 'male' } }, true);# Python 3 — signed + encrypted request (pip install requests cryptography)
import os, json, time, hmac, hashlib, base64, secrets, requests
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
KEY, SECRET = os.environ["BAZI_API_KEY"], os.environ["BAZI_API_SECRET"]
ENC = hashlib.sha256(("bazi-api-v2-enc:" + SECRET).encode()).digest()
def signed_call(path, payload, encrypt=False):
body = json.dumps(payload, ensure_ascii=False)
if encrypt:
iv = secrets.token_bytes(12)
sealed = AESGCM(ENC).encrypt(iv, body.encode(), None) # ciphertext + tag (16 bytes)
body = json.dumps({"iv": base64.b64encode(iv).decode(),
"ciphertext": base64.b64encode(sealed[:-16]).decode(),
"tag": base64.b64encode(sealed[-16:]).decode()})
ts, nonce = str(int(time.time())), secrets.token_hex(16)
sig = hmac.new(SECRET.encode(), f"{ts}.{nonce}.POST.{path}.{'1' if encrypt else '0'}.{body}".encode(), hashlib.sha256).hexdigest()
headers = {"x-api-key": KEY, "Content-Type": "application/json",
"X-Bazi-Timestamp": ts, "X-Bazi-Nonce": nonce, "X-Bazi-Signature": sig}
if encrypt: headers["X-Bazi-Encrypted"] = "1"
out = requests.post("https://bazi.fengshuix.com" + path, data=body.encode(), headers=headers, timeout=30).json()
if out.get("encrypted"):
raw = base64.b64decode(out["ciphertext"]) + base64.b64decode(out["tag"])
out = json.loads(AESGCM(ENC).decrypt(base64.b64decode(out["iv"]), raw, None))
return out12.ตัวอย่างโค้ด (curl · JavaScript · Python · PHP)
JavaScript (Node.js)
// Node.js 18+ / Deno / Bun — call from your server only
const KEY = process.env.BAZI_API_KEY;
async function bazi(path, body) {
const res = await fetch('https://bazi.fengshuix.com' + path, {
method: body ? 'POST' : 'GET',
headers: { 'x-api-key': KEY, 'Content-Type': 'application/json', 'Idempotency-Key': crypto.randomUUID() },
body: body ? JSON.stringify(body) : undefined,
});
const out = await res.json();
if (!out.success) throw new Error(`${res.status} ${out.error} (request_id ${out.request_id})`);
return out; // { cost, balance_after, resolved?, warnings?, data }
}
const today = await bazi('/api/v2/transit', { profile_id: 'abc123def456ghi', lang: 'en' });
console.log(today.data.day_verdict.label, today.cost, today.balance_after);Python
# Python 3 + requests
import os, uuid, requests
KEY = os.environ["BAZI_API_KEY"]
BASE = "https://bazi.fengshuix.com"
def bazi(path, body=None):
r = requests.request("POST" if body is not None else "GET", BASE + path, json=body, timeout=30,
headers={"x-api-key": KEY, "Idempotency-Key": str(uuid.uuid4())})
out = r.json()
if not out.get("success"):
raise RuntimeError(f"{r.status_code} {out.get('error')} (request_id {out.get('request_id')})")
return out
chart = bazi("/api/v2/chart", {"birth": {"date": "1990-05-15", "time": "14:30", "gender": "male"}, "lang": "en",
"sections": ["pillars", "elements"]})
print(chart["data"]["elements"], chart["cost"])PHP
<?php
function bazi(string $path, ?array $body = null): array {
$ch = curl_init('https://bazi.fengshuix.com' . $path);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['x-api-key: ' . getenv('BAZI_API_KEY'), 'Content-Type: application/json',
'Idempotency-Key: ' . bin2hex(random_bytes(16))],
CURLOPT_POST => $body !== null,
CURLOPT_POSTFIELDS => $body !== null ? json_encode($body, JSON_UNESCAPED_UNICODE) : null,
]);
$out = json_decode(curl_exec($ch), true);
if (empty($out['success'])) throw new Exception(($out['error'] ?? 'error') . ' ' . ($out['request_id'] ?? ''));
return $out;
}
$r = bazi('/api/v2/auspicious-dates', ['profile_id' => 'abc123def456ghi', 'start_date' => '2026-10-01',
'end_date' => '2026-12-29', 'category' => 'wedding', 'limit' => 5]);
foreach ($r['data']['results'] as $x) echo $x['date'], ' ', $x['hourData']['timeStr'], ' ', $x['score'], PHP_EOL;curl — ครบทุก endpoint
curl "https://bazi.fengshuix.com/api/v2/me" -H "x-api-key: $BAZI_API_KEY"
curl "https://bazi.fengshuix.com/api/v2/pricing" -H "x-api-key: $BAZI_API_KEY"
curl "https://bazi.fengshuix.com/api/v2/usage" -H "x-api-key: $BAZI_API_KEY"
curl -X POST https://bazi.fengshuix.com/api/v2/partner/auspicious-30d -H "x-api-key: $BAZI_API_KEY" -H "Content-Type: application/json" \
-d '{ "birth": { "date": "1988-05-14", "time": "09:30", "gender": "female" }, "start_date": "2026-10-01", "sort": "score", "per_day": 3, "lang": "th" }'
curl "https://bazi.fengshuix.com/api/v2/courses" -H "x-api-key: $BAZI_API_KEY"13.ตารางรหัสอ้างอิง
ราศีบน (stem.id)
| id | อักษร | Pinyin | ธาตุ | Yin/Yang | ชื่อ |
|---|---|---|---|---|---|
| 1 | 甲 | Jia | Wood | Yang | ไม้หยาง |
| 2 | 乙 | Yi | Wood | Yin | ไม้หยิน |
| 3 | 丙 | Bing | Fire | Yang | ไฟหยาง |
| 4 | 丁 | Ding | Fire | Yin | ไฟหยิน |
| 5 | 戊 | Wu | Earth | Yang | ดินหยาง |
| 6 | 己 | Ji | Earth | Yin | ดินหยิน |
| 7 | 庚 | Geng | Metal | Yang | ทองหยาง |
| 8 | 辛 | Xin | Metal | Yin | ทองหยิน |
| 9 | 壬 | Ren | Water | Yang | น้ำหยาง |
| 10 | 癸 | Gui | Water | Yin | น้ำหยิน |
นักษัตรล่าง (branch.id)
| id | อักษร | Pinyin | นักษัตร | ธาตุ | ชื่อไทย |
|---|---|---|---|---|---|
| 1 | 子 | Zi | Rat | Water | ชวด |
| 2 | 丑 | Chou | Ox | Earth | ฉลู |
| 3 | 寅 | Yin | Tiger | Wood | ขาล |
| 4 | 卯 | Mao | Rabbit | Wood | เถาะ |
| 5 | 辰 | Chen | Dragon | Earth | มะโรง |
| 6 | 巳 | Si | Snake | Fire | มะเส็ง |
| 7 | 午 | Wu | Horse | Fire | มะเมีย |
| 8 | 未 | Wei | Goat | Earth | มะแม |
| 9 | 申 | Shen | Monkey | Metal | วอก |
| 10 | 酉 | You | Rooster | Metal | ระกา |
| 11 | 戌 | Xu | Dog | Earth | จอ |
| 12 | 亥 | Hai | Pig | Water | กุน |
10 เทพ (ten_god.code)
| code | English | อักษร | Pinyin | ไทย |
|---|---|---|---|---|
| FR | Friend | 比肩 | Bi Jian | เพื่อน (ปีเกียง) |
| RW | Rob Wealth | 劫財 | Jie Cai | แย่งชิงทรัพย์ (เกียบไช้) |
| EG | Eating God | 食神 | Shi Shen | เทพแห่งอาหาร (เจี๊ยะซิ้ง) |
| HO | Hurting Officer | 傷官 | Shang Guan | ทำลายขุนนาง (เซียกัว) |
| IW | Indirect Wealth | 偏財 | Pian Cai | ลาภลอย (เพียงไช้) |
| DW | Direct Wealth | 正財 | Zheng Cai | ลาภผลหลัก (เจียไช้) |
| 7K | 7 Killings | 七殺 | Qi Sha | เจ็ดอสูรพิฆาต (ชิกสัวะ) |
| DO | Direct Officer | 正官 | Zheng Guan | ขุนนาง (เจียกัว) |
| IR | Indirect Resource | 偏印 | Pian Yin | พลังเสริมรอง (เพียงอิ่ง) |
| DR | Direct Resource | 正印 | Zheng Yin | พลังเสริมหลัก (เจียอิ่ง) |
| DM | Day Master | 日主 | Ri Zhu | เจ้าชะตา |
ดาวพยากรณ์ 神煞 (stars[].id)
| id | อักษร | English | ความหมาย | ผล |
|---|---|---|---|---|
| NOBLEMAN | 天乙贵人 | Nobleman | เทียนอี้กุ้ยเหริน (ดาวขุนนาง) | good |
| ACADEMIC | 文昌 | Intelligence | เหวินชาง (ดาววิชาการ) | good |
| TAI_JI | 太极贵人 | Tai Ji Nobleman | ไท่จี๋กุ้ยเหริน | good |
| PEACH_BLOSSOM | 桃花 | Peach Blossom | ท้อฮวย (ดาวเสน่ห์) | good |
| TRAVELLING_HORSE | 驿马 | Sky Horse | ดาวม้า (ดาวเดินทาง) | neutral |
| GENERAL | 将星 | General Star | เจียงซิง (ดาวแม่ทัพ) | good |
| SOLITARY | 孤辰 | Solitary | กูเฉิน (ดาวโดดเดี่ยว) | bad |
| LONESOME | 寡宿 | Lonesome | กวาสู้ (ดาวว้าเหว่) | bad |
| RED_BLOSSOM | 红艳煞 | Red Blossom | มารเสน่ห์แดง | good |
| HEAVENLY_VIRTUE | 天德贵人 | Heavenly Virtue | เทียนเต๋อกุ้ยเหริน | good |
| MONTHLY_VIRTUE | 月德贵人 | Monthly Virtue | เย่วเต๋อกุ้ยเหริน | good |
| SWORD | 羊刃 | Sword/Goat Blade | ดาวดาบ (ดาวแกะ) | bad |
| PROSPERITY | 干禄 | Prosperity | ดาวโชคลาภ | good |
| FU_XING | 福星贵人 | Prosperity Star | ฮกแชกุ้ยนั้ง (ดาวอุปถัมภ์โชคลาภ) | good |
| TALENT | 华盖 | Talent | ดาวฮั่วไก่ (ดาวศิลปะบริสุทธิ์) | good |
| ROBBERY_SHA | 劫煞 | Robbing | เจี๋ยซา (ดาวปล้นสะดม) | bad |
| DEATH_GOD | 亡神 | Death | หวังเสิน (ดาวสูญเสีย) | bad |
| CALAMITY_SHA | 灾煞 | Calamity Sha | จั้ยซา (ดาวเคราะห์กรรม) | bad |
ดาวมงคลประจำวัน (special_days[].id · requiredStars)
| id | อักษร | ชื่อ | ความหมาย |
|---|---|---|---|
| tian_de | 天德 | คุณธรรมสวรรค์ | ดาวคุณธรรม ฟ้าคุ้มครอง เป็นฤกษ์สิริมงคล เทพอุปถัมภ์ ทำการงานสำเร็จ ผ่อนหนักเป็นเบา ใช้กับงานมงคลได้ทุกงาน (ดาวมงคลระดับสูง) - เน้นการแก้ไขปัญหาอุปสรรค |
| yue_de | 月德 | คุณธรรมจันทรา | ลางสังหรณ์ สัมผัสพิเศษ มีผู้ใหญ่คอยช่วยเหลือ คุ้มครองให้ปลอดภัย เหมือนดังแสงสว่างส่องทางชีวิต ดีทุกงานมงคล (ดาวมงคลระดับสูง) - เน้นการแก้ไขอันตรายและนำพาความสำเร็จมาสู่การงาน |
| tian_de_he | 天德合 | ภาคีคุณธรรมสวรรค์ | พบเรื่องร้ายจะกลายเป็นดี เหมาะสำหรับทำการค้า - คล้ายกับ 天德 แต่ความเป็นมงคลนั้นน้อยกว่าเล็กน้อย จะช่วยแก้ไขความโชคร้ายและนำมาซึ่งการสนับสนุนจากผู้มีอุปการคุณ |
| yue_de_he | 月德合 | ภาคีคุณธรรมจันทรา | ภูติผีปีศาจ สิ่งร้ายจะสูญสิ้น มีแต่บุญบารมี - คล้ายกับ 月德 แต่ความเป็นมงคลนั้นน้อยกว่าเล็กน้อย จะนำมาซึ่งความราบรื่นในอาชีพการงานและบุคลิกที่ใจดีและมีเมตตา |
| yi_ma | 驿马 | ม้าเดินทาง | วันสิริมงคล ความสำเร็จอย่างรวดเร็วเหมือนม้า เหมาะสำหรับไหว้เจ้าขอพรให้มีความสำเร็จในกิจการ เหมาะกับงานทั่วไป งานระยะสั้น การเดินทาง เข้ารับตำแหน่ง ย้ายบ้าน พบผู้ใหญ่ หาแพทย์ |
| he_yi_ma | 合驿马 | ภาคีม้าเดินทาง | ลาภผลว่องไว สำหรับเน้นความร่ำรวยอย่างรวดเร็วในกิจการ เหมือนมีม้าช่วยนำมาส่ง เหมาะสำหรับการเซ็นสัญญาค้าขาย หากเริ่มทำการค้ายิ่งดี |
| qiu_zi | 求 | ขอบุตร | วันมงคลของดาวสืบเนื่องในเดือน เหมาะสำหรับ เซ่นไหว้ขอบุตร |
| yang_de | 阳德 | หยางเต๋อ | วันคุณธรรมหยาง สำหรับเปิดกิจการ ทำการค้า แต่งงาน ทำสัญญา |
| yin_de | 阴德 | หยินเต๋อ | วันคุณธรรมหยิน ที่ควบคุมความดีร้ายของมนุษย์ ชอบคุณธรรม ตรงไปตรงมา สำหรับไหว้พระขอพร ขอบุตรสืบสกุล ทำบุญทำทาน ล้างมลทิน การช่วยเหลือคนอื่นโดยไม่หวังผลตอบแทน จะได้บุญกุศลแรง |
| tian_she | 天赦 | วันฟ้าอภัย | วันอภัยโทษจากสวรรค์ 天赦日 Tiān shè rì เทียนเซี่ยยวี่ หรือ เทียงเสี่ย แปลว่า วันขอบคุณสวรรค์ หรือวันสำนึกบุญคุณฟ้า ดาวฟ้าอภัย ได้รับการอภัยจากฟ้า สวรรค์ยินดี มีลางสังหรณ์ เทพคุ้มครอง เป็นวันที่เหมาะแก่การไหว้พระ ขอขมากรรมต่อสิ่งศักดิ์สิทธิ์ เทพ เทวดาทั้งปวง การให้อภัยเป็นหนึ่งในองค์ประกอบหลักของการดำเนินชีวิตที่ดี ซื่อสัตย์ และบริสุทธิ์ เชื่อกันว่าในวันเหล่านี้มีพลังแห่งความเจริญรุ่งเรือง(氣) ให้กำเนิดทุกสิ่งและให้อภัยบาป เป็นวันมงคลสำหรับจักรพรรดิแห่งสวรรค์ ที่จะยกโทษบาปของสรรพสัตว์ |
12 เจี้ยน (jian · requiredJian)
| พินอิน | อักษร | อังกฤษ | ผล | เหมาะ | เลี่ยง |
|---|---|---|---|---|---|
| Jian | 建 | Establish | good | หมั้นหมาย รับตำแหน่ง เจรจา ขอพร | เดินทางไกล งานศพ |
| Chu | 除 | Remove | bad | ทำความสะอาด รื้อถอน ผ่าตัด สะเดาะเคราะห์ | งานมงคล แต่งงาน |
| Man | 滿 | Full | good | เปิดกิจการ สัญญาใหญ่ แต่งงาน ทวงหนี้ | ฝังศพ รื้อถอน |
| Ping | 平 | Balance | neutral | ประนีประนอม งานประจำ แก้เรื่องค้าง | งานที่หวังผลเร็ว |
| Ding | 定 | Stable | good | เซ็นสัญญา แต่งงาน สร้างบ้าน งานระยะยาว | งานศพ เที่ยว |
| Zhi | 執 | Initiate | good | ขอพร ไหว้พระ ตั้งเป้าหมาย วางแผน | เดินทางไกล ย้ายบ้าน |
| Po | 破 | Destruction | bad | รื้อถอน ผ่าตัด พบแพทย์ | งานมงคล เริ่มธุรกิจ เซ็นสัญญา |
| Wei | 危 | Danger | bad | บูชาสิ่งศักดิ์สิทธิ์ ขอพร ค้าขาย | ขึ้นที่สูง เดินเรือ งานเสี่ยง |
| Cheng | 成 | Success | good | งานมงคล เปิดร้าน ออกสินค้าใหม่ เซ็นสัญญา | ฟ้องร้องคดี |
| Shou | 收 | Receive | good | เริ่มงานใหม่ ค้าขาย ซื้อบ้าน เก็บเงิน | หาหมอ งานศพ |
| Kai | 開 | Open | good | เปิดร้าน ก่อสร้าง ขึ้นบ้านใหม่ รับตำแหน่ง | งานศพ ฝังศพ |
| Bi | 閉 | Close | bad | งานลับ ถมบ่อ ซ่อมกำแพง เก็บเงินเข้าเซฟ | เปิดร้าน ค้าขาย |
ชนิดดิถี (interactions[].type)
| type | ความหมาย |
|---|---|
| Clash | ชง (นักษัตรล่างปะทะ) |
| Harm | ไห่ (ให้โทษ) |
| Destruction | ผั่ว (ทำลาย) |
| Punishment | เฮ้ง (ลงโทษ) |
| SixCombo | ภาคีล่าง 6 ฮะ |
| HalfCombo | ภาคีครึ่ง |
| ThreeHarmony | ซาฮะ (สามประสาน) |
| Directional | ไตรทิศ |
| StemCombo | ภาคีราศีบน |
| StemClashIn | ชงเข้า (ถูกข่ม) |
| StemClashOut | ชงออก (ไปข่ม) |
| StemDuplicate | ราศีบนซ้ำ |
| EarthDuplicate | นักษัตรล่างซ้ำ (ทับนักษัตร) |
ค่าที่เป็นรหัสอื่น ๆ
| ช่อง | ค่าที่เป็นไปได้ |
|---|---|
| day_master.strength | extreme_weak · weak · weak_sick · strong · extreme_strong · two_elements |
| effect (stem/branch) | good · bad · neutral (ผลต่อเจ้าชะตา) |
| element | Wood · Fire · Earth · Metal · Water |
| structures | Companion · Output · Wealth · Power · Resource (รายงานอาชีพใช้ Influence แทน Power) |
| day_verdict.level | veryGood (≥2) · good (1) · neutral (0) · caution (−1) · veryCaution (≤−2) |
| good_domains / bad_domains | peers (เพื่อน/หุ้นส่วน) · output (ผลงาน/ไอเดีย) · wealth (เงิน) · authority (งาน/อำนาจ) · resource (ความรู้/ผู้ใหญ่) |
| hours[].kind | best · good · partial · starOnly · avoid |
| ming_gua.directions[].star | ShengQi · TianYi · YanNian · FuWei (ดี) · HuoHai · WuGui · LiuSha · JueMing (ร้าย) |
| compatibility contexts | love · longterm · business · social · mindset |
| career yearly_timeline.rating | Prosperous · Stable · Warning |
| derived_from (ดาว) | Y ปี · M เดือน · D วัน · H ยาม · F เสาจร |
รหัสเมือง (birth.location_id)
| location_id | เมือง | ประเทศ | ลองจิจูด | UTC+ |
|---|---|---|---|---|
| th_krabi | กระบี่ (Krabi) | TH | 98.9063 | 7 |
| th_bangkok | กรุงเทพมหานคร (Bangkok) | TH | 100.5018 | 7 |
| cn_guangzhou | กว่างโจว (Guangzhou) | CN | 113.2644 | 8 |
| th_kanchanaburi | กาญจนบุรี (Kanchanaburi) | TH | 99.5328 | 7 |
| th_kalasin | กาฬสินธุ์ (Kalasin) | TH | 103.5061 | 7 |
| th_kamphaengphet | กำแพงเพชร (Kamphaeng Phet) | TH | 99.5227 | 7 |
| th_khonkaen | ขอนแก่น (Khon Kaen) | TH | 102.8236 | 7 |
| cn_kunming | คุนหมิง (Kunming) | CN | 102.7123 | 8 |
| th_chanthaburi | จันทบุรี (Chanthaburi) | TH | 102.1039 | 7 |
| cn_zhengzhou | เจิ้งโจว (Zhengzhou) | CN | 113.6254 | 8 |
| cn_chongqing | ฉงชิ่ง (Chongqing) | CN | 106.5516 | 8 |
| th_chachoengsao | ฉะเชิงเทรา (Chachoengsao) | TH | 101.0712 | 7 |
| cn_changsha | ฉางซา (Changsha) | CN | 112.9388 | 8 |
| cn_chengdu | เฉิงตู (Chengdu) | CN | 104.0665 | 8 |
| th_chonburi | ชลบุรี (Chonburi) | TH | 100.9847 | 7 |
| th_chainat | ชัยนาท (Chai Nat) | TH | 100.1251 | 7 |
| th_chaiyaphum | ชัยภูมิ (Chaiyaphum) | TH | 102.0315 | 7 |
| cn_qingdao | ชิงเต่า (Qingdao) | CN | 120.3826 | 8 |
| th_chumphon | ชุมพร (Chumphon) | TH | 99.1805 | 7 |
| th_chiangrai | เชียงราย (Chiang Rai) | TH | 99.8325 | 7 |
| th_chiangmai | เชียงใหม่ (Chiang Mai) | TH | 98.9817 | 7 |
| cn_xian | ซีอาน (Xi'an) | CN | 108.9398 | 8 |
| cn_shenzhen | เซินเจิ้น (Shenzhen) | CN | 114.0579 | 8 |
| cn_shanghai | เซี่ยงไฮ้ (Shanghai) | CN | 121.4737 | 8 |
| cn_xiamen | เซี่ยเหมิน (Xiamen) | CN | 118.0894 | 8 |
| th_trang | ตรัง (Trang) | TH | 99.6133 | 7 |
| th_trat | ตราด (Trat) | TH | 102.5175 | 7 |
| th_tak | ตาก (Tak) | TH | 99.1258 | 7 |
| cn_dalian | ต้าเหลียน (Dalian) | CN | 121.6147 | 8 |
| cn_tianjin | เทียนจิน (Tianjin) | CN | 117.201 | 8 |
| th_nakhonnayok | นครนายก (Nakhon Nayok) | TH | 101.2131 | 7 |
| th_nakhonpathom | นครปฐม (Nakhon Pathom) | TH | 100.0373 | 7 |
| th_nakhonphanom | นครพนม (Nakhon Phanom) | TH | 104.7806 | 7 |
| th_nakhonratchasima | นครราชสีมา (Nakhon Ratchasima) | TH | 102.0853 | 7 |
| th_nakhonsithammarat | นครศรีธรรมราช (Nakhon Si Thammarat) | TH | 99.9676 | 7 |
| th_nakhonsawan | นครสวรรค์ (Nakhon Sawan) | TH | 100.1242 | 7 |
| th_nonthaburi | นนทบุรี (Nonthaburi) | TH | 100.5217 | 7 |
| th_narathiwat | นราธิวาส (Narathiwat) | TH | 101.8253 | 7 |
| cn_nanjing | นานกิง (Nanjing) | CN | 118.7969 | 8 |
| th_nan | น่าน (Nan) | TH | 100.7717 | 7 |
| th_buengkan | บึงกาฬ (Bueng Kan) | TH | 103.6464 | 7 |
| th_buriram | บุรีรัมย์ (Buriram) | TH | 103.1116 | 7 |
| th_pathumthani | ปทุมธานี (Pathum Thani) | TH | 100.5232 | 7 |
| th_prachuapkhirikhan | ประจวบคีรีขันธ์ (Prachuap Khiri Khan) | TH | 99.7963 | 7 |
| th_prachinburi | ปราจีนบุรี (Prachinburi) | TH | 101.3736 | 7 |
| cn_beijing | ปักกิ่ง (Beijing) | CN | 116.4074 | 8 |
| th_pattani | ปัตตานี (Pattani) | TH | 101.2501 | 7 |
| th_phranakhonsiayutthaya | พระนครศรีอยุธยา (Phra Nakhon Si Ayutthaya) | TH | 100.564 | 7 |
| th_phayao | พะเยา (Phayao) | TH | 99.9048 | 7 |
| th_phangnga | พังงา (Phang Nga) | TH | 98.5273 | 7 |
| th_phatthalung | พัทลุง (Phatthalung) | TH | 100.0818 | 7 |
| th_phichit | พิจิตร (Phichit) | TH | 100.3488 | 7 |
| th_phitsanulok | พิษณุโลก (Phitsanulok) | TH | 100.258 | 7 |
| th_phetchaburi | เพชรบุรี (Phetchaburi) | TH | 99.9462 | 7 |
| th_phetchabun | เพชรบูรณ์ (Phetchabun) | TH | 101.1578 | 7 |
| th_phrae | แพร่ (Phrae) | TH | 100.1403 | 7 |
| th_phuket | ภูเก็ต (Phuket) | TH | 98.3923 | 7 |
| th_mahasarakham | มหาสารคาม (Maha Sarakham) | TH | 103.3007 | 7 |
| th_mukdahan | มุกดาหาร (Mukdahan) | TH | 104.7294 | 7 |
| th_maehongson | แม่ฮ่องสอน (Mae Hong Son) | TH | 97.9654 | 7 |
| th_yasothon | ยโสธร (Yasothon) | TH | 104.1453 | 7 |
| th_yala | ยะลา (Yala) | TH | 101.2816 | 7 |
| th_roiet | ร้อยเอ็ด (Roi Et) | TH | 103.652 | 7 |
| th_ranong | ระนอง (Ranong) | TH | 98.6348 | 7 |
| th_rayong | ระยอง (Rayong) | TH | 101.2714 | 7 |
| th_ratchaburi | ราชบุรี (Ratchaburi) | TH | 99.8225 | 7 |
| th_lopburi | ลพบุรี (Lopburi) | TH | 100.6534 | 7 |
| th_lampang | ลำปาง (Lampang) | TH | 99.507 | 7 |
| th_lamphun | ลำพูน (Lamphun) | TH | 99.0087 | 7 |
| th_loei | เลย (Loei) | TH | 101.7223 | 7 |
| th_sisaket | ศรีสะเกษ (Sisaket) | TH | 104.322 | 7 |
| th_sakonnakhon | สกลนคร (Sakon Nakhon) | TH | 104.1486 | 7 |
| th_songkhla | สงขลา (Songkhla) | TH | 100.5951 | 7 |
| th_satun | สตูล (Satun) | TH | 100.0674 | 7 |
| th_samutprakan | สมุทรปราการ (Samut Prakan) | TH | 100.5973 | 7 |
| th_samutsongkhram | สมุทรสงคราม (Samut Songkhram) | TH | 99.9984 | 7 |
| th_samutsakhon | สมุทรสาคร (Samut Sakhon) | TH | 100.2744 | 7 |
| th_sakaeo | สระแก้ว (Sa Kaeo) | TH | 102.0646 | 7 |
| th_saraburi | สระบุรี (Saraburi) | TH | 100.9148 | 7 |
| sg_singapore | สิงคโปร์ (Singapore) | SG | 103.8198 | 8 |
| th_singburi | สิงห์บุรี (Sing Buri) | TH | 100.3953 | 7 |
| th_sukhothai | สุโขทัย (Sukhothai) | TH | 99.8251 | 7 |
| th_suphanburi | สุพรรณบุรี (Suphan Buri) | TH | 100.1177 | 7 |
| th_suratthani | สุราษฎร์ธานี (Surat Thani) | TH | 99.3328 | 7 |
| th_surin | สุรินทร์ (Surin) | TH | 103.4936 | 7 |
| th_nongkhai | หนองคาย (Nong Khai) | TH | 102.7413 | 7 |
| th_nongbualamphu | หนองบัวลำภู (Nong Bua Lamphu) | TH | 102.4407 | 7 |
| cn_nanning | หนานหนิง (Nanning) | CN | 108.3661 | 8 |
| cn_hangzhou | หางโจว (Hangzhou) | CN | 120.1551 | 8 |
| th_angthong | อ่างทอง (Ang Thong) | TH | 100.4534 | 7 |
| th_amnatcharoen | อำนาจเจริญ (Amnat Charoen) | TH | 104.6258 | 7 |
| th_udonthani | อุดรธานี (Udon Thani) | TH | 102.7996 | 7 |
| th_uttaradit | อุตรดิตถ์ (Uttaradit) | TH | 100.0993 | 7 |
| th_uthaithani | อุทัยธานี (Uthai Thani) | TH | 100.0244 | 7 |
| th_ubonratchathani | อุบลราชธานี (Ubon Ratchathani) | TH | 104.8615 | 7 |
| cn_urumqi | อุรุมชี (Urumqi) | CN | 87.6168 | 8 |
| cn_wuhan | อู่ฮั่น (Wuhan) | CN | 114.3055 | 8 |
| cn_harbin | ฮาร์บิน (Harbin) | CN | 126.535 | 8 |
14.ข้อควรรู้ · v1 เดิม
- ไม่ทราบเวลาเกิด: ทุก endpoint ตัดเสายาม (pillars.hour = null) และมี warnings บอก · Life Scanner จำลองยามได้ด้วย simulated_hour
- ช่องที่ลงท้าย _th (เช่น description_th) มีเฉพาะภาษาไทยในระบบ · ช่องชื่อ (name) เป็นภาษาตาม lang
- รายงานอาชีพ/การเงิน: บางช่องชื่อลงท้าย Th (เช่น answerTh) เป็นชื่อช่องเดิมของไลบรารี — เนื้อหาเป็นภาษาตาม lang แล้ว
- วัยจร: start_year/is_current ใช้ธรรมเนียมเดียวกับหน้าเว็บ ส่วน start_date คือวันเริ่มตามสูตร (อาจเป็นต้นปีถัดไป)
- ผลตรงกับหน้าเว็บ: ใช้เอนจินเดียวกัน · ดวงที่ตั้งค่า Advanced ไว้ ให้เรียกด้วย profile_id เพื่อให้ได้ค่าที่ตั้งไว้
- ข้อมูลส่วนตัว: ข้อมูลเกิดใน birth ไม่ถูกบันทึก · log เก็บแค่ endpoint/ราคา/สถานะ/เวลา · คุณมีหน้าที่ดูแลข้อมูลลูกค้าของคุณตามกฎหมาย (PDPA)
- API v1 เดิม (
/api/v1/partner/analyze·/balance) ยังใช้งานได้ด้วยคีย์เดียวกัน (ราคา 1 โทเคน ป้ายภาษาอังกฤษ ไม่รวมการตั้งค่า Advanced) — งานใหม่แนะนำ v2
คู่มือนี้ตรงกับระบบ ณ ปัจจุบัน · ราคาที่แสดงในคู่มือเป็นค่าตั้งต้น ราคาจริงของคุณดูจาก GET /api/v2/pricing