SIM Swap
SIM Swap (การเปลี่ยนซิม) หมายถึงกระบวนการผูกหมายเลขโทรศัพท์ของผู้ใช้กับซิมการ์ดใหม่ ซึ่งมักเกิดขึ้นในสถานการณ์ต่อไปนี้: การแจ้งหายและขอซิมใหม่, การอัปเกรดซิมการ์ด, การย้ายค่ายเบอร์เดิม, การเปิดบริการซิมเสริม หรือผู้ใช้ใหม่ได้รับหมายเลขที่เคยมีผู้ใช้งานมาก่อน เป็นต้น
ผู้โจมตีอาจใช้ SIM Swap เพื่อปล้นหมายเลขโทรศัพท์ของผู้อื่น ดักจับรหัสยืนยันทาง SMS จากนั้นจึงรีเซ็ตรหัสผ่านและยึดครองบัญชี SIM Swap API สามารถตรวจจับได้แบบเรียลไทม์ว่าหมายเลขโทรศัพท์ที่ระบุมีการเปลี่ยนซิมการ์ดหรือไม่ ช่วยให้ธุรกิจสามารถระบุความเสี่ยงที่อาจเกิดจากการปล้นซิมในขั้นตอนสำคัญ เช่น การยืนยัน SMS OTP และลดโอกาสที่บัญชีจะถูกยึดครอง
หมายเหตุ: ปัจจุบันรองรับการตรวจสอบ SIM Swap สำหรับหมายเลขในประเทศ/ภูมิภาคต่อไปนี้เท่านั้น: บราซิล, อินโดนีเซีย
API นี้มีสองอินเทอร์เฟซอิสระ:
- Retrieve Date: ตรวจสอบเวลาที่เกิด SIM Swap ครั้งล่าสุดของหมายเลขโทรศัพท์ที่ระบุ
- Check: ตรวจจับว่าหมายเลขโทรศัพท์ที่ระบุมีการเกิด SIM Swap ในช่วง N ชั่วโมงที่ผ่านมาหรือไม่
การยืนยันการเรียกใช้
ทั้งสองอินเทอร์เฟซนี้ใช้วิธีการยืนยันตัวตนแบบ HTTP Basic Auth โดยเพิ่ม Authorization ใน HTTP Header:
Authorization: Basic ${base64_auth_string}
อัลกอริทึมการสร้าง ${base64_auth_string} คือ: base64(dev_key:dev_secret)
สำหรับรายละเอียดเพิ่มเติม โปรดดู การยืนยันการเรียกใช้ เพื่อเรียนรู้วิธีการทำ API Authentication
Retrieve Date
ตรวจสอบเวลาที่เกิด SIM Swap ครั้งล่าสุดของหมายเลขโทรศัพท์ที่ระบุ
URL การเรียกใช้
POST https://otp.api.engagelab.cc/v1/sim-swap/retrieve-date
ตัวอย่างคำขอ
ออบเจ็กต์คำขอแสดงในรูปแบบ JSON ดังนั้น Header คำขอต้องมี Content-Type: application/json
Header คำขอ
POST /v1/sim-swap/retrieve-date HTTP/1.1
Content-Type: application/json
Authorization: Basic ${base64_auth_string}
Body คำขอ
{
"phone_number": "+381692223535"
}
พารามิเตอร์คำขอ
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
phone_number |
String | จำเป็น | หมายเลขโทรศัพท์เป้าหมายที่ต้องการตรวจสอบ แนะนำให้ใช้รูปแบบ E.164 |
พารามิเตอร์ส่งคืน
ส่งคืนสำเร็จ
| ฟิลด์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
request_id |
String | จำเป็น | ID บันทึกการตรวจสอบครั้งนี้ |
latest_sim_change |
String / null | จำเป็น | เวลาที่เกิด SIM Swap ครั้งล่าสุด ในรูปแบบ RFC3339; หากไม่เคยเปลี่ยนซิมจะคืนค่าเวลาเปิดใช้งานครั้งแรก; หากไม่สามารถคืนค่าข้อมูลได้เนื่องจากข้อจำกัดทางกฎหมายความเป็นส่วนตัวจะเป็น null |
ตัวอย่างการส่งคืนสำเร็จ:
{
"request_id": "2055136570436075520",
"latest_sim_change": "2026-05-01T15:00:00Z"
}
ส่งคืนล้มเหลว
HTTP Status Code เป็น 4xx หรือ 5xx และ Body การตอบกลับมีฟิลด์ดังนี้:
| ฟิลด์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
code |
int | จำเป็น | รหัสข้อผิดพลาด ดูรายละเอียดที่ รหัสข้อผิดพลาด |
message |
String | จำเป็น | รายละเอียดข้อผิดพลาด |
ตัวอย่างการส่งคืนล้มเหลวที่พบบ่อย:
ตัวอย่างพารามิเตอร์ผิดพลาด:
{
"code": 3002,
"message": "invalid phone_number"
}
ตัวอย่างยอดเงินไม่เพียงพอ:
{
"code": 3005,
"message": "balance not enough"
}
ตัวอย่างหมายเลขไม่อยู่ในพื้นที่ให้บริการ:
{
"code": 5101,
"message": "phone number is not in sim swap service coverage"
}
ตัวอย่างความล้มเหลวทั่วไป:
{
"code": 5100,
"message": "failed to retrieve sim swap date"
}
Check
ตรวจจับว่าหมายเลขโทรศัพท์ที่ระบุมีการเกิด SIM Swap ในช่วง N ชั่วโมงที่ผ่านมาหรือไม่
URL การเรียกใช้
POST https://otp.api.engagelab.cc/v1/sim-swap/check
ตัวอย่างคำขอ
ออบเจ็กต์คำขอแสดงในรูปแบบ JSON และ Header คำขอก็ต้องมี Content-Type: application/json เช่นกัน
Header คำขอ
POST /v1/sim-swap/check HTTP/1.1
Content-Type: application/json
Authorization: Basic ${base64_auth_string}
Body คำขอ
{
"phone_number": "+381692223535",
"max_age": 400
}
พารามิเตอร์คำขอ
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
phone_number |
String | จำเป็น | หมายเลขโทรศัพท์เป้าหมายที่ต้องการตรวจสอบ แนะนำให้ใช้รูปแบบ E.164 |
max_age |
Integer | จำเป็น | หน้าต่างการตรวจสอบ หน่วยเป็นชั่วโมง ช่วงค่า 1 ~ 2400 |
พารามิเตอร์ส่งคืน
ส่งคืนสำเร็จ
| ฟิลด์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
request_id |
String | จำเป็น | ID บันทึกการตรวจสอบครั้งนี้ |
swapped |
Boolean | จำเป็น | มีการเกิด SIM Swap ในช่วงเวลาที่กำหนดหรือไม่ |
ตัวอย่างการส่งคืนสำเร็จ:
{
"request_id": "2055136570293469184",
"swapped": true
}
ส่งคืนล้มเหลว
โครงสร้างเหมือนกับอินเทอร์เฟซ Retrieve Date ตัวอย่างการส่งคืนล้มเหลวเฉพาะ:
พารามิเตอร์ผิดพลาด (max_age อยู่นอกช่วง):
{
"code": 3002,
"message": "max_age must be between 1 and 2400"
}
รหัสข้อผิดพลาด
| รหัสข้อผิดพลาด | HTTP Code | คำอธิบาย |
|---|---|---|
1000 |
500 | ข้อผิดพลาดภายใน |
2001 |
401 | การยืนยันตัวตนล้มเหลว ไม่ได้แนบ token ที่ถูกต้อง |
2002 |
401 | การยืนยันตัวตนล้มเหลว token หมดอายุหรือถูกปิดใช้งาน |
2004 |
403 | ไม่มีสิทธิ์เรียกใช้ API นี้ |
3001 |
400 | รูปแบบพารามิเตอร์คำขอไม่ถูกต้อง โปรดตรวจสอบว่าเนื้อหา JSON ตรงตามรูปแบบพารามิเตอร์หรือไม่ |
3002 |
400 | พารามิเตอร์คำขอผิดพลาด โปรดตรวจสอบว่าพารามิเตอร์คำขอตรงตามข้อกำหนดหรือไม่ |
3005 |
400 | ยอดเงินไม่เพียงพอ |
5100 |
400 | SIM Swap ล้มเหลวทั่วไป |
5101 |
400 | หมายเลขนี้ไม่อยู่ในพื้นที่ให้บริการ SIM Swap รวมถึงประเทศ ผู้ให้บริการ และกลุ่มหมายเลขที่ยังไม่รองรับในขณะนี้ หรือไม่สามารถระบุหมายเลขได้ |










