เอกสาร Partner API
รุ่น v3 — เชื่อมต่อระบบของคุณเข้ากับคลังบริการของเราโดยตรง

Partner API

เชื่อมต่อระบบของคุณเข้ากับทุกสายบริการด้วยคีย์ใบเดียว — ทุกคำขอเป็น POST (form-urlencoded หรือ JSON) คำตอบเป็น JSON เสมอ และแชร์โควตาต่อนาทีร่วมกันทุกสาย

เปิดให้บริการ
POST /socialup/api/v3
การยืนยันตัวตน — ส่งคีย์ทางส่วนหัวของคำขอ (แนะนำ) หรือฟิลด์ key ในเนื้อคำขอ http
1X-Api-Key: adp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2
3# หรือ
4Authorization: Bearer adp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ห้ามส่งคีย์มาทาง query string — URL ถูกบันทึกใน access log ทุกชั้น คีย์ที่หลุดทางนั้นถือว่าหลุดถาวร ระบบจึงไม่อ่านคีย์จาก query string โดยตั้งใจ
รูปแบบคำตอบ — ตัดสินใจจาก ok และ error.code เท่านั้น (message ไว้ให้คนอ่าน) json
1// สำเร็จ
2{ "ok": true,  "data": { … }, "request_id": "9f2c1a…" }
3
4// ไม่สำเร็จ
5{ "ok": false, "error": { "code": "INVALID_KEY", "message": "API key ไม่ถูกต้อง" }, "request_id": "9f2c1a…" }

เรียกแบบ REST ได้ด้วยการต่อชื่อ action ท้าย URL แทนฟิลด์ action และ action=balance (เช็คยอดเงิน) ใช้ได้กับ endpoint ของทุกสายบริการ

🔑 สร้าง API key — ใบเดียวใช้ได้ทุกสายบริการ

สมาชิกทุกคนสร้างคีย์ได้ฟรี (สูงสุด 5 ใบต่อบัญชี ยกเลิกได้ทีละใบ) — เข้าสู่ระบบก่อนแล้วกลับมาสร้างที่หน้านี้ได้เลย

โควตาการเรียก

ทุกคำตอบแนบส่วนหัว X-RateLimit-Limit / X-RateLimit-Remaining / X-RateLimit-Reset — ใช้หน่วงเองได้โดยไม่ต้องรอโดนปฏิเสธ

ขอบเขตโควตาเมื่อเกิน
ทุก action รวมกัน (ต่อ 1 คีย์)120 ครั้ง / นาทีตอบ 429 พร้อม RATE_LIMITED และส่วนหัว Retry-After
action ที่ตัดเงิน (สั่งซื้อ/ต่ออายุ ทุกสายรวมกัน)20 ครั้ง / นาที
ดึงแคตตาล็อกทั้งก้อน (ต่อ 1 คีย์)12 ครั้ง / นาที
ยืนยันตัวตนไม่ผ่าน (ต่อ 1 หมายเลขไอพี)30 ครั้ง / นาที

โควตาการสั่งซื้อต่ำกว่าตัวอื่นโดยตั้งใจ — ถ้าระบบฝั่งคุณวนลูปผิดพลาด ความเสียหายถูกจำกัดที่ 20 รายการต่อนาที · แคตตาล็อกควรดึงเก็บแคชไว้ (ข้อมูลเปลี่ยนวันละไม่กี่ครั้ง) เช็คราคาบริการเดียวส่ง service=… มาด้วย จะไม่ติดโควตานี้

เพิ่มยอดโซเชียล

บริการเพิ่มผู้ติดตาม ไลก์ วิว คอมเมนต์ ทุกแพลตฟอร์ม — action ชุดมาตรฐาน SMM ที่เครื่องมือส่วนใหญ่เชื่อมต่อได้ทันที

ตัวอย่างเรียกจริง curl
1curl -X POST https://adsplusth.com/socialup/api/v3 \
2  -H "X-Api-Key: adp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
3  -d "action=add" -d "service=12345" \
4  -d "link=https://www.instagram.com/p/abc123" \
5  -d "quantity=1000"

servicesรายการบริการและราคา

POST /socialup/api/v3/services

ดึงรายการบริการที่เปิดขายอยู่พร้อมราคาขายจริง ควรดึงมาแคชไว้ฝั่งคุณ ไม่ควรดึงทุกครั้งที่จะสั่งซื้อ

