SNSOTP OTP API
REST API สำหรับการยืนยันด้วย SMS สั่งหมายเลขสำหรับบริการใดก็ได้จาก 182 บริการในประเทศใดก็ได้จาก 154 ประเทศ อ่านรหัสครั้งเดียวจากคำสั่งซื้อ และรับเงินคืนเต็มจำนวนเมื่อไม่มีรหัสมาถึงภายใน 20 นาที
ทุก endpoint รับพารามิเตอร์เป็น query parameters (GET) หรือเป็น form fields หรือ JSON (POST) คำตอบเป็น JSON เงินเป็นสตริง USD ทศนิยมสองตำแหน่ง และเวลาเป็น ISO 8601 ใน UTC
https://snsotp.com/api/v1
API key ของคุณจาก console ส่งเป็น Authorization: Bearer sok_...
การยืนยันตัวตน
สร้างคีย์ในหน้า API ของ console คีย์จะขึ้นต้นด้วย sok_ และแสดงเพียงครั้งเดียว ดังนั้นให้เก็บไว้ในตัวแปรแวดล้อม การแทนที่คีย์จะหยุดคีย์เก่าทันที การเรียก /services, /countries และ /prices ทำงานได้โดยไม่ต้องใช้คีย์
Authorization: Bearer sok_your_key_here
คีย์ยังสามารถส่งเป็น key query parameter หรือ form field ซึ่งช่วยเครื่องมือที่ไม่สามารถตั้งค่า headers ได้
เริ่มต้นอย่างรวดเร็ว
สั่งหมายเลข มอบให้แอป แล้วตรวจสอบคำสั่งซื้อจนกว่าจะมีรหัส กระบวนการเดียวกันในสี่ภาษา:
# 1. Order a number for whatsapp in US
curl -X POST https://snsotp.com/api/v1/orders \
-H "Authorization: Bearer $SNSOTP_KEY" \
-d service=whatsapp -d country=us
# 2. Read the code (poll every 3 to 5 seconds)
curl https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB \
-H "Authorization: Bearer $SNSOTP_KEY"GET/services
ทุกบริการพร้อมรหัสและราคาต่ำสุด · ไม่ต้องใช้คีย์
ทุกบริการที่คุณสามารถสั่งซื้อ พร้อมรหัส (ใช้เป็น service ในการเรียกอื่น) ประเภท และราคาต่ำสุดในทุกประเทศ ไม่ต้องใช้คีย์
curl https://snsotp.com/api/v1/services
{
"services": [
{ "code": "whatsapp", "name": "WhatsApp", "category": "social", "from": "0.09" },
{ "code": "telegram", "name": "Telegram", "category": "social", "from": "0.03" }
]
}GET/countries
ทุกประเทศพร้อมรหัสและรหัสโทร · ไม่ต้องใช้คีย์
ทุกประเทศพร้อมรหัส (ISO 3166 alpha-2 ในตัวพิมพ์เล็ก ใช้เป็น country) และรหัสโทร ไม่ต้องใช้คีย์
curl https://snsotp.com/api/v1/countries
{
"countries": [
{ "code": "us", "name": "United States", "dial_code": "1" },
{ "code": "gb", "name": "United Kingdom", "dial_code": "44" }
]
}GET/prices
ราคาสำหรับบริการ, ประเทศ หรือทั้งสองอย่าง · ไม่ต้องใช้คีย์
ราคาต่อคำสั่งซื้อสำหรับหนึ่งบริการในทุกประเทศ หนึ่งประเทศสำหรับทุกบริการ หรือหนึ่งคู่ ส่งตัวกรองอย่างน้อยหนึ่งตัว ไม่ต้องใช้คีย์
Parameters
servicestring
รหัสบริการ เช่น whatsapp
countrystring
รหัสประเทศ เช่น us
curl "https://snsotp.com/api/v1/prices?service=whatsapp&country=us"
{
"prices": [
{ "service": "whatsapp", "country": "us", "price": "0.93" }
]
}GET/balance
เครดิตของคุณใน USD · ต้องใช้คีย์
เครดิตของคุณใน USD
curl https://snsotp.com/api/v1/balance \ -H "Authorization: Bearer $SNSOTP_KEY"
{
"balance": "42.50",
"currency": "USD"
}POST/orders
สั่งซื้อหมายเลขสำหรับบริการและประเทศ · ต้องใช้คีย์
สั่งหมายเลขและคิดราคา คำตอบมีหมายเลขเต็ม (phone) และไม่มีรหัสโทร (number) คำสั่งซื้อจะเปิดไว้ 20 นาที หากไม่มีรหัสในเวลานั้น ราคาจะคืนสู่เครดิตของคุณโดยอัตโนมัติ คำตอบสถานะ 201
Parameters
servicestringจำเป็น
รหัสบริการจาก GET /services
countrystringจำเป็น
รหัสประเทศจาก GET /countries
curl -X POST https://snsotp.com/api/v1/orders \ -H "Authorization: Bearer $SNSOTP_KEY" \ -d service=whatsapp -d country=us
{
"order": {
"id": "OT-7K2M9QX4PB",
"service": "whatsapp",
"country": "us",
"phone": "+13475550182",
"number": "3475550182",
"dial_code": "1",
"price": "0.93",
"status": "waiting",
"code": null,
"sms": null,
"codes": [],
"expires_at": "2026-11-03T12:20:00.000Z"
},
"window_minutes": 20
}GET/orders/{id}
สถานะ, รหัส และข้อความ SMS ของคำสั่งซื้อหนึ่งรายการ · ต้องใช้คีย์
หนึ่งคำสั่งซื้อพร้อมสถานะ รหัสล่าสุด ข้อความ SMS ล่าสุด และทุกรหัสที่ได้รับจนถึงตอนนี้ ตรวจสอบทุก 3 ถึง 5 วินาทีในขณะที่สถานะเป็น waiting
Parameters
idpathจำเป็น
รหัสคำสั่งซื้อจาก POST /orders
curl https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB \ -H "Authorization: Bearer $SNSOTP_KEY"
{
"order": {
"id": "OT-7K2M9QX4PB",
"service": "whatsapp",
"country": "us",
"phone": "+13475550182",
"number": "3475550182",
"price": "0.93",
"status": "received",
"code": "284913",
"sms": "Your WhatsApp code is 284913",
"expires_at": "2026-11-03T12:20:00.000Z"
}
}GET/orders
คำสั่งซื้อที่เปิดอยู่ของคุณ (หรือทั้งหมดด้วย status=all) · ต้องใช้คีย์
คำสั่งซื้อที่เปิดอยู่ของคุณ เรียงจากใหม่สุด เพิ่ม status=all สำหรับคำสั่งซื้อล่าสุดในทุกสถานะ
Parameters
statusstring
open (ค่าเริ่มต้น) หรือ all
limitnumber
1 ถึง 100 ค่าเริ่มต้น 50
curl "https://snsotp.com/api/v1/orders?status=open" \ -H "Authorization: Bearer $SNSOTP_KEY"
{
"orders": [
{ "id": "OT-7K2M9QX4PB", "service": "whatsapp", "status": "received", "code": "284913" }
]
}POST/orders/{id}/resend
ขอรหัสอีกครั้งบนหมายเลขเดิม · ต้องใช้คีย์
ขอรหัสอื่นในหมายเลขเดียวกันหลังจากรหัสแรก ภายในเวลา window โดยไม่มีค่าใช้จ่ายเพิ่มเติม จากนั้นเรียก SMS ใหม่ในแอป waiting_for_resend เป็น true จนกว่าจะมาถึง
Parameters
idpathจำเป็น
รหัสคำสั่งซื้อ
curl -X POST https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB/resend \ -H "Authorization: Bearer $SNSOTP_KEY"
{
"order": { "id": "OT-7K2M9QX4PB", "status": "received", "waiting_for_resend": true }
}POST/orders/{id}/finish
ปิดคำสั่งซื้อหลังจากใช้รหัสแล้ว · ต้องใช้คีย์
ปิดคำสั่งซื้อที่ได้รับรหัสแล้วเมื่อคุณใช้มันเสร็จสิ้น การ finish เป็นทางเลือก: คำสั่งซื้อที่เปิดอยู่จะปิดโดยตัวเองเมื่อ window สิ้นสุด
Parameters
idpathจำเป็น
รหัสคำสั่งซื้อ
curl -X POST https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB/finish \ -H "Authorization: Bearer $SNSOTP_KEY"
{
"order": { "id": "OT-7K2M9QX4PB", "status": "finished" }
}POST/orders/{id}/cancel
ยกเลิกก่อนได้รับรหัส, คืนเงินเต็มจำนวน · ต้องใช้คีย์
ยกเลิกคำสั่งซื้อก่อนที่รหัสจะมาถึงและคืนเงินเต็มจำนวนสู่เครดิตของคุณทันที หลังจากมีรหัสแล้ว การยกเลิกจะตอบ has_code
Parameters
idpathจำเป็น
รหัสคำสั่งซื้อ
curl -X POST https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB/cancel \ -H "Authorization: Bearer $SNSOTP_KEY"
{
"order": { "id": "OT-7K2M9QX4PB", "status": "canceled", "refunded": "0.93" }
}สถานะคำสั่งซื้อ
waitingหมายเลขพร้อมแล้วและยังไม่มี SMS มาถึง สามารถยกเลิกได้receivedมีรหัสมาถึงอย่างน้อยหนึ่งรหัส code และ sms เก็บรหัสล่าสุดfinishedปิดหลังจากมีรหัส โดย finish หรือเมื่อ window สิ้นสุดrefundedไม่มีรหัสมาถึงใน 20 นาที เงินเต็มจำนวนกลับสู่เครดิตของคุณcanceledยกเลิกก่อนมีรหัส เงินเต็มจำนวนกลับสู่เครดิตของคุณ
ข้อผิดพลาด
ข้อผิดพลาดใช้ HTTP status และ body พร้อมรหัสที่คงที่และข้อความที่อ่านได้
- 400
missing_filter, bad_jsonค่าที่จำเป็นหายไปหรือไม่สามารถอ่าน body ได้ - 401
no_key, bad_keyคีย์หายไป ผิด หรือถูกลบ - 402
no_balanceเครดิตไม่เพียงพอสำหรับคำสั่งซื้อนี้ เพิ่มเครดิตใน console - 404
unknown_service, unknown_country, not_sold, not_foundรหัสหรือคำสั่งซื้อไม่มีอยู่ หรือคู่ไม่มีการขาย - 409
too_many_open, has_code, not_ready, no_numbersการกระทำไม่สอดคล้องกับสถานะคำสั่งซื้อ หรือไม่มีหมายเลขว่างในตอนนี้ (ไม่มีการคิดเงิน) - 429
rate_limitedมากกว่า 300 คำขอในหนึ่งนาทีด้วยคีย์เดียว
{
"error": {
"code": "no_balance",
"message": "Not enough credit. Add credit in the console."
}
}ข้อจำกัดอัตรา
- 300 คำขอต่อนาทีต่อคีย์ เกินนั้น API จะตอบ 429 rate_limited สำหรับส่วนที่เหลือของนาที
- สูงสุด 20 คำสั่งซื้อที่เปิดอยู่ต่อบัญชี finish หรือยกเลิกหนึ่งรายการเพื่อเปิดอีกรายการ
- ตรวจสอบคำสั่งซื้อทุก 3 ถึง 5 วินาที โดยปกติรหัสจะมาถึงภายในหนึ่งนาที
รูปแบบการเปิดใช้งาน SMS
สคริปต์ที่เขียนสำหรับรูปแบบ handler_api.php ทั่วไปทำงานกับ API key เดียวกัน: เปลี่ยนที่อยู่ฐานเป็น https://snsotp.com/stubs/handler_api.php และเก็บการดำเนินการไว้ รหัสบริการและประเทศจะเหมือนกับใน REST API
getBalanceACCESS_BALANCE:42.50
getServicesListรายการบริการในรูปแบบ JSON
getCountriesแผนที่ประเทศในรูปแบบ JSON
getPricesservice, country (ไม่จำเป็น)JSON {country: {service: {cost, count}}}
getNumberservice, countryACCESS_NUMBER:<id>:<phone>
getStatusidSTATUS_WAIT_CODE, STATUS_OK:<code>, STATUS_WAIT_RETRY:<code>, STATUS_CANCEL
setStatusid, status 1 / 3 / 6 / 8ACCESS_READY, ACCESS_RETRY_GET, ACCESS_ACTIVATION, ACCESS_CANCEL
curl "https://snsotp.com/stubs/handler_api.php\ ?api_key=$SNSOTP_KEY&action=getNumber\ &service=telegram&country=gb" ACCESS_NUMBER:OT-3QF8ZK2W7M:447700900182
ค่าของ setStatus: 1 พร้อมใช้งาน, 3 รหัสอื่น, 6 เสร็จสิ้น, 8 ยกเลิกพร้อมคืนเงินเต็มจำนวน