FengshuiXPartner API
ภาพรวมโปรแกรมตัวอย่างการใช้งานเดโมธุรกิจคู่มือ APIโค้ดตัวอย่าง
เข้าสู่ระบบเปิดบัญชีพาร์ตเนอร์
ภาพรวมโปรแกรมตัวอย่างการใช้งานเดโมธุรกิจคู่มือ APIโค้ดตัวอย่าง
สารบัญ14 หัวข้อ
  1. 01ภาพรวม
  2. 02เริ่มใช้งานใน 5 นาที
  3. 03คีย์ · สิทธิ์ · ความปลอดภัยพื้นฐาน
  4. 04รูปแบบคำขอ/คำตอบ
  5. 05ระบุดวง (profile_id / birth)
  6. 06เวลา (วันจร/ยามจร)
  7. 07รายการ endpoint ทั้งหมด
  8. 08การคิดโทเคน · เพดาน · กันจ่ายซ้ำ
  9. 09Rate limit
  10. 10รหัสข้อผิดพลาด
  11. 11ชั้นความปลอดภัยที่สอง (ลายเซ็น + เข้ารหัส)
  12. 12ตัวอย่างโค้ด (curl · JavaScript · Python · PHP)
  13. 13ตารางรหัสอ้างอิง
  14. 14ข้อควรรู้ · v1 เดิม

API สำหรับนักพัฒนา › คู่มือฉบับเต็ม

คู่มือ Bazi API v2

v2

ทุก endpoint · พารามิเตอร์ · ความหมายของทุกช่องคำตอบ · ราคา · ความปลอดภัย · ตัวอย่างโค้ด — ชื่อช่องและรหัสเป็นภาษาอังกฤษ ข้อความในคำตอบเลือกได้ 10 ภาษา

สารบัญ

1. ภาพรวม2. เริ่มใช้งานใน 5 นาที3. คีย์ · สิทธิ์ · ความปลอดภัยพื้นฐาน4. รูปแบบคำขอ/คำตอบ5. ระบุดวง (profile_id / birth)6. เวลา (วันจร/ยามจร)7. รายการ endpoint ทั้งหมด8. การคิดโทเคน · เพดาน · กันจ่ายซ้ำ9. Rate limit10. รหัสข้อผิดพลาด11. ชั้นความปลอดภัยที่สอง (ลายเซ็น + เข้ารหัส)12. ตัวอย่างโค้ด (curl · JavaScript · Python · PHP)13. ตารางรหัสอ้างอิง14. ข้อควรรู้ · v1 เดิม

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 นาที

  1. ไปที่ /partner/keys → สร้างคีย์ → คัดลอกเก็บทันที (ระบบแสดงตัวเต็มครั้งเดียว)
  2. เก็บคีย์ในตัวแปรแวดล้อมของเซิร์ฟเวอร์ เช่น BAZI_API_KEY — ห้ามใส่ในโค้ดหน้าเว็บ/แอปฝั่งผู้ใช้
  3. ทดสอบฟรี: GET /api/v2/me · GET /api/v2/profiles
  4. เรียกจริง: ดูจังหวะวันนี้ด้วย 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" }
ระบบไม่ส่งชื่อหรือวันเกิดกลับมาในคำตอบ (subject บอกแค่ที่มาของดวง) เพื่อลดการรั่วของข้อมูลส่วนตัว

05.ระบุดวง (profile_id / birth)

ส่งอย่างใดอย่างหนึ่ง:

  • profile_id (แนะนำ) — ดวงที่บันทึกในบัญชีเจ้าของคีย์ วันเกิดไม่ต้องวิ่งผ่านเครือข่ายเลย และได้การตั้งค่าวิเคราะห์ที่เซฟไว้ครบ (ธาตุให้คุณ/โทษที่ตั้งเอง · ไตรทิศ · สูตรนับราศีแฝง) ผลจึงตรงกับหน้าเว็บ · ดวงของบัญชีอื่นเรียกไม่ได้ (ตอบ 404)
  • birth — ข้อมูลเกิดดิบ สำหรับลูกค้าของคุณเอง · ระบบไม่บันทึกและไม่เขียนลง log · ไม่ต้องส่งชื่อ