พารามิเตอร์บังคับคำอธิบาย
service ไม่บังคับ ขอเฉพาะบริการเดียวตามรหัสที่ระบุ
category ไม่บังคับ กรองตามชื่อหมวดหมู่ (ต้องตรงทั้งข้อความ)
limit / offset ไม่บังคับ แบ่งหน้า ค่าเริ่มต้นคือคืนทั้งหมด
ตัวอย่างคำตอบ json
1{
2  "ok": true,
3  "data": {
4    "count": 6468,
5    "services": [
6      {
7        "service": 12345,
8        "name": "Instagram Followers [ส่งเร็ว]",
9        "category": "Instagram",
10        "type": "default",
11        "rate": "70.00",          // ราคาขายต่อ 1,000 หน่วย หน่วยเป็นบาท
12        "currency": "THB",
13        "min": 10,
14        "max": 500000,
15        "dripfeed": true,
16        "refill": true,
17        "cancel": false,
18        "pricing": "quantity",    // วิธีคิดเงิน: quantity | lines | package | per_post
19        "fields": ["link", "quantity"]   // ฟิลด์ที่ต้องส่งตอน add
20      }
21    ]
22  },
23  "request_id": "9f2c…"
24}

balanceยอดเงินคงเหลือ

POST /socialup/api/v3/balance

ยอดในกระเป๋าเงินของบัญชีเจ้าของคีย์ อ่านสดจากฐานข้อมูลทุกครั้ง

ตัวอย่างคำตอบ json
1{
2  "ok": true,
3  "data": { "balance": "1250.75", "currency": "THB" },
4  "request_id": "9f2c…"
5}

addสั่งซื้อ

POST /socialup/api/v3/add

สร้างคำสั่งซื้อใหม่ ตัดเงินจากกระเป๋าทันทีที่สำเร็จ ฟิลด์ที่ต้องส่งขึ้นกับชนิดบริการ — ดูได้จากช่อง fields ที่ services ส่งกลับมา

พารามิเตอร์บังคับคำอธิบาย
service บังคับ รหัสบริการ
link ตามชนิดบริการ ลิงก์โพสต์/โปรไฟล์ ต้องขึ้นต้นด้วย http:// หรือ https://
quantity ตามชนิดบริการ จำนวนที่ต้องการ (ต้องอยู่ในช่วง min–max ของบริการ)
comments ตามชนิดบริการ คอมเมนต์บรรทัดละ 1 ข้อความ — จำนวนบรรทัดคือจำนวนที่คิดเงิน
runs / interval ไม่บังคับ โหมดทยอยส่ง ใช้ได้เฉพาะบริการที่ dripfeed = true (ยอดที่ตัด = quantity × runs)
username, min, max, posts … ตามชนิดบริการ ฟิลด์เฉพาะของชนิด subscriptions / poll / seo ฯลฯ
ตัวอย่างคำตอบ json
1{
2  "ok": true,
3  "data": {
4    "order": 987654,
5    "service": 12345,
6    "quantity": 1000,
7    "charge": "70.00",
8    "currency": "THB",
9    "balance": "1180.75"
10  },
11  "request_id": "9f2c…"
12}

statusสถานะคำสั่งซื้อ

POST /socialup/api/v3/status

ถามสถานะได้ครั้งละหลายเลข ระบบตอบเฉพาะคำสั่งซื้อที่เป็นของเจ้าของคีย์เท่านั้น เลขที่ไม่ใช่ของคุณจะได้ ORDER_NOT_FOUND เหมือนเลขที่ไม่มีอยู่จริง

พารามิเตอร์บังคับคำอธิบาย
order อย่างใดอย่างหนึ่ง เลขคำสั่งซื้อเดียว
orders อย่างใดอย่างหนึ่ง หลายเลขคั่นด้วยจุลภาค สูงสุด 100 เลขต่อคำขอ
ตัวอย่างคำตอบ json
1{
2  "ok": true,
3  "data": {
4    "orders": [
5      {
6        "order": 987654,
7        "service": 12345,
8        "status": "In progress",     // Pending|Processing|In progress|Completed|Partial|Canceled|Refunded
9        "status_th": "กำลังดำเนินการ",
10        "charge": "70.00",
11        "currency": "THB",
12        "quantity": 1000,
13        "start_count": "5230",
14        "remains": "420",
15        "refunded": "0.00",
16        "created_at": "2026-07-22 10:15:03"
17      },
18      { "order": 111, "error": "ORDER_NOT_FOUND" }
19    ]
20  },
21  "request_id": "9f2c…"
22}

cancelยกเลิกคำสั่งซื้อ

