ภาพรวม Partner API
Partner API ให้ระบบของคุณสร้างรายการรับเงิน (pay-in) และจ่ายเงิน (payout) ดูยอดคงเหลือ ถอนเงิน และตรวจสลิปได้โดยตรงจากเซิร์ฟเวอร์ของคุณ
https://api.example.com/v1สิ่งที่ทำได้
หัวข้อที่มีชื่อว่า “สิ่งที่ทำได้”| งาน | Endpoint | หน้า |
|---|---|---|
| รับเงินจากผู้จ่าย | /v1/payins | Pay-ins |
| จ่ายเงินให้ผู้รับ | /v1/payouts | Payouts |
| จัดการบัญชีธนาคารของผู้ใช้ปลายทาง | /v1/payers, /v1/banks | Payers |
| ดูบัญชี ยอดคงเหลือ และสรุปยอด | /v1/account, /v1/reports | บัญชีและรายงาน |
| ถอนยอดคงเหลือออกไปยังบัญชีของคุณ | /v1/withdrawals | การถอนเงิน |
| ตรวจสอบสลิปโอนเงิน | /v1/slips/verify | ตรวจสลิป |
| รับแจ้งผลเมื่อสถานะเปลี่ยน | (เราเรียก URL ของคุณ) | Webhooks |
สภาพแวดล้อมและคีย์
หัวข้อที่มีชื่อว่า “สภาพแวดล้อมและคีย์”ทุกคีย์ใช้ base URL เดียวกัน ความต่างอยู่ที่ประเภทของ API key
| คีย์ | รูปแบบ | ใช้เมื่อ |
|---|---|---|
| Live key | pk_live_ + 24 ตัวอักษร | ใช้งานจริง |
| Test key | pk_test_... | ทดสอบการเชื่อมต่อ ใช้ได้เฉพาะตอนที่บัญชีของคุณเปิดโหมดทดสอบอยู่ ขอได้จากทีมซัพพอร์ต |
- พาร์ทเนอร์ที่มีคีย์รูปแบบเดิม (ตัวอักษร hex 32 ตัว) ใช้คีย์เดิมต่อได้ วิธีเซ็นเหมือนกันทุกอย่าง
- ด้วย test key มีเพียง
POST /v1/slips/verifyที่ตอบผลจำลอง (ดูตรวจสลิป) endpoint อื่นทำงานตามปกติ รายการ pay-in และ payout ที่สร้างจึงเป็นรายการจริง ควรทดสอบด้วยยอดเล็กและบัญชีของคุณเอง - ดูวิธีรับคีย์และ secret ได้ที่เริ่มต้นใช้งาน API
รูปแบบข้อมูล
หัวข้อที่มีชื่อว่า “รูปแบบข้อมูล”- JSON และ UTF-8 ทั้งขาเข้าและขาออก ส่ง header
Content-Type: application/jsonเมื่อมี body - ชื่อฟิลด์เป็น camelCase เช่น
payerId,webhookUrl,createdAt - จำนวนเงินเป็นสตริงทศนิยม เช่น
"150.00"ทศนิยม 2 ตำแหน่ง (USDTใช้ 6 ตำแหน่ง) ตอนส่งก็ต้องส่งเป็นสตริง ห้ามส่งเป็นตัวเลข - สกุลเงินเป็นตัวพิมพ์ใหญ่:
THB,USD,USDT,LAK - เวลาเป็น ISO-8601 แบบ UTC เช่น
2026-01-01T00:00:00.000Zส่วนวันที่ของรายงานเป็นYYYY-MM-DDตามเวลาประเทศไทย (UTC+7) - ID มี prefix บอกชนิด ตามด้วยตัวอักษร hex ตัวเล็ก 32 ตัว ให้เก็บเป็นสตริงทึบ (opaque) ไม่ต้องแยกส่วน
| Prefix | ชนิด |
|---|---|
pin_ | pay-in |
pout_ | payout |
payer_ | payer |
wd_ | withdrawal |
evt_ | webhook event |
- ฟิลด์ที่ไม่มีค่าจะเป็น
null(ไม่ใช่สตริงว่าง) - ฟิลด์หรือ query parameter ที่ API ไม่รู้จักจะถูกปฏิเสธด้วย
400 parameter_unknownจึงควรส่งเฉพาะฟิลด์ที่ระบุในเอกสาร
โครงสร้าง response
หัวข้อที่มีชื่อว่า “โครงสร้าง response”สำเร็จ:
{ "data": { "object": "payin", "id": "pin_3f2b1c0d9e8f4a7b8c6d5e4f3a2b1c0d", "...": "..." }, "requestId": "req_Z3k9QmP2xR7tLw4NbV8cYh1s"}ผิดพลาด:
{ "error": { "type": "invalid_request_error", "code": "payer_not_found", "message": "No such payer.", "param": "payerId" }, "requestId": "req_Z3k9QmP2xR7tLw4NbV8cYh1s"}- ทุก response มี header
X-Request-Idค่าเดียวกับrequestIdให้บันทึกไว้ใน log และแจ้งค่านี้ทุกครั้งที่ติดต่อซัพพอร์ต - ให้เขียนโค้ดตาม
error.codeส่วนerror.messageมีไว้ให้คนอ่านและอาจเปลี่ยนได้ ดูรายการทั้งหมดที่รหัสข้อผิดพลาด - ทุก object มีฟิลด์
objectบอกชนิด เช่น"payin","payout","payer" - response ที่สำเร็จอาจมี
warningsด้วย เป็นคำเตือนที่ไม่เปลี่ยนผลของคำขอ (เช่นpayer_name_differs) ดูรหัสข้อผิดพลาด
การแบ่งหน้า (pagination)
หัวข้อที่มีชื่อว่า “การแบ่งหน้า (pagination)”endpoint ที่คืนรายการ (GET /v1/payins, GET /v1/payouts, GET /v1/payers, GET /v1/payers/{id}/payments) รองรับ
| พารามิเตอร์ | ค่า |
|---|---|
limit | 1-100 ค่าเริ่มต้น 20 |
cursor | ค่า nextCursor จากหน้าก่อนหน้า |
{ "data": [ { "object": "payin", "...": "..." } ], "pagination": { "limit": 20, "hasMore": true, "nextCursor": "eyJvIjoyMH0" }, "requestId": "req_..."}- รายการเรียงจากใหม่ไปเก่า
- ถ้า
hasMoreเป็นtrueให้เรียกซ้ำด้วย query เดิมและเพิ่มcursor=<nextCursor>จนกว่าhasMoreเป็นfalse cursorเป็นค่าทึบ ห้ามสร้างหรือแก้เอง (ค่าที่ไม่ถูกต้องได้400 invalid_cursor)
การเข้าถึงข้อมูล
หัวข้อที่มีชื่อว่า “การเข้าถึงข้อมูล”คุณเห็นได้เฉพาะข้อมูลของบัญชีตัวเอง ID ของบัญชีอื่น หรือ ID ที่รูปแบบผิด จะได้ 404 resource_not_found เสมอ
- การยืนยันตัวตนและการเซ็น request
- เริ่มต้นใช้งาน API
- เอกสารอ้างอิง API ที่รวมทุก endpoint