API Reference v1

คู่มือ API

เอกสารสำหรับตัวแทนจำหน่าย: วิธีเชื่อมต่อ API เพื่อเติม Free Fire และ ROV ด้วยเครดิตที่เติมไว้ล่วงหน้า (เวอร์ชัน v1)

01เริ่มต้น

ภาพรวม

API นี้ใช้สั่งเติมเกมให้ผู้เล่นด้วย Player ID โดยหักจากเครดิตในบัญชีของคุณ เครดิตมีหน่วยเป็นบาท (1 เครดิต = 1 บาท) ขั้นตอนการใช้งานมี 3 ขั้น:

  • ดูรายการและราคาด้วย GET /v1/items
  • สั่งเติมด้วย POST /v1/orders ระบบหักเครดิตทันที
  • อ่านผลจากคำตอบ หรือเช็คต่อด้วย GET /v1/orders/{id} ถ้าเติมไม่สำเร็จ ระบบคืนเครดิตให้เอง

Base URL

ทุกคำขอและคำตอบเป็น JSON (Content-Type: application/json) คำตอบที่สำเร็จมี "ok": true เสมอ

การยืนยันตัวตน

ส่ง API key ของคุณใน header x-api-key ทุกคำขอ key ขึ้นต้นด้วย tg_ สร้างได้เองจากหน้า บัญชีของฉัน หลังเข้าสู่ระบบด้วย LINE

x-api-key: tg_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
เก็บ API key ไว้ฝั่ง server ของคุณเท่านั้น อย่าใส่ในแอปมือถือหรือโค้ดหน้าเว็บ ใครได้ key ไปจะใช้เครดิตของคุณได้ ถ้า key หลุด ให้ออก key ใหม่ทันทีจากหน้าบัญชีของฉัน key เดิมจะใช้ไม่ได้

ลองเรียกดู

ใส่ API key เพื่อเช็คยอดเครดิตหรือดูรายการจากหน้านี้ key ไม่ถูกบันทึก และส่งไปที่ API นี้เท่านั้น

02เส้น API

ยอดเครดิต

GET/v1/balance

คืนชื่อบัญชีและยอดเครดิตคงเหลือ

{
  "ok": true,
  "name": "ร้านของคุณ",
  "credit": 850.5
}

รายการและราคา

GET/v1/items?game=freefire

game เป็น freefire หรือ rov คำตอบมีเฉพาะรายการที่เปิดขายอยู่ และราคาเป็นราคาของบัญชีคุณ ซึ่งคือราคาที่จะถูกหักจากเครดิตจริง

รายการและราคาเปลี่ยนได้ทุกเมื่อ: ผู้ดูแลอาจปิดขายบางรายการ ปรับราคา หรือเกมอาจเพิ่มรายการใหม่ ให้ดึงรายการใหม่เป็นระยะ (เช่น ทุก 10 นาที) และแสดงราคาจากคำตอบนี้ ไม่ควรเขียน item_id หรือราคาตายตัวในโค้ด
{
  "ok": true,
  "game": "freefire",
  "count": 11,
  "items": [
    {
      "item_id": 80,
      "name": "30 Diamond",
      "type": "point",
      "amount": 30,
      "bonus": 3,
      "retail": 10,
      "price": 9.7,
      "image": "https://..."
    }
  ]
}
ฟิลด์ความหมาย
item_idรหัสรายการ ใช้ตอนสั่งเติม
typepoint = เพชร/คูปอง, membership = สมาชิก, item = ไอเทม/พาส
amount / bonusจำนวนที่ได้ และโบนัสที่ได้เพิ่ม
retailราคาเต็มหน้าเว็บเติมเกม หน่วยเป็นบาท ใช้เทียบส่วนต่างหรือตั้งราคาขายของคุณ
priceราคาที่หักจากเครดิตของคุณ หน่วยเป็นบาท (1 เครดิต = 1 บาท) มีทศนิยมได้ 2 ตำแหน่ง

สั่งเติม

POST/v1/orders
ฟิลด์จำเป็นความหมาย
gameใช่freefire หรือ rov
item_idใช่รหัสรายการจาก /v1/items ต้องเป็นรายการที่เปิดขายอยู่
player_idใช่Free Fire: UID ผู้เล่น · ROV: OpenID ของผู้เล่น
refแนะนำเลขอ้างอิงของคุณเอง ไม่เกิน 64 ตัวอักษร ห้ามซ้ำกันในบัญชีของคุณ
{
  "game": "freefire",
  "item_id": 80,
  "player_id": "1911341532",
  "ref": "order-0001"
}

คำตอบ:

{
  "ok": true,
  "order": {
    "id": 1024,
    "ref": "order-0001",
    "game": "freefire",
    "item_id": 80,
    "item_name": "30 Diamond",
    "player_id": "1911341532",
    "price": 9.7,
    "status": "success",
    "created_at": "2026-11-15T03:10:00.000Z",
    "updated_at": "2026-11-15T03:10:04.000Z"
  }
}
ส่ง ref ทุกครั้ง ถ้าส่ง ref เดิมซ้ำ ระบบจะคืนออเดอร์เดิมพร้อม "duplicate": true โดยไม่เติมซ้ำและไม่หักเครดิตซ้ำ ถ้าเน็ตหลุดหรือไม่ได้คำตอบ ให้ส่งคำขอเดิมด้วย ref เดิมได้อย่างปลอดภัย