POST /socialup/api/v3/cancel

ส่งคำขอยกเลิกไปยังผู้ให้บริการ ใช้ได้เฉพาะบริการที่ cancel = true และคำสั่งซื้อที่ยังไม่จบ การคืนเงินเข้ากระเป๋าเกิดขึ้นทีหลังโดยระบบติดตามสถานะ ไม่ได้คืนทันทีที่เรียก

พารามิเตอร์บังคับคำอธิบาย
order / orders บังคับ เลขคำสั่งซื้อ สูงสุด 100 เลขต่อคำขอ
ตัวอย่างคำตอบ json
1{
2  "ok": true,
3  "data": {
4    "orders": [
5      { "order": 987654, "accepted": true },
6      { "order": 987655, "error": "NOT_SUPPORTED", "message": "บริการนี้ไม่รองรับการยกเลิก" }
7    ],
8    "dry_run": false
9  },
10  "request_id": "9f2c…"
11}

refillขอเติมยอดคืน

POST /socialup/api/v3/refill

ใช้ได้เฉพาะบริการที่ refill = true และคำสั่งซื้อที่สถานะเป็น Completed หรือ Partial แล้วเท่านั้น

พารามิเตอร์บังคับคำอธิบาย
order / orders บังคับ เลขคำสั่งซื้อ สูงสุด 100 เลขต่อคำขอ
ตัวอย่างคำตอบ json
1{
2  "ok": true,
3  "data": {
4    "orders": [ { "order": 987654, "accepted": true, "refill": 55231 } ],
5    "dry_run": false
6  },
7  "request_id": "9f2c…"
8}

เช่าเบอร์รับ SMS (OTP)

เช่าเบอร์ชั่วคราวเพื่อรับรหัส SMS — ลำดับใช้งาน: services เลือกแพลตฟอร์ม → countries ดูราคา/เบอร์ว่าง → buy เช่า → วนถาม status จนได้ sms_code · ยกเลิกได้หลังเวลาที่กำหนด และหมดเวลา (20 นาที) = คืนเงินเต็มอัตโนมัติ

ตัวอย่างเรียกจริง curl
1# 1) เช่าเบอร์
2curl -X POST https://adsplusth.com/otp/api/v3/buy -H "X-Api-Key: adp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
3  -d "service=fb" -d "country=52"
4
5# 2) วนถามจนได้รหัส (ทุก ~5 วินาที)
6curl -X POST https://adsplusth.com/otp/api/v3/status -H "X-Api-Key: adp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -d "order=OTP2026…"

servicesแพลตฟอร์มที่รองรับ

POST /otp/api/v3/services

รายชื่อบริการที่เช่าเบอร์รับรหัสได้ (facebook, line, shopee, …) เอาค่า service ไปใช้ขั้นถัดไป

พารามิเตอร์บังคับคำอธิบาย
q ไม่บังคับ ค้นหาจากชื่อ
limit / offset ไม่บังคับ แบ่งหน้า (limit สูงสุด 500)
ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "count": 2, "total": 214, "services": [
2    { "service": "fb", "name": "Facebook" },
3    { "service": "ig", "name": "Instagram" } ] }, "request_id": "…" }

countriesราคา + เบอร์ว่างต่อประเทศ

POST /otp/api/v3/countries

ราคาอ่านสดจากผู้ให้บริการ (คิดเป็นราคาขายแล้ว) — ตัวเลขเดียวกับที่จะถูกตัดตอน buy

พารามิเตอร์บังคับคำอธิบาย
service บังคับ รหัสบริการจาก action=services
ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "service": "fb", "count": 1, "countries": [
2    { "country": 52, "name": "Thailand", "iso": "th",
3      "price": "24.00", "currency": "THB", "qty": 1543 } ] }, "request_id": "…" }

tiersชั้นราคาของบริการ+ประเทศ

POST /otp/api/v3/tiers

ราคาสดหลายชั้นของบริการในประเทศหนึ่ง — ชั้นแพงขึ้นมักได้เบอร์เร็วกว่า เอาค่า tier ไปส่งใน buy (ไม่ส่ง = ชั้นถูกสุด)

พารามิเตอร์บังคับคำอธิบาย
service บังคับ รหัสบริการจาก action=services
country บังคับ รหัสประเทศ (จาก countries)
ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "service": "fb", "country": 52, "count": 2, "tiers": [
2    { "tier": "0.1000", "price": "8.00", "currency": "THB", "qty": 412 },
3    { "tier": "0.2500", "price": "18.00", "currency": "THB", "qty": 1130 } ] }, "request_id": "…" }

