เอกสาร API
Base URL: https://wholesale.monstertravel.co.th · รูปแบบ JSON · เวลาเป็น UTC (ISO 8601) · ราคาเป็นบาท
การยืนยันตัวตน
ส่ง API key (สร้างได้ที่หน้า API keys) ใน header ทุก request:
X-API-Key: pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # หรือ Authorization: Bearer pk_live_xxxxxxxxxxxxxxxx…
เก็บ key ไว้ฝั่ง server เท่านั้น ห้ามใส่ในโค้ด JavaScript ที่ส่งไป browser
ค้นหาทัวร์ — GET /v1/tours
| พารามิเตอร์ | ตัวอย่าง | ความหมาย |
|---|---|---|
q | โอซาก้า | ค้นหาจากชื่อทัวร์ |
country | JP | รหัสประเทศ ISO 2 ตัว (ทัวร์ยุโรปหลายประเทศใช้ EU) |
min_price | 10000 | ราคาเริ่มต้นอย่างน้อย (บาท) |
max_price | 30000 | ราคาเริ่มต้นไม่เกิน (บาท) |
depart_from | 2026-11-01 | มีรอบที่ยังว่างออกเดินทางตั้งแต่วันนี้ |
depart_to | 2026-12-31 | …ถึงวันนี้ |
page | 1 | หน้า (เริ่ม 1) |
limit | 20 | จำนวนต่อหน้า (สูงสุด 100) |
curl "https://wholesale.monstertravel.co.th/v1/tours?country=JP&depart_from=2026-11-01&limit=20" \
-H "X-API-Key: $API_KEY"
{
"items": [ { ...ทัวร์ (ดูรูปแบบด้านล่าง) } ],
"total": 76, "page": 1, "limit": 20
}เรียงตามราคาเริ่มต้นจากน้อยไปมาก · แสดงเฉพาะทัวร์ที่ยังเปิดขาย
ดูทัวร์ — GET /v1/tours/{id}
curl "https://wholesale.monstertravel.co.th/v1/tours/MT3MHK5H4XD8" -H "X-API-Key: $API_KEY"
ทัวร์ที่ปิดขายแล้วยังเรียกดูได้ แต่ active เป็น false
รูปแบบข้อมูลทัวร์
{
"id": "MT3MHK5H4XD8", // รหัสทัวร์ (คงที่ตลอด ใช้อ้างอิงได้)
"code": "MT3MHK5H4XD8",
"title": "ทัวร์จีน สิบสองปันนา 4 วัน 3 คืน",
"description": "ไฮไลต์…",
"countries": ["CN"], "cities": ["เชียงรุ่ง"],
"airline": "A6", "airline_name": "Air Travel",
"days": 4, "nights": 3, "hotel_star": 4,
"images": ["https://wholesale.monstertravel.co.th/v1/media/…jpg"], // รูปปก (ฝังในเว็บได้เลย ไม่ต้องใช้ key)
"program_url": "https://wholesale.monstertravel.co.th/v1/media/…pdf", // โปรแกรมทัวร์ PDF
"itinerary": [ { "day": 1, "detail": "สุวรรณภูมิ – เชียงรุ่ง" } ],
"price_from": 8990, // ราคาผู้ใหญ่ต่ำสุดหลังหักส่วนลด จากรอบที่ยังว่าง
"currency": "THB",
"active": true,
"updated_at": "2026-09-24T07:41:21Z",
"periods": [
{
"id": "PEVP0VBRQDG", // รหัสรอบเดินทาง
"start_date": "2026-10-17T00:00:00Z", "end_date": "2026-10-20T00:00:00Z",
"price_adult": 9990, "discount_adult": 1000, // ราคาขายจริง = 9990 - 1000
"price_child": 9990, "price_child_no_bed": 9990, "price_infant": 3000,
"price_single": 3500, "price_join_land": 6990,
"seats": 20, "available": 8,
"status": "available" // available | full | waitlist | closed | cancelled | on_request
}
]
}Webhook
ตั้ง URL ได้ที่หน้า Webhooks — เรา POST ไปทันทีเมื่อทัวร์เปลี่ยน แล้วคุณดึงข้อมูลล่าสุดด้วย GET /v1/tours/{tour_id}
POST https://your-site.com/hooks/monstertravel
Content-Type: application/json
X-Webhook-Id: 66f1c0… // ใช้กันประมวลผลซ้ำ
X-Webhook-Event: tour.updated
X-Webhook-Timestamp: 1790000000
X-Webhook-Signature: sha256=<hex>
{ "delivery_id": "66f1c0…", "type": "tour.updated", "tour_id": "MT3MHK5H4XD8",
"source": "sync", "occurred_at": "2026-09-24T07:41:21Z" }| event | เมื่อไร |
|---|---|
tour.created | มีทัวร์ใหม่ |
tour.updated | ข้อมูลเปลี่ยน — ราคา ส่วนลด ที่นั่งว่าง รอบเดินทาง สถานะ รายละเอียด |
tour.deactivated | ปิดขาย / wholesale เลิกขาย |
ping | ทดสอบจากพอร์ทัล (ไม่มี tour_id) |
ตอบ HTTP 2xx ภายใน 10 วินาที = สำเร็จ · ไม่สำเร็จเราลองใหม่ที่ 1 นาที, 5 นาที, 30 นาที, 2 ชม., 6 ชม. แล้วหยุด · ลำดับการมาถึงไม่รับประกัน ให้ดึงข้อมูลล่าสุดจาก API เสมอ · ใช้
delivery_id กันประมวลผลซ้ำตรวจลายเซ็น webhook
signature = hex(HMAC-SHA256(secret, timestamp + "." + body)) — ใช้ body ดิบ (ก่อน parse JSON) และปฏิเสธ timestamp ที่เก่ากว่า 5 นาที
Node.js
import crypto from "node:crypto";
function verify(req, rawBody, secret) {
const ts = req.headers["x-webhook-timestamp"];
const sig = req.headers["x-webhook-signature"] ?? "";
if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
const expected = "sha256=" + crypto
.createHmac("sha256", secret)
.update(ts + "." + rawBody)
.digest("hex");
return crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected));
}PHP
$raw = file_get_contents('php://input');
$ts = $_SERVER['HTTP_X_WEBHOOK_TIMESTAMP'] ?? '';
$sig = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';
$expected = 'sha256=' . hash_hmac('sha256', $ts . '.' . $raw, $secret);
if (abs(time() - (int)$ts) > 300 || !hash_equals($expected, $sig)) {
http_response_code(401); exit;
}
$event = json_decode($raw, true);
http_response_code(200);Error
| HTTP | ความหมาย |
|---|---|
| 400 | พารามิเตอร์ผิดรูปแบบ (เช่น วันที่ไม่ใช่ YYYY-MM-DD) |
| 401 | ไม่มี API key / key ถูกยกเลิก / บัญชีถูกปิด |
| 404 | ไม่พบทัวร์ |
| 5xx | ระบบขัดข้องชั่วคราว — ลองใหม่ |
{ "error": "missing or invalid API key" }อยากใช้ทัวร์ของเรา?
ติดต่อทีม Monster Travel เพื่อเปิดบัญชีพาร์ทเนอร์ แล้วสร้าง API key ได้เองในพอร์ทัล
โทร 02 170 8714