คำขอนี้รอผลให้สูงสุดราว 25 วินาที ถ้ายังไม่เสร็จ จะได้ status เป็น queued หรือ processing ให้เช็คต่อด้วยเส้นถัดไป แนะนำตั้ง timeout ฝั่งคุณไว้ที่ 40 วินาทีขึ้นไป

เช็คสถานะออเดอร์

GET/v1/orders/{id}
GET/v1/orders?ref=order-0001

ค้นด้วยเลขออเดอร์ของระบบ หรือด้วย ref ของคุณ คำตอบมี order รูปแบบเดียวกับตอนสั่งเติม ถ้าสถานะยังเป็น queued หรือ processing ให้เช็คใหม่ทุก 3 ถึง 5 วินาที

ออเดอร์ล่าสุด

GET/v1/orders?limit=20

คืนออเดอร์ล่าสุดของคุณ เรียงจากใหม่ไปเก่า limit ได้ 1 ถึง 100 (ค่าเริ่มต้น 20)

03อ้างอิง

สถานะออเดอร์

สถานะความหมายเครดิตต้องทำอะไร
queuedรอคิวหักแล้วเช็คสถานะต่อ
processingกำลังเติมหักแล้วเช็คสถานะต่อ
successเติมสำเร็จหักแล้วจบ
failedเติมไม่สำเร็จ ดูเหตุผลใน errorคืนให้แล้วแก้ไขแล้วสั่งใหม่ด้วย ref ใหม่
unknownส่งคำสั่งแล้วแต่ยังยืนยันผลไม่ได้กันไว้อย่าสั่งซ้ำ รอผู้ดูแลตรวจ สถานะจะเปลี่ยนเป็น success หรือ failed

ข้อผิดพลาด

เมื่อคำขอผิดพลาด จะได้ HTTP status ที่ไม่ใช่ 200 พร้อมเนื้อหา:

{
  "ok": false,
  "error": "Not enough credit",
  "code": "insufficient_credit"
}
HTTPcodeความหมาย
400invalid_game / invalid_item / invalid_player / invalid_ref / invalid_jsonข้อมูลที่ส่งมาไม่ถูกต้อง
401unauthorizedไม่มี API key หรือ key ไม่ถูกต้อง
402insufficient_creditเครดิตไม่พอ ติดต่อผู้ดูแลเพื่อเติมเครดิต
403disabledบัญชีถูกปิดใช้งาน
404item_not_found / order_not_founditem_not_found: ไม่มีรายการนี้ หรือรายการปิดขายอยู่ ให้ดึง /v1/items ใหม่ · order_not_found: ไม่พบออเดอร์ในบัญชีของคุณ
429rate_limitedเรียกถี่เกินไป รอสักครู่แล้วลองใหม่
502service_unavailableระบบเติมเกมไม่พร้อมชั่วคราว ลองใหม่ภายหลัง

ออเดอร์ที่สร้างสำเร็จแต่เติมไม่ผ่าน จะได้ HTTP 200 และ status: "failed" โดยมีเหตุผลใน order.error เช่น Player ID ไม่ถูกต้อง หรือ service_unavailable

ข้อจำกัด

  • เรียก API ได้ไม่เกิน 120 ครั้งต่อนาทีต่อบัญชี
  • ระบบเติมทีละออเดอร์ตามคิว ออเดอร์ Free Fire ใช้เวลาราว 30 วินาทีต่อรายการเมื่อมีคิว
  • ตรวจ Player ID ให้ถูกก่อนสั่ง ออเดอร์ที่เติมสำเร็จแล้วยกเลิกหรือคืนเครดิตไม่ได้
  • ราคาที่หักคือราคา ณ ตอนสั่ง ดูได้จาก order.price ในคำตอบ ถ้าราคาเปลี่ยนหลังจากนั้น ออเดอร์เดิมไม่ถูกคิดเพิ่ม
  • เครดิตเติมผ่านผู้ดูแลระบบเท่านั้น ยังไม่มีเส้น API สำหรับเติมเครดิตเอง ดูยอดและประวัติคำสั่งได้ที่หน้าบัญชีของฉัน
  • เรียกผ่าน HTTPS เท่านั้นเมื่อใช้งานจริง

ตัวอย่างโค้ด

ตัวอย่างสั่งเติมแล้วรอผลจนเสร็จ แทน tg_xxx ด้วย API key ของคุณ

curl -X POST "{BASE}/v1/orders" \
  -H "x-api-key: tg_xxx" \
  -H "Content-Type: application/json" \
  -d '{"game":"freefire","item_id":80,"player_id":"1911341532","ref":"order-0001"}'

# เช็คสถานะ
curl "{BASE}/v1/orders?ref=order-0001" -H "x-api-key: tg_xxx"