buyเช่าเบอร์ (ตัดเงิน)

POST /otp/api/v3/buy

ตัดเงินและเช่าเบอร์ทันที เบอร์มีอายุ 20 นาที — เอาเบอร์ไปสมัครแล้ววนถาม status จนได้รหัส ถ้าไม่มีเบอร์ว่างจะได้ PROVIDER_UNAVAILABLE โดยไม่ถูกตัดเงิน

พารามิเตอร์บังคับคำอธิบาย
service บังคับ รหัสบริการ
country บังคับ รหัสประเทศจาก action=countries
ตัวอย่างคำตอบ json
1{ "ok": true, "data": {
2    "order": "OTP20260730123456ABC123",
3    "phone": "66812345678",
4    "charge": "24.00", "currency": "THB",
5    "expired_at": "2026-07-30 12:54:56",
6    "cancel_available_at": "2026-07-30 12:36:56",
7    "balance": "976.00" }, "request_id": "…" }

statusสถานะ + รหัส SMS

POST /otp/api/v3/status

วนถามทุก ~5 วินาทีจนสถานะเป็น completed (ได้ sms_code) หรือ canceled/expired — หมดเวลาแล้วระบบคืนเงินเต็มให้เองอัตโนมัติ ไม่ต้องทำอะไรเพิ่ม

พารามิเตอร์บังคับคำอธิบาย
order บังคับ เลขคำสั่งเช่าจาก buy
ตัวอย่างคำตอบ json
1{ "ok": true, "data": {
2    "order": "OTP20260730123456ABC123",
3    "status": "completed",          // waiting | completed | canceled | expired
4    "sms_code": "382914",           // null จนกว่าจะได้รหัส
5    "phone": "66812345678",
6    "expired_at": "2026-07-30 12:54:56",
7    "cancel_available_at": "2026-07-30 12:36:56",
8    "can_cancel": false,
9    "refunded": false }, "request_id": "…" }

cancelยกเลิก + คืนเงินเต็ม

POST /otp/api/v3/cancel

ยกเลิกได้หลังเวลา cancel_available_at (ราว 2 นาทีหลังเช่า) และเฉพาะที่ยังไม่ได้รับรหัส สำเร็จ = คืนเงินเต็มเข้ากระเป๋าทันที

พารามิเตอร์บังคับคำอธิบาย
order บังคับ เลขคำสั่งเช่า
ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "order": "OTP2026…", "refunded": true, "balance": "1000.00" }, "request_id": "…" }

ordersประวัติการเช่า

POST /otp/api/v3/orders

รายการล่าสุดของบัญชีเจ้าของคีย์ (รหัส SMS แสดงเฉพาะรายการที่สำเร็จ)

พารามิเตอร์บังคับคำอธิบาย
limit ไม่บังคับ จำนวนรายการ สูงสุด 200 (ค่าเริ่มต้น 50)
ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "count": 1, "orders": [
2    { "order": "OTP2026…", "service": "fb", "name": "Facebook", "country": "Thailand",
3      "phone": "66812345678", "status": "completed", "sms_code": "382914",
4      "charge": "24.00", "currency": "THB", "refunded": false,
5      "created_at": "2026-07-30 12:34:56" } ] }, "request_id": "…" }

ขายบัญชีโซเชียล

ซื้อบัญชีโซเชียลสำเร็จรูป — จ่ายแล้วได้ credential กลับทันทีในคำตอบของ buy และเปิดดูซ้ำได้ตลอดจาก order

ตัวอย่างเรียกจริง curl
1curl -X POST https://adsplusth.com/accounts/api/v3/buy -H "X-Api-Key: adp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
2  -d "product=17" -d "qty=2"

categoriesหมวดสินค้า

POST /accounts/api/v3/categories

หมวดที่เปิดขาย เอาค่า category ไปกรองใน products ได้

ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "count": 1, "categories": [ { "category": 3, "name": "Facebook" } ] }, "request_id": "…" }

productsสินค้า + ราคา + สต็อก

POST /accounts/api/v3/products

สต็อกเปลี่ยนตลอดเวลา ควรเช็คก่อนสั่งเสมอ

พารามิเตอร์บังคับคำอธิบาย
q ไม่บังคับ ค้นหาจากชื่อ/รหัสสินค้า
category ไม่บังคับ กรองตามหมวด
page ไม่บังคับ หน้าที่ต้องการ
ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "count": 1, "total": 42, "page": 1, "pages": 2, "products": [
2    { "product": 17, "name": "Facebook อายุ 1 ปี+", "category": "Facebook",
3      "price": "35.00", "currency": "THB", "stock": 120, "min": 1, "max": 50 } ] }, "request_id": "…" }

