Monster TravelAPIเข้าพอร์ทัลพาร์ทเนอร์

เอกสาร 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

พารามิเตอร์ตัวอย่างความหมาย
qโอซาก้าค้นหาจากชื่อทัวร์
countryJPรหัสประเทศ ISO 2 ตัว (ทัวร์ยุโรปหลายประเทศใช้ EU)
min_price10000ราคาเริ่มต้นอย่างน้อย (บาท)
max_price30000ราคาเริ่มต้นไม่เกิน (บาท)
depart_from2026-11-01มีรอบที่ยังว่างออกเดินทางตั้งแต่วันนี้
depart_to2026-12-31…ถึงวันนี้
page1หน้า (เริ่ม 1)
limit20จำนวนต่อหน้า (สูงสุด 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