ชื่อชนิดคำอธิบาย
date *"YYYY-MM-DD"วันเกิดตามปฏิทินสากล (1900–2100)
time"HH:mm"เวลาเกิด 24 ชม. · ไม่ทราบ = ไม่ต้องส่ง → ระบบตัดเสายามออกจากทุกการคำนวณ และใส่ warnings
gender *"male" | "female"ใช้คำนวณทิศทางวัยจรและกว้าประจำตัว
tz_offsetnumberเขตเวลาของสถานที่เกิด เป็นชั่วโมง (−12 ถึง 14) · ตั้งต้น 7 (ไทย)
location_idstringรหัสเมือง (ตารางท้ายคู่มือ) — ใช้เขตเวลา+ลองจิจูดของเมืองนั้น
true_solar_timebooleanปรับเวลาสุริยะจริงตามลองจิจูด · ต้องส่ง longitude หรือ location_id คู่กัน
longitudenumberลองจิจูดสถานที่เกิด (−180 ถึง 180)
solar_term_adjustment"auto" | "before" | "after"เกิดคาบเส้นสารท: บังคับให้นับเป็นก่อน/หลังสารท · ตั้งต้น auto
twin_ordernumberลำดับแฝด 1–9 (แฝดลำดับคู่ วัยจรเดินกลับทิศ ตามสูตรหน้าเว็บ)
identical_twinbooleanแฝดแท้ (ใช้คู่ twin_order)
settingsobjectค่า 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.เวลา (วันจร/ยามจร)

ชื่อชนิดคำอธิบาย
atISO-8601เวลาที่ถาม พร้อมเขตเวลา เช่น "2026-10-01T14:30:00+07:00"
date"YYYY-MM-DD"ถามทั้งวัน (ใช้แทน at) · ส่งคู่ time ได้
time"HH:mm"ใช้คู่กับ date
tzstringชื่อเขตเวลา 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 ทั้งหมด

GET/api/v2/meGET/api/v2/pricingGET/api/v2/usagePOST/api/v2/partner/auspicious-30dGET/api/v2/courses

ข้อมูลบัญชี + คีย์นี้

scope: —
GET/api/v2/me
ราคาต่อครั้ง:ฟรี

ยอดโทเคนคงเหลือ · ระดับสมาชิก · ขอบเขต/เพดานรายวันของคีย์ที่ใช้เรียก · ใช้ไปแล้ววันนี้

พารามิเตอร์ * = ต้องส่ง

ไม่มีพารามิเตอร์

ช่องสำคัญในคำตอบ (ใต้ data)

ช่องความหมาย
balanceโทเคนคงเหลือของบัญชี (ยอดเดียวกับหน้าเว็บ)
roleระดับสมาชิกที่ใช้คิดราคา (แพ็กหมดอายุ = Freemium)
key.scopesกลุ่มที่คีย์นี้เรียกได้: chart · transit · reports · search
key.daily_cap / spent_todayเพดานโทเคนต่อวันของคีย์ (0 = ไม่จำกัด) และที่ใช้ไปวันนี้ (นับตามเวลาไทย)
key.testtrue = คีย์เทส (ไม่คิดเงิน · รับเฉพาะดวงตัวอย่างของบัญชี — ดูหัวข้อค่าใช้จ่าย)

ตัวอย่างคำตอบ (ย่อจากผลจริง)