buyซื้อบัญชี (ตัดเงิน)

POST /accounts/api/v3/buy

จ่ายแล้วได้ credential กลับในคำตอบ — เก็บทันที และเปิดดูซ้ำได้จาก action=order | ดู status เสมอ: success = ได้ของแล้ว (count อาจน้อยกว่า quantity ถ้าต้นทางส่งไม่ครบ ส่วนที่ขาดคืนเงินแล้วตาม refunded) | pending = ตัดเงินแล้ว รอต้นทางส่งมอบ ห้ามสั่งซ้ำ ให้เรียก action=order จนเป็น success หรือ refund (คืนเงินเต็ม) | ถ้าต้นทางปฏิเสธ ระบบไม่ตัดเงิน

พารามิเตอร์บังคับคำอธิบาย
product บังคับ รหัสสินค้า
qty ไม่บังคับ จำนวน (ค่าเริ่มต้น 1 — ต้องอยู่ในช่วง min–max)
ตัวอย่างคำตอบ json
1{ "ok": true, "data": {
2    "order": 5011, "status": "success", "quantity": 2, "count": 2,
3    "charge": "70.00", "refunded": "0.00", "currency": "THB",
4    "accounts": [ "[email protected]:pass1:token…", "[email protected]:pass2:token…" ],
5    "balance": "930.00", "message": "" }, "request_id": "…" }

ordersประวัติออเดอร์

POST /accounts/api/v3/orders

รายการออเดอร์ของบัญชีเจ้าของคีย์ (ตัว credential ดูจาก action=order เป็นราย ๆ)

พารามิเตอร์บังคับคำอธิบาย
q ไม่บังคับ ค้นหาจากชื่อสินค้า/เลขออเดอร์
page ไม่บังคับ หน้าที่ต้องการ
ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "count": 1, "total": 8, "page": 1, "pages": 1, "orders": [
2    { "order": 5011, "product": 17, "name": "Facebook อายุ 1 ปี+", "quantity": 2,
3      "charge": "70.00", "currency": "THB", "status": "completed",
4      "accounts": 2, "created_at": "2026-07-30 12:00:00" } ] }, "request_id": "…" }

orderดู credential ของออเดอร์เดิม

POST /accounts/api/v3/order

เปิดดูบัญชีที่ซื้อไปแล้วซ้ำได้ตลอด — เห็นเฉพาะออเดอร์ของเจ้าของคีย์เท่านั้น

พารามิเตอร์บังคับคำอธิบาย
order บังคับ เลขออเดอร์
ตัวอย่างคำตอบ json
1{ "ok": true, "data": {
2    "order": 5011, "name": "Facebook อายุ 1 ปี+", "quantity": 2,
3    "charge": "70.00", "currency": "THB", "status": "completed",
4    "accounts": [ "[email protected]:pass1:token…" ],
5    "created_at": "2026-07-30 12:00:00" }, "request_id": "…" }

พร็อกซี

ซื้อ/ต่ออายุ static proxy — ไล่แคตตาล็อกตามลำดับ types → countries → shops → packages แล้ว buy จะได้ออเดอร์สถานะ pending ระบบจัด IP ให้ภายในไม่กี่นาที ตามผลและอ่าน credential ได้จาก action=order

ตัวอย่างเรียกจริง curl
1curl -X POST https://adsplusth.com/proxy/api/v3/buy -H "X-Api-Key: adp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
2  -d "package=120" -d "qty=1"

typesประเภทพร็อกซี

POST /proxy/api/v3/types

เอาค่า type ไปใช้กับ countries / shops / packages

ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "count": 2, "types": [
2    { "type": 1, "name": "Static ISP Residential", "name_th": "ISP บ้านแบบคงที่" },
3    { "type": 2, "name": "Static IPv4", "name_th": "IPv4 แบบคงที่" } ] }, "request_id": "…" }

countriesประเทศ + เกรด IP

POST /proxy/api/v3/countries

ประเทศที่มีขายของประเภทนั้น พร้อมฟิลด์ qualities (เกรด IP) ไว้ใช้กับ shops / packages

