API v1

เอกสารประกอบ API

คู่มือเชื่อมต่อแบบ Server-to-server สำหรับดึงบริการ สร้างคำสั่งซื้อ ตรวจสถานะ และตรวจยอดคงเหลือ โดยข้อมูลด้านล่างอ้างอิงจาก Controller และ Model ที่ใช้งานจริงใน Source ชุดนี้

Endpoint
https://loveliketh.com/api/v1
Method
POST
Request
Form URL encoded หรือ JSON
Response
application/json; UTF-8
Rate limit
120 requests / 60 seconds
Version
Header: X-API-Version: 1
01

Quick start

เรียกจาก Backend เท่านั้น

อย่าฝัง API key ใน JavaScript ฝั่ง Browser, Mobile app หรือ Repository สาธารณะ ระบบไม่ได้เปิด CORS สำหรับการนำ Secret ไปใช้ใน Frontend

curl --request POST 'https://loveliketh.com/api/v1' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'key=YOUR_API_KEY' \
  --data-urlencode 'action=services'
02

Authentication และ Request format

ส่ง key และ action ใน Request body ทุกครั้ง ระบบไม่อ่านค่าจาก Cookie และไม่รับ GET เพื่อป้องกัน API key ปรากฏใน URL, Browser history และ Access log

API key

สร้างหรือ Regenerate ได้จากหน้า Profile การ Regenerate จะทำให้ Key เดิมใช้ไม่ได้ทันที และบัญชี/API ต้องอยู่ในสถานะ Active

Request ID

ทุก Response มี Header X-Request-ID ใช้อ้างอิงเมื่อแจ้งปัญหาโดยไม่ต้องส่ง API key

Rate limit

ตรวจ Header X-RateLimit-Limit, X-RateLimit-Remaining และ X-RateLimit-Reset

Idempotency

คำสั่ง add รองรับ Header Idempotency-Key หรือพารามิเตอร์ idempotency_key

03

Services list

POST

คืนเฉพาะ Service และ Category ที่ Active พร้อมราคาสำหรับระดับสมาชิกของเจ้าของ API key

ค่า refill และ cancel บอกคุณสมบัติของ Service/Order แต่ Source ชุดนี้ยังไม่มี Client API action สำหรับ Refill หรือ Cancel ที่ใช้งานได้จริง

ParameterRequiredValue
keyYesYOUR_API_KEY
actionYesservices

ตัวอย่าง Response

[
  {
    "service": "5",
    "name": "Instagram Followers",
    "category": "Instagram",
    "rate": "1.02",
    "min": "100",
    "max": "10000",
    "type": "default",
    "desc": "usernames",
    "dripfeed": "1",
    "refill": "1",
    "cancel": "0"
  }
]
04

Add order

POST

ตรวจค่า type จาก Services response แล้วส่งพารามิเตอร์ตามชนิดบริการ ระบบตรวจ Category/Service Active, Min/Max, Duplicate link, Balance และบันทึก Order กับการหัก Balance ใน Transaction เดียวกัน

พารามิเตอร์ร่วม

ParameterTypeRequiredDescription
keystringrequiredAPI key จากหน้า Profile
actionstringrequiredค่าเป็น add
serviceintegerrequiredService ID จาก action=services
linkstringrequired*ลิงก์เป้าหมาย; ไม่ใช้กับ subscriptions
idempotency_keystringrecommendedคีย์ 8-64 ตัว ป้องกันการสร้าง Order ซ้ำเมื่อ Retry

Default

บริการทั่วไปที่ใช้จำนวน (quantity)

ParameterTypeRequiredDescription
quantityintegerrequiredจำนวนต่อคำสั่งซื้อ
runsintegeroptionalจำนวนรอบ Drip-feed; ใช้เฉพาะบริการที่รองรับ
intervalintegeroptionalช่วงห่างแต่ละรอบเป็นนาที 1-1440

ตัวอย่างสร้าง Order

curl --request POST 'https://loveliketh.com/api/v1' \
  --header 'Content-Type: application/json' \
  --header 'Idempotency-Key: checkout-order-20260804-001' \
  --data '{
    "key": "YOUR_API_KEY",
    "action": "add",
    "service": 5,
    "link": "https://example.com/post/123",
    "quantity": 1000
  }'
{
  "status": "success",
  "order": 12345
}
05

Order status

POST

หนึ่ง Order

keyYOUR_API_KEY
actionstatus
orderOrder ID

หลาย Order

keyYOUR_API_KEY
actionstatus
ordersคั่นด้วย comma สูงสุด 100 ID

ตัวอย่าง Response

{
  "order": 12345,
  "status": "Processing",
  "charge": "0.0360",
  "start_count": "0",
  "remains": "500",
  "currency": "THB"
}
06

Balance

POST
keyYOUR_API_KEY
actionbalance
{
  "status": "success",
  "balance": "100.50",
  "currency": "THB"
}
07

Errors และ HTTP status

Error response มี error, code และ request_id เสมอ ควรตรวจ HTTP status ก่อนอ่านข้อมูล

{
  "error": "Not enough funds on balance",
  "code": "insufficient_balance",
  "request_id": "9f2a4e8d1c6b7a30"
}
HTTPCodeMeaning
400invalid_requestพารามิเตอร์ขาดหรือรูปแบบไม่ถูกต้อง
401invalid_api_keyAPI key ไม่ถูกต้อง ถูกปิด หรือบัญชีไม่ Active
403ip_blacklisted / link_blacklistedIP หรือลิงก์ถูกบล็อกตามนโยบายของระบบ
404service_not_found / order_not_foundไม่พบ Service หรือ Order ของบัญชีนี้
405method_not_allowedEndpoint รับเฉพาะ POST
409duplicate_order / idempotency_conflictคำขอซ้ำหรือใช้ Idempotency key ต่างพารามิเตอร์
422validation / insufficient_balanceข้อมูลผ่านรูปแบบพื้นฐานแต่ดำเนินการไม่ได้
429rate_limit_exceededเกินจำนวนคำขอในช่วงเวลาที่กำหนด
500transaction_failedระบบไม่สามารถบันทึก Order ได้ครบ Transaction
501refill_not_availableฟังก์ชัน Refill API ยังไม่มี Module รองรับใน Source นี้
Refill API

Source ชุดนี้ไม่มี refill_model ที่ Controller เดิมอ้างถึง จึงเปลี่ยนให้ refill และ refill_status ตอบ HTTP 501 แทน Fatal error จนกว่าจะมี Module ที่รองรับจริง

08

Security และแนวทางใช้งานจริง

  • เก็บ API key ใน Environment variable หรือ Secret manager
  • กำหนด Timeout และ Retry เฉพาะ Error ชั่วคราว โดยใช้ Idempotency key กับ action=add
  • อย่า Retry เมื่อได้ 400, 401, 404 หรือ 422 จนกว่าจะแก้ข้อมูล
  • เมื่อได้ 429 ให้รอตาม Header Retry-After
  • หากเว็บไซต์อยู่หลัง Reverse proxy หรือ CDN ต้องกำหนด proxy_ips ให้ถูกต้อง เพื่อให้ Rate limit และ Audit log ใช้ IP ต้นทางที่เชื่อถือได้
  • Log เฉพาะ Request ID, Action และ Order ID; ห้าม Log API key
  • ระบบนี้ไม่มี Sandbox แยก ควรทดสอบด้วย Service และจำนวนต่ำสุดที่ยอมรับได้