{ "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: —
GET/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: —
GET/api/v2/usage
ราคาต่อครั้ง:ฟรี

ประวัติการเรียกทุกคีย์ของบัญชีย้อนหลัง 90 วัน — ไม่มีข้อมูลดวง

พารามิเตอร์ * = ต้องส่ง

ชื่อชนิดคำอธิบาย
pagenumber (query)หน้า เริ่ม 1
per_pagenumber (query)1–200 · ตั้งต้น 50
end_userstring (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_keytrue = เรียกด้วยคีย์ที่ใช้ขอประวัตินี้
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
POST/api/v2/partner/auspicious-30d
ราคาต่อครั้ง:กำลังโหลดราคา… (ดูตารางราคาที่หน้าคีย์)

เฉพาะพาร์ตเนอร์ที่อนุมัติแล้ว (สมัครที่ /partner/apply) · ส่งวันเกิด/เวลาเกิด ไม่ต้องมีดวงในระบบ → ยามดีทุกวันใน 30 วันนับจากวันเริ่ม พร้อมเกรด คะแนน เหตุผล กิจกรรมที่เหมาะ และคำแนะนำยิงแอด/คอนเทนต์ · คะแนนฐานใช้สูตรเดียวกับหน้าค้นหาฤกษ์

พารามิเตอร์ * = ต้องส่ง

ชื่อชนิดคำอธิบาย
profile_idstringดวงที่บันทึกในบัญชีเจ้าของคีย์ (ดูจาก GET /api/v2/profiles) — ส่งอย่างใดอย่างหนึ่งกับ birth
birthobjectข้อมูลเกิดดิบ (ดูหัวข้อ "ระบุดวง") — ส่งอย่างใดอย่างหนึ่งกับ profile_id
langstringภาษาของป้ายชื่อ/คำอธิบาย: th (ตั้งต้น) · en · zh-TW · zh-CN · ko · ja · ru · vi · id · es
start_date"YYYY-MM-DD"วันเริ่ม · ไม่ส่ง = วันนี้ (ตามเขตเวลา tz_offset) · นับ 30 วันอัตโนมัติ
tz_offsetnumberเขตเวลาของเวลาในผลลัพธ์ (ชั่วโมง) · ตั้งต้น 7
mode"every_day" | "auspicious_days"every_day (ตั้งต้น) = ทุกวันได้ยามดีของวันนั้น (ตัดยามที่ชงเสาปี/วันของเจ้าชะตา · วันเจี้ยนร้ายลดเกรด) · auspicious_days = เฉพาะวันฤกษ์ตามหน้าค้นฤกษ์หมวดทั่วไป
min_grade"A+" | "A" | "B" | "C"เกรดต่ำสุดที่ส่งกลับ · ตั้งต้น B
sort"datetime" | "score" | "purpose"เรียงตามวันเวลา (ตั้งต้น) · ดีสุดก่อน · จุดประสงค์ (แล้วดีสุดก่อน) — ทุกยามมี sort_keys ให้จัดเรียงเองได้
purposesstring[]กรองเฉพาะยามที่เหมาะกับจุดประสงค์: launch · direct_sale · promotion · limited_offer · education · brand_trust · announcement · testimonial · community · collaboration · viral · retargeting · lead_generation · live_commerce · niche
per_daynumberจำนวนยามดีสุดต่อวัน 1–12 (ไม่ส่ง = ทุกยามที่ผ่านเกรด)
limitnumberจำนวนยามที่ส่งกลับ 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)

ช่องความหมาย
windowstart_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[].marketingprimary · purposes[] (id · label · ad = รูปแบบแอด) · content_style · cta (soft/medium/strong) · confidence · budget · why · caution
slots[].sort_keysdatetime · 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: —
GET/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 ต่อคีย์
เกินเพดาน = 429 พร้อมหัว Retry-After (วินาที) · ควรรอแล้วลองใหม่แบบเว้นระยะเพิ่มขึ้น (exponential backoff) และใช้ Idempotency-Key เดิม

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
422Idempotency-Key นี้เคยใช้กับคำขออื่น (endpoint/body/การเข้ารหัสไม่ตรงกัน) — ใช้ Key ใหม่สำหรับงานใหม่
413body ใหญ่เกิน 20 KB
429เกิน rate limit (ดู Retry-After) · ถึงเพดานโทเคนรายวันของคีย์ (daily_cap · spent_today) · มีงานหนักทำอยู่
500คำนวณไม่สำเร็จ — ไม่ถูกหักโทเคน · แจ้งทีมงานพร้อม request_id
503ระบบ API ยังไม่เปิด (แอดมินทดสอบได้) หรือขัดข้องชั่วคราว

11.ชั้นความปลอดภัยที่สอง (ลายเซ็น + เข้ารหัส)

เลือกเปิดรายคีย์ที่หน้าคีย์: กด "สร้าง secret" (ได้ bzs_… แสดงครั้งเดียว) แล้วติ๊ก "บังคับทุกคำขอต้องลงลายเซ็น" ถ้าต้องการให้คำขอที่ไม่มีลายเซ็นถูกปฏิเสธ

11.1 ลายเซ็นคำขอ (HMAC-SHA256)

หัวค่า
X-Bazi-Timestampเวลา unix (วินาที) · ต่างจากเวลาเซิร์ฟเวอร์ไม่เกิน 300 วินาที
X-Bazi-Nonceสตริงสุ่ม 16–64 ตัว [A-Za-z0-9_-] · ใช้ซ้ำไม่ได้ (กันยิงซ้ำ)
X-Bazi-Signaturehex( 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 out

12.ตัวอย่างโค้ด (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甲JiaWoodYangไม้หยาง
2乙YiWoodYinไม้หยิน
3丙BingFireYangไฟหยาง
4丁DingFireYinไฟหยิน
5戊WuEarthYangดินหยาง
6己JiEarthYinดินหยิน
7庚GengMetalYangทองหยาง
8辛XinMetalYinทองหยิน
9壬RenWaterYangน้ำหยาง
10癸GuiWaterYinน้ำหยิน

นักษัตรล่าง (branch.id)

idอักษรPinyinนักษัตรธาตุชื่อไทย
1子ZiRatWaterชวด
2丑ChouOxEarthฉลู
3寅YinTigerWoodขาล
4卯MaoRabbitWoodเถาะ
5辰ChenDragonEarthมะโรง
6巳SiSnakeFireมะเส็ง
7午WuHorseFireมะเมีย
8未WeiGoatEarthมะแม
9申ShenMonkeyMetalวอก
10酉YouRoosterMetalระกา
11戌XuDogEarthจอ
12亥HaiPigWaterกุน

10 เทพ (ten_god.code)

codeEnglishอักษรPinyinไทย
FRFriend比肩Bi Jianเพื่อน (ปีเกียง)
RWRob Wealth劫財Jie Caiแย่งชิงทรัพย์ (เกียบไช้)
EGEating God食神Shi Shenเทพแห่งอาหาร (เจี๊ยะซิ้ง)
HOHurting Officer傷官Shang Guanทำลายขุนนาง (เซียกัว)
IWIndirect Wealth偏財Pian Caiลาภลอย (เพียงไช้)
DWDirect Wealth正財Zheng Caiลาภผลหลัก (เจียไช้)
7K7 Killings七殺Qi Shaเจ็ดอสูรพิฆาต (ชิกสัวะ)
DODirect Officer正官Zheng Guanขุนนาง (เจียกัว)
IRIndirect Resource偏印Pian Yinพลังเสริมรอง (เพียงอิ่ง)
DRDirect Resource正印Zheng Yinพลังเสริมหลัก (เจียอิ่ง)
DMDay 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建Establishgoodหมั้นหมาย รับตำแหน่ง เจรจา ขอพรเดินทางไกล งานศพ
Chu除Removebadทำความสะอาด รื้อถอน ผ่าตัด สะเดาะเคราะห์งานมงคล แต่งงาน
Man滿Fullgoodเปิดกิจการ สัญญาใหญ่ แต่งงาน ทวงหนี้ฝังศพ รื้อถอน
Ping平Balanceneutralประนีประนอม งานประจำ แก้เรื่องค้างงานที่หวังผลเร็ว
Ding定Stablegoodเซ็นสัญญา แต่งงาน สร้างบ้าน งานระยะยาวงานศพ เที่ยว
Zhi執Initiategoodขอพร ไหว้พระ ตั้งเป้าหมาย วางแผนเดินทางไกล ย้ายบ้าน
Po破Destructionbadรื้อถอน ผ่าตัด พบแพทย์งานมงคล เริ่มธุรกิจ เซ็นสัญญา
Wei危Dangerbadบูชาสิ่งศักดิ์สิทธิ์ ขอพร ค้าขายขึ้นที่สูง เดินเรือ งานเสี่ยง
Cheng成Successgoodงานมงคล เปิดร้าน ออกสินค้าใหม่ เซ็นสัญญาฟ้องร้องคดี
Shou收Receivegoodเริ่มงานใหม่ ค้าขาย ซื้อบ้าน เก็บเงินหาหมอ งานศพ
Kai開Opengoodเปิดร้าน ก่อสร้าง ขึ้นบ้านใหม่ รับตำแหน่งงานศพ ฝังศพ
Bi閉Closebadงานลับ ถมบ่อ ซ่อมกำแพง เก็บเงินเข้าเซฟเปิดร้าน ค้าขาย

ชนิดดิถี (interactions[].type)

typeความหมาย
Clashชง (นักษัตรล่างปะทะ)
Harmไห่ (ให้โทษ)
Destructionผั่ว (ทำลาย)
Punishmentเฮ้ง (ลงโทษ)
SixComboภาคีล่าง 6 ฮะ
HalfComboภาคีครึ่ง
ThreeHarmonyซาฮะ (สามประสาน)
Directionalไตรทิศ
StemComboภาคีราศีบน
StemClashInชงเข้า (ถูกข่ม)
StemClashOutชงออก (ไปข่ม)
StemDuplicateราศีบนซ้ำ
EarthDuplicateนักษัตรล่างซ้ำ (ทับนักษัตร)

ค่าที่เป็นรหัสอื่น ๆ

ช่องค่าที่เป็นไปได้
day_master.strengthextreme_weak · weak · weak_sick · strong · extreme_strong · two_elements
effect (stem/branch)good · bad · neutral (ผลต่อเจ้าชะตา)
elementWood · Fire · Earth · Metal · Water
structuresCompanion · Output · Wealth · Power · Resource (รายงานอาชีพใช้ Influence แทน Power)
day_verdict.levelveryGood (≥2) · good (1) · neutral (0) · caution (−1) · veryCaution (≤−2)
good_domains / bad_domainspeers (เพื่อน/หุ้นส่วน) · output (ผลงาน/ไอเดีย) · wealth (เงิน) · authority (งาน/อำนาจ) · resource (ความรู้/ผู้ใหญ่)
hours[].kindbest · good · partial · starOnly · avoid
ming_gua.directions[].starShengQi · TianYi · YanNian · FuWei (ดี) · HuoHai · WuGui · LiuSha · JueMing (ร้าย)
compatibility contextslove · longterm · business · social · mindset
career yearly_timeline.ratingProsperous · Stable · Warning
derived_from (ดาว)Y ปี · M เดือน · D วัน · H ยาม · F เสาจร

รหัสเมือง (birth.location_id)

location_idเมืองประเทศลองจิจูดUTC+
th_krabiกระบี่ (Krabi)TH98.90637
th_bangkokกรุงเทพมหานคร (Bangkok)TH100.50187
cn_guangzhouกว่างโจว (Guangzhou)CN113.26448
th_kanchanaburiกาญจนบุรี (Kanchanaburi)TH99.53287
th_kalasinกาฬสินธุ์ (Kalasin)TH103.50617
th_kamphaengphetกำแพงเพชร (Kamphaeng Phet)TH99.52277
th_khonkaenขอนแก่น (Khon Kaen)TH102.82367
cn_kunmingคุนหมิง (Kunming)CN102.71238
th_chanthaburiจันทบุรี (Chanthaburi)TH102.10397
cn_zhengzhouเจิ้งโจว (Zhengzhou)CN113.62548
cn_chongqingฉงชิ่ง (Chongqing)CN106.55168
th_chachoengsaoฉะเชิงเทรา (Chachoengsao)TH101.07127
cn_changshaฉางซา (Changsha)CN112.93888
cn_chengduเฉิงตู (Chengdu)CN104.06658
th_chonburiชลบุรี (Chonburi)TH100.98477
th_chainatชัยนาท (Chai Nat)TH100.12517
th_chaiyaphumชัยภูมิ (Chaiyaphum)TH102.03157
cn_qingdaoชิงเต่า (Qingdao)CN120.38268
th_chumphonชุมพร (Chumphon)TH99.18057
th_chiangraiเชียงราย (Chiang Rai)TH99.83257
th_chiangmaiเชียงใหม่ (Chiang Mai)TH98.98177
cn_xianซีอาน (Xi'an)CN108.93988
cn_shenzhenเซินเจิ้น (Shenzhen)CN114.05798
cn_shanghaiเซี่ยงไฮ้ (Shanghai)CN121.47378
cn_xiamenเซี่ยเหมิน (Xiamen)CN118.08948
th_trangตรัง (Trang)TH99.61337
th_tratตราด (Trat)TH102.51757
th_takตาก (Tak)TH99.12587
cn_dalianต้าเหลียน (Dalian)CN121.61478
cn_tianjinเทียนจิน (Tianjin)CN117.2018
th_nakhonnayokนครนายก (Nakhon Nayok)TH101.21317
th_nakhonpathomนครปฐม (Nakhon Pathom)TH100.03737
th_nakhonphanomนครพนม (Nakhon Phanom)TH104.78067
th_nakhonratchasimaนครราชสีมา (Nakhon Ratchasima)TH102.08537
th_nakhonsithammaratนครศรีธรรมราช (Nakhon Si Thammarat)TH99.96767
th_nakhonsawanนครสวรรค์ (Nakhon Sawan)TH100.12427
th_nonthaburiนนทบุรี (Nonthaburi)TH100.52177
th_narathiwatนราธิวาส (Narathiwat)TH101.82537
cn_nanjingนานกิง (Nanjing)CN118.79698
th_nanน่าน (Nan)TH100.77177
th_buengkanบึงกาฬ (Bueng Kan)TH103.64647
th_buriramบุรีรัมย์ (Buriram)TH103.11167
th_pathumthaniปทุมธานี (Pathum Thani)TH100.52327
th_prachuapkhirikhanประจวบคีรีขันธ์ (Prachuap Khiri Khan)TH99.79637
th_prachinburiปราจีนบุรี (Prachinburi)TH101.37367
cn_beijingปักกิ่ง (Beijing)CN116.40748
th_pattaniปัตตานี (Pattani)TH101.25017
th_phranakhonsiayutthayaพระนครศรีอยุธยา (Phra Nakhon Si Ayutthaya)TH100.5647
th_phayaoพะเยา (Phayao)TH99.90487
th_phangngaพังงา (Phang Nga)TH98.52737
th_phatthalungพัทลุง (Phatthalung)TH100.08187
th_phichitพิจิตร (Phichit)TH100.34887
th_phitsanulokพิษณุโลก (Phitsanulok)TH100.2587
th_phetchaburiเพชรบุรี (Phetchaburi)TH99.94627
th_phetchabunเพชรบูรณ์ (Phetchabun)TH101.15787
th_phraeแพร่ (Phrae)TH100.14037
th_phuketภูเก็ต (Phuket)TH98.39237
th_mahasarakhamมหาสารคาม (Maha Sarakham)TH103.30077
th_mukdahanมุกดาหาร (Mukdahan)TH104.72947
th_maehongsonแม่ฮ่องสอน (Mae Hong Son)TH97.96547
th_yasothonยโสธร (Yasothon)TH104.14537
th_yalaยะลา (Yala)TH101.28167
th_roietร้อยเอ็ด (Roi Et)TH103.6527
th_ranongระนอง (Ranong)TH98.63487
th_rayongระยอง (Rayong)TH101.27147
th_ratchaburiราชบุรี (Ratchaburi)TH99.82257
th_lopburiลพบุรี (Lopburi)TH100.65347
th_lampangลำปาง (Lampang)TH99.5077
th_lamphunลำพูน (Lamphun)TH99.00877
th_loeiเลย (Loei)TH101.72237
th_sisaketศรีสะเกษ (Sisaket)TH104.3227
th_sakonnakhonสกลนคร (Sakon Nakhon)TH104.14867
th_songkhlaสงขลา (Songkhla)TH100.59517
th_satunสตูล (Satun)TH100.06747
th_samutprakanสมุทรปราการ (Samut Prakan)TH100.59737
th_samutsongkhramสมุทรสงคราม (Samut Songkhram)TH99.99847
th_samutsakhonสมุทรสาคร (Samut Sakhon)TH100.27447
th_sakaeoสระแก้ว (Sa Kaeo)TH102.06467
th_saraburiสระบุรี (Saraburi)TH100.91487
sg_singaporeสิงคโปร์ (Singapore)SG103.81988
th_singburiสิงห์บุรี (Sing Buri)TH100.39537
th_sukhothaiสุโขทัย (Sukhothai)TH99.82517
th_suphanburiสุพรรณบุรี (Suphan Buri)TH100.11777
th_suratthaniสุราษฎร์ธานี (Surat Thani)TH99.33287
th_surinสุรินทร์ (Surin)TH103.49367
th_nongkhaiหนองคาย (Nong Khai)TH102.74137
th_nongbualamphuหนองบัวลำภู (Nong Bua Lamphu)TH102.44077
cn_nanningหนานหนิง (Nanning)CN108.36618
cn_hangzhouหางโจว (Hangzhou)CN120.15518
th_angthongอ่างทอง (Ang Thong)TH100.45347
th_amnatcharoenอำนาจเจริญ (Amnat Charoen)TH104.62587
th_udonthaniอุดรธานี (Udon Thani)TH102.79967
th_uttaraditอุตรดิตถ์ (Uttaradit)TH100.09937
th_uthaithaniอุทัยธานี (Uthai Thani)TH100.02447
th_ubonratchathaniอุบลราชธานี (Ubon Ratchathani)TH104.86157
cn_urumqiอุรุมชี (Urumqi)CN87.61688
cn_wuhanอู่ฮั่น (Wuhan)CN114.30558
cn_harbinฮาร์บิน (Harbin)CN126.5358

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

© Bazi FengshuiX · Partner API
ข้อกำหนดความเป็นส่วนตัวfs@fengshuix.com