พารามิเตอร์บังคับคำอธิบาย
type บังคับ รหัสประเภทจาก action=types
ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "type": 1, "count": 1, "countries": [
2    { "country": "US", "name": "United States", "name_th": "สหรัฐอเมริกา",
3      "qualities": ["ordinary", "premium"] } ] }, "request_id": "…" }

shopsผู้ให้บริการ

POST /proxy/api/v3/shops

ผู้ให้บริการที่มีของใน ประเภท+ประเทศ+เกรด นั้น — เอาค่า shop ไปกรอง packages ได้

พารามิเตอร์บังคับคำอธิบาย
type บังคับ รหัสประเภทจาก action=types
country บังคับ รหัสประเทศจาก action=countries
quality ไม่บังคับ เกรด IP จากฟิลด์ qualities ของ action=countries เช่น ordinary, premium
ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "count": 1, "shops": [ { "shop": 7, "name": "Provider A" } ] }, "request_id": "…" }

packagesแพ็กเกจ + ราคา

POST /proxy/api/v3/packages

price คือยอดที่ถูกตัดจริงต่อ 1 IP ต่อ 1 รอบระยะเวลา — renew_price เป็นราคาต่ออายุโดยประมาณ ยอดจริงคิดสดตอน renew

พารามิเตอร์บังคับคำอธิบาย
type บังคับ รหัสประเภทจาก action=types
country บังคับ รหัสประเทศจาก action=countries
quality ไม่บังคับ กรองตามเกรด IP (ไม่ระบุ = ทุกเกรด)
shop ไม่บังคับ กรองตามผู้ให้บริการ (รหัสจาก action=shops — ไม่ระบุ = ทุกราย)
ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "count": 1, "packages": [
2    { "package": 120, "name": "ISP 30 วัน", "shop": "Provider A", "country": "US",
3      "quality": "ordinary", "duration_days": 30, "price": "175.00",
4      "renew_price": "160.00", "currency": "THB" } ] }, "request_id": "…" }

catalogแคตตาล็อกทั้งหมดในคำขอเดียว

POST /proxy/api/v3/catalog

ประเภท/ประเทศ/ผู้ให้บริการ/แพ็กเกจที่เปิดขายทั้งหมด พร้อมราคาของคุณ — เหมาะกับการซิงก์ทั้งร้าน (ไม่ต้องไล่ types → countries → shops → packages) · ใช้โควตากลุ่มดึงแคตตาล็อก

ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "currency": "THB",
2    "types": [ { "type": 1, "name": "Static ISP Residential", "name_th": "ISP บ้านแบบคงที่",
3      "subtitle_th": "…", "subtitle_en": "…", "platforms": "…", "family": "static", "has_udp": true, "sort": 1 } ],
4    "countries": [ { "type": 1, "country": "US", "name": "United States", "name_th": "สหรัฐอเมริกา", "sort": 0 } ],
5    "shops": [ { "shop": 7, "type": 1, "country": "US", "name": "Provider A" } ],
6    "packages": [ { "package": 120, "type": 1, "shop": 7, "country": "US", "quality": "ordinary",
7      "name": "ISP 30 days", "name_th": "ISP 30 วัน", "duration_minutes": 43200,
8      "price": 175, "renew_price": 160, "auto_renew": true, "sort": 0 } ] }, "request_id": "…" }

buyซื้อแพ็กเกจ (ตัดเงิน)

POST /proxy/api/v3/buy

ตัดเงินแล้วเปิดออเดอร์สถานะ pending — ระบบจัด IP ให้ภายในราว 1-5 นาที วนถาม action=order จน status เป็น active แล้วอ่าน credential จากฟิลด์ ips ถ้าจัดของไม่สำเร็จ ระบบคืนเงินอัตโนมัติ

พารามิเตอร์บังคับคำอธิบาย
package บังคับ รหัสแพ็กเกจจาก action=packages
qty ไม่บังคับ จำนวน IP (ค่าเริ่มต้น 1, สูงสุด 20)
client_order_id ไม่บังคับ รหัสอ้างอิงของคุณ (A-Z a-z 0-9 . _ : - ไม่เกิน 128 ตัว) — ส่งซ้ำรหัสเดิม = ได้ผลเดิม (replayed: true) ไม่ทำรายการ/ไม่ตัดเงินซ้ำ · รหัสเดิมกับรายการอื่น = DUPLICATE_ORDER
ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "order_id": 31, "status": "pending",
2    "total": "175.00", "currency": "THB", "balance": "825.00" }, "request_id": "…" }

renewต่ออายุราย IP (ตัดเงิน)

POST /proxy/api/v3/renew

ต่ออายุ IP เดิมของบัญชีเจ้าของคีย์ — ยอดคิดสดฝั่งเซิร์ฟเวอร์ตอนสั่ง วันหมดอายุใหม่อยู่ในคำตอบ

พารามิเตอร์บังคับคำอธิบาย
ip_id บังคับ รหัส IP จาก action=mine
client_order_id ไม่บังคับ รหัสอ้างอิงของคุณ (A-Z a-z 0-9 . _ : - ไม่เกิน 128 ตัว) — ส่งซ้ำรหัสเดิม = ได้ผลเดิม (replayed: true) ไม่ทำรายการ/ไม่ตัดเงินซ้ำ · รหัสเดิมกับรายการอื่น = DUPLICATE_ORDER
ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "order_id": 32, "ip_id": 9, "expire_at": "2026-10-04 09:00:00",
2    "total": "160.00", "currency": "THB", "balance": "665.00" }, "request_id": "…" }

autorenewเปิด/ปิดต่ออายุอัตโนมัติ

POST /proxy/api/v3/autorenew

เปิด/ปิดการต่ออายุอัตโนมัติของ IP หนึ่ง (ระบบตัดเงินกระเป๋าแล้วต่อให้ก่อนหมดอายุ) — ไม่แตะเงินตอนตั้งค่า

พารามิเตอร์บังคับคำอธิบาย
ip_id บังคับ รหัส IP จาก action=mine
on บังคับ 1 = เปิด, 0 = ปิด
ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "ip_id": 9, "auto_renew": true }, "request_id": "…" }

labelตั้งชื่อกำกับ IP

POST /proxy/api/v3/label

ตั้งหรือล้างชื่อกำกับของ IP (ไว้จำว่าใช้กับงานไหน) — เว้นว่าง = ล้าง

พารามิเตอร์บังคับคำอธิบาย
ip_id บังคับ รหัส IP จาก action=mine
label ไม่บังคับ ชื่อกำกับ ไม่เกิน 120 ตัวอักษร
ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "ip_id": 9, "label": "ร้าน A — แอดโฆษณา" }, "request_id": "…" }

ordersประวัติออเดอร์

POST /proxy/api/v3/orders

ออเดอร์ซื้อ/ต่ออายุของบัญชีเจ้าของคีย์ (credential ดูจาก action=order หรือ action=mine)

พารามิเตอร์บังคับคำอธิบาย
page ไม่บังคับ หน้าที่ต้องการ
limit ไม่บังคับ จำนวนรายการต่อหน้า สูงสุด 200 (ค่าเริ่มต้น 50)
ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "count": 1, "total": 1, "page": 1, "pages": 1, "orders": [
2    { "order_id": 31, "type": "new", "package": 120, "name": "ISP 30 วัน", "shop": "Provider A",
3      "country": "US", "quality": "ordinary", "quantity": 1, "duration_days": 30,
4      "total": "175.00", "currency": "THB", "status": "active", "refunded": false,
5      "created_at": "2026-08-05 09:00:00" } ] }, "request_id": "…" }

orderออเดอร์เดียว + credential

POST /proxy/api/v3/order

เปิดดู IP และ user/pass ของออเดอร์ตัวเองซ้ำได้ตลอด — ออเดอร์ต่ออายุไม่มีแถว ips ใหม่ (IP เดิมดูจาก action=mine)

พารามิเตอร์บังคับคำอธิบาย
order บังคับ เลขออเดอร์
ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "order_id": 31, "type": "new", "package": 120,
2    "name": "ISP 30 วัน", "shop": "Provider A", "country": "US", "quality": "ordinary",
3    "quantity": 1, "duration_days": 30, "total": "175.00", "currency": "THB",
4    "status": "active", "refunded": false, "fulfilled_at": "2026-08-05 09:02:11",
5    "created_at": "2026-08-05 09:00:00", "ips": [
6    { "ip_id": 9, "ip": "203.0.113.10", "port": 20001, "http_port": 30001,
7      "username": "u9x…", "password": "p9x…", "country": "US", "quality": "ordinary",
8      "label": "", "expire_at": "2026-09-04 09:00:00", "auto_renew": false,
9      "status": "active" } ] }, "request_id": "…" }

mineIP ของฉัน

POST /proxy/api/v3/mine

IP ทั้งหมดที่ถืออยู่พร้อม credential และวันหมดอายุ — เอาค่า ip_id ไปต่ออายุด้วย action=renew

พารามิเตอร์บังคับคำอธิบาย
page ไม่บังคับ หน้าที่ต้องการ
limit ไม่บังคับ จำนวนรายการต่อหน้า สูงสุด 200 (ค่าเริ่มต้น 50)
ตัวอย่างคำตอบ json
1{ "ok": true, "data": { "count": 1, "total": 1, "page": 1, "pages": 1, "ips": [
2    { "ip_id": 9, "ip": "203.0.113.10", "port": 20001, "http_port": 30001,
3      "username": "u9x…", "password": "p9x…", "country": "US", "quality": "ordinary",
4      "label": "งานร้าน A", "expire_at": "2026-09-04 09:00:00", "auto_renew": false,
5      "status": "active", "order_id": 31 } ] }, "request_id": "…" }

รหัสข้อผิดพลาด

รายการนี้สร้างจากค่าคงที่ในโค้ดโดยตรง จึงตรงกับพฤติกรรมจริงเสมอ — VALIDATION_ERROR แนบ error.fields รายฟิลด์ · INSUFFICIENT_FUNDS แนบ charge / balance / short ให้คำนวณยอดเติมได้ทันที

codeHTTPความหมาย
METHOD_NOT_ALLOWED 405 ต้องเรียกด้วยวิธี POST เท่านั้น
INVALID_BODY 400 อ่านเนื้อคำขอไม่ได้ (ต้องเป็น form-urlencoded หรือ JSON)
MISSING_KEY 401 ไม่ได้ส่ง API key มา
INVALID_KEY 401 API key ไม่ถูกต้อง
KEY_REVOKED 401 API key ถูกยกเลิกแล้ว
KEY_EXPIRED 401 API key หมดอายุแล้ว
ACCOUNT_BLOCKED 403 บัญชีถูกระงับการใช้งาน
API_DISABLED 503 ระบบ API ปิดให้บริการชั่วคราว
UNKNOWN_ACTION 404 ไม่รู้จัก action นี้
RATE_LIMITED 429 เรียกถี่เกินกำหนด กรุณารอแล้วลองใหม่
VALIDATION_ERROR 422 ข้อมูลที่ส่งมาไม่ถูกต้อง
SERVICE_NOT_FOUND 404 ไม่พบบริการนี้ หรือบริการถูกปิดไปแล้ว
INSUFFICIENT_FUNDS 402 ยอดเงินในกระเป๋าไม่พอ
DUPLICATE_ORDER 409 รายการนี้เพิ่งถูกสั่งไปแล้ว ระบบไม่ได้สั่งซ้ำให้
ORDER_NOT_FOUND 404 ไม่พบคำสั่งซื้อนี้ในบัญชีของคุณ
TOO_MANY_IDS 400 ส่งเลขคำสั่งซื้อมามากเกินกำหนดต่อหนึ่งคำขอ
NOT_SUPPORTED 400 บริการนี้ไม่รองรับคำสั่งดังกล่าว
ORDER_DISABLED 503 ระบบสั่งซื้อปิดอยู่ชั่วคราว
FEATURE_DISABLED 503 ระบบยกเลิก/ขอเติมยอดยังไม่เปิดใช้งาน
PROVIDER_ERROR 502 ผู้ให้บริการปฏิเสธคำขอ
PROVIDER_UNAVAILABLE 503 ติดต่อผู้ให้บริการไม่ได้ชั่วคราว
INTERNAL 500 ระบบขัดข้อง กรุณาลองใหม่หรือแจ้งแอดมิน

กติกาที่ต้องรู้ก่อนเชื่อมต่อ

  • กันสั่งซ้ำอัตโนมัติ — รายการเหมือนกันทุกอย่างภายใน 60 วินาที ได้ DUPLICATE_ORDER ไม่ถูกตัดเงินซ้ำ
  • สั่งไม่สำเร็จ = คืนเงินอัตโนมัติ — ตัดเงินแล้วผู้ให้บริการปฏิเสธ ระบบคืนเข้ากระเป๋าพร้อมบันทึกประวัติ
  • คีย์มีได้สูงสุด 5 ใบต่อบัญชี — ใช้คีย์คนละใบต่อระบบที่เชื่อมต่อ เวลาหลุดปิดเฉพาะใบนั้นได้
  • ระบบเก็บแค่ลายนิ้วมือของคีย์ — ทำหายกู้คืนไม่ได้ ต้องยกเลิกแล้วสร้างใหม่
  • ทุกคำขอถูกบันทึก ทั้งสำเร็จและถูกปฏิเสธ — ดูย้อนหลังที่หน้า API key ของฉัน