เอกสาร API

ทุกอย่างที่ต้องรู้เพื่อเชื่อมต่อ SlipXPay: การยืนยันตัวตน endpoint ตรวจสลิป รูปแบบคำตอบ รหัสข้อผิดพลาด และตัวอย่างโค้ด

สมัครเพื่อรับ API key

เริ่มใช้ใน 3 ขั้นตอน

ระบบของคุณส่งสลิปมา SlipXPay ถามธนาคารแล้วตอบกลับทันที

  1. 1. สร้าง API keyที่หน้า API Keys ตั้งชื่อตามระบบที่ใช้ และจำกัด IP ได้
  2. 2. ส่งข้อความ QR หรือรูปสลิปมาที่ /slips/verifyใส่ยอดที่คาดไว้ด้วยถ้าต้องการให้เทียบยอดให้
  3. 3. อ่านผลแล้วตัดสินใจstatus = verified, duplicate = false และ amountMatches = true จึงถือว่าชำระแล้ว
สมัครเพื่อรับ API keyURL หลักhttps://api.slipxpay.com/api/v1
การยืนยันตัวตน
ส่ง API key ของร้านในหัวข้อ X-API-Key ทุกคำขอ สร้างและจัดการคีย์ได้ที่หน้า API Keys ห้ามใส่คีย์ในโค้ดฝั่งเบราว์เซอร์หรือแอปมือถือ
HeaderX-API-Key: sxp_live_...
  • เรียกจากฝั่งเซิร์ฟเวอร์เท่านั้น อย่าฝังคีย์ในเว็บหรือแอปมือถือ
  • สร้างคีย์แยกต่อระบบ จะได้เพิกถอนทีละตัวได้
  • จำกัด IP ที่อนุญาตในหน้า API Keys เพื่อความปลอดภัยเพิ่ม
POST/slips/verify·ตรวจสลิป
ส่งข้อความ QR ที่อ่านได้จากสลิป หรือส่งรูปสลิปให้ระบบอ่าน QR ให้ ระบบตอบผลทันทีพร้อมข้อมูลรายการโอน

ช่องข้อมูล

ช่องชนิดความหมาย
qrstringข้อความ QR จากสลิป (ไม่เกิน 4,096 ตัวอักษร) ส่งอย่างใดอย่างหนึ่งระหว่าง qr กับ image
imagestringรูปสลิปเข้ารหัส base64 (รองรับ data URL) PNG/JPG/WebP ไม่เกิน 5 MB หรือส่งเป็น multipart ในช่อง file
expectedAmountnumberยอดที่คาดว่าจะได้รับเป็นบาท ถ้าใส่ ระบบจะเทียบให้ใน checks.amountMatches
คำขอShell
curl -X POST https://api.slipxpay.com/api/v1/slips/verify \
  -H "X-API-Key: sxp_live_..." \
  -H "Content-Type: application/json" \
  -d '{"qr": "00410006000001010300402209990000000SXP00015102TH9104D3M0", "expectedAmount": 1250}'
คำตอบJSON
{
  "success": true,
  "data": {
    "id": "3f9c2d7e-1a4b-4c8d-9e0f-5b6a7c8d9e0f",
    "status": "verified",
    "duplicate": false,
    "duplicateOf": null,
    "slip": {
      "transactionRef": "009900000000SXP00001",
      "amount": 1250,
      "currency": "THB",
      "transactionAt": "2026-10-08T14:25:41+07:00",
      "sender": {
        "bankCode": "004",
        "bankName": "กสิกรไทย",
        "account": "xxx-x-x1234-x",
        "name": "นาย สมชาย ใจดี"
      },
      "receiver": {
        "bankCode": "006",
        "bankName": "กรุงไทย",
        "account": "xxx-x-x5678-x",
        "name": "ร้านสมหญิง",
        "proxyType": null,
        "proxyId": null
      },
      "ref1": null,
      "ref2": null,
      "ref3": null
    },
    "checks": {
      "expectedAmount": 1250,
      "amountMatches": true
    },
    "creditsCharged": true,
    "qr": "00410006000001010300402209990000000SXP00015102TH9104D3M0",
    "source": {
      "type": "api",
      "apiKeyId": "c4d5e6f7-a8b9-4c0d-9e1f-2a3b4c5d6e7f",
      "apiKeyName": "Web shop"
    },
    "durationMs": 842,
    "checkedAt": "2026-10-08T07:25:43.498Z",
    "balance": 2999
  },
  "meta": {
    "requestId": "5d2e8f1a-9b3c-4d7e-8f6a-1b2c3d4e5f60",
    "timestamp": "2026-10-08T07:25:43.512Z"
  }
}

ค่าทั้งหมดในตัวอย่างเป็นข้อมูลสมมติ

ค่า status

  • verifiedธนาคารยืนยันว่ามีรายการโอนนี้ ข้อมูลอยู่ใน slip
  • not_foundธนาคารไม่พบรายการ ไม่หักเครดิต
  • invalid_qrอ่าน QR จากรูปไม่ได้ ไม่หักเครดิต

ช่องข้อมูลในคำตอบ

ช่องชนิดความหมาย
idstringรหัสการตรวจ ใช้อ้างอิงกับ GET /slips/:id
statusverified | not_found | invalid_qrผลการตรวจ (ดูด้านบน)
duplicatebooleantrue เมื่อสลิปนี้เคยตรวจพบแล้วกับร้านคุณ
duplicateOf{ id, checkedAt } | nullการตรวจครั้งแรกของสลิปซ้ำ
slip.transactionRefstringเลขอ้างอิงรายการจากธนาคาร ไม่ซ้ำกันต่อรายการโอน
slip.amountnumberยอดโอนเป็นบาท
slip.transactionAtISO 8601เวลาที่โอนตามธนาคาร
slip.sender{ bankCode, bankName, account, name }ผู้โอน: รหัสธนาคาร ชื่อธนาคาร เลขบัญชี (ปิดบางหลัก) และชื่อ
slip.receiver{ …, proxyType, proxyId }ผู้รับ เพิ่ม proxyType (เช่น BILLERID) และ proxyId เมื่อเป็นพร้อมเพย์หรือบิล
slip.ref1 … ref3string | nullเลขอ้างอิง 1–3 ของบิล (ถ้ามี)
checks.expectedAmountnumber | nullยอดที่คุณส่งมาเทียบ
checks.amountMatchesboolean | nullยอดโอนตรงกับ expectedAmount หรือไม่ (null เมื่อไม่ได้ส่ง)
creditsChargedbooleanหักเครดิตในคำขอนี้หรือไม่
balancenumberเครดิตคงเหลือหลังคำขอนี้
qrstring | nullข้อความ QR ที่ส่งมา (null เมื่ออ่านไม่ได้)
source{ type, apiKeyId, apiKeyName }ที่มาของการตรวจ: API key ที่เรียก หรือผู้ใช้ที่ตรวจจากแดชบอร์ด
durationMsnumberเวลาที่ใช้ตรวจ (มิลลิวินาที)
checkedAtISO 8601เวลาที่ระบบตรวจ

duplicate เป็น true เมื่อสลิปนี้เคยตรวจพบแล้วกับร้านของคุณ คำตอบมาจากประวัติ ไม่เรียกธนาคารซ้ำ ไม่หักเครดิต และ duplicateOf บอกว่าตรวจครั้งแรกเมื่อไหร่ ใช้ป้องกันลูกค้าส่งสลิปเดิมซ้ำ

checks.amountMatches เป็น true/false หรือ null เมื่อไม่ได้ส่ง expectedAmount

ระบบไม่ผูกบัญชีรับเงินของร้าน ให้ระบบของคุณเทียบ receiver.bankCode, receiver.account (ธนาคารปิดบางหลัก เช่น xxx-x-x5678-x) และ receiver.name กับบัญชีของคุณเอง ก่อนถือว่าชำระแล้ว

GET/slips·ประวัติการตรวจ
ดึงรายการที่เคยตรวจของร้าน รองรับ page, limit (สูงสุด 100), status และช่วงเวลา from/to แบบ ISO 8601
คำขอShell
curl "https://api.slipxpay.com/api/v1/slips?status=verified&page=1&limit=20" \
  -H "X-API-Key: sxp_live_..."
คำตอบJSON
{
  "success": true,
  "data": [
    {
      "id": "b7e2c9d4-3f1a-4e6b-8c5d-2a9f7e1b6c4d",
      "status": "verified",
      "duplicate": true,
      "duplicateOf": {
        "id": "3f9c2d7e-1a4b-4c8d-9e0f-5b6a7c8d9e0f",
        "checkedAt": "2026-10-08T07:25:43.498Z"
      },
      "slip": {
        "transactionRef": "009900000000SXP00001",
        "amount": 1250,
        "currency": "THB",
        "transactionAt": "2026-10-08T14:25:41+07:00",
        "sender": {
          "bankCode": "004",
          "bankName": "กสิกรไทย",
          "account": "xxx-x-x1234-x",
          "name": "นาย สมชาย ใจดี"
        },
        "receiver": {
          "bankCode": "006",
          "bankName": "กรุงไทย",
          "account": "xxx-x-x5678-x",
          "name": "ร้านสมหญิง",
          "proxyType": null,
          "proxyId": null
        },
        "ref1": null,
        "ref2": null,
        "ref3": null
      },
      "checks": {
        "expectedAmount": 1250,
        "amountMatches": true
      },
      "creditsCharged": false,
      "qr": "00410006000001010300402209990000000SXP00015102TH9104D3M0",
      "source": {
        "type": "api",
        "apiKeyId": "c4d5e6f7-a8b9-4c0d-9e1f-2a3b4c5d6e7f",
        "apiKeyName": "Web shop"
      },
      "durationMs": 12,
      "checkedAt": "2026-10-08T07:41:10.030Z"
    },
    {
      "id": "3f9c2d7e-1a4b-4c8d-9e0f-5b6a7c8d9e0f",
      "status": "verified",
      "duplicate": false,
      "duplicateOf": null,
      "slip": {
        "transactionRef": "009900000000SXP00001",
        "amount": 1250,
        "currency": "THB",
        "transactionAt": "2026-10-08T14:25:41+07:00",
        "sender": {
          "bankCode": "004",
          "bankName": "กสิกรไทย",
          "account": "xxx-x-x1234-x",
          "name": "นาย สมชาย ใจดี"
        },
        "receiver": {
          "bankCode": "006",
          "bankName": "กรุงไทย",
          "account": "xxx-x-x5678-x",
          "name": "ร้านสมหญิง",
          "proxyType": null,
          "proxyId": null
        },
        "ref1": null,
        "ref2": null,
        "ref3": null
      },
      "checks": {
        "expectedAmount": 1250,
        "amountMatches": true
      },
      "creditsCharged": true,
      "qr": "00410006000001010300402209990000000SXP00015102TH9104D3M0",
      "source": {
        "type": "api",
        "apiKeyId": "c4d5e6f7-a8b9-4c0d-9e1f-2a3b4c5d6e7f",
        "apiKeyName": "Web shop"
      },
      "durationMs": 842,
      "checkedAt": "2026-10-08T07:25:43.498Z"
    }
  ],
  "meta": {
    "requestId": "5d2e8f1a-9b3c-4d7e-8f6a-1b2c3d4e5f60",
    "timestamp": "2026-10-08T07:25:43.512Z",
    "page": 1,
    "limit": 20,
    "total": 2
  }
}

กรองด้วย status, from, to (ISO 8601) และแบ่งหน้าด้วย page, limit (สูงสุด 100) ผลลัพธ์เรียงจากใหม่ไปเก่า ข้อมูลใน meta บอก page, limit และ total

GET/banks·รหัสธนาคาร
bankCode ใน sender และ receiver เป็นรหัส 3 หลักตามมาตรฐานธนาคารแห่งประเทศไทย ดึงรายชื่อพร้อมสี และโลโก้ได้จาก GET /banks ด้วย API key เดียวกัน
คำขอShell
curl https://api.slipxpay.com/api/v1/banks -H "X-API-Key: sxp_live_..."
คำตอบJSON
{
  "success": true,
  "data": [
    {
      "code": "004",
      "nameTh": "ธนาคารกสิกรไทย จำกัด (มหาชน)",
      "nameEn": "Kasikornbank Public Company Limited",
      "shortTh": "กสิกรไทย",
      "shortEn": "KBank",
      "color": "#138f2d",
      "group": "thai",
      "logoUrl": "https://<dashboard>/banks/004.png",
      "logoKind": "mark",
      "formerlyTh": null,
      "formerlyEn": null
    },
    {
      "code": "006",
      "nameTh": "ธนาคารกรุงไทย จำกัด (มหาชน)",
      "nameEn": "Krungthai Bank Public Company Limited",
      "shortTh": "กรุงไทย",
      "shortEn": "Krungthai",
      "color": "#1ba5e1",
      "group": "thai",
      "logoUrl": "https://<dashboard>/banks/006.png",
      "logoKind": "mark",
      "formerlyTh": null,
      "formerlyEn": null
    }
  ],
  "meta": {
    "requestId": "5d2e8f1a-9b3c-4d7e-8f6a-1b2c3d4e5f60",
    "timestamp": "2026-10-08T07:25:43.512Z"
  }
}

35 ธนาคาร · อัปเดตตามรายชื่อธนาคารสมาชิกระบบโอนเงิน ต.ค. 2569

ธนาคารพาณิชย์ไทย13

  • กรุงเทพธนาคารกรุงเทพ จำกัด (มหาชน)002
  • กสิกรไทยธนาคารกสิกรไทย จำกัด (มหาชน)004
  • กรุงไทยธนาคารกรุงไทย จำกัด (มหาชน)006
  • ทีเอ็มบีธนชาตธนาคารทหารไทยธนชาต จำกัด (มหาชน)ธนาคารทหารไทย (TMB) รวมกับธนาคารธนชาต ปี 2564011
  • ไทยพาณิชย์ธนาคารไทยพาณิชย์ จำกัด (มหาชน)014
  • ซีไอเอ็มบี ไทยธนาคารซีไอเอ็มบี ไทย จำกัด (มหาชน)022
  • ยูโอบีธนาคารยูโอบี จำกัด (มหาชน)024
  • กรุงศรีอยุธยาธนาคารกรุงศรีอยุธยา จำกัด (มหาชน)025
  • ทิสโก้ธนาคารทิสโก้ จำกัด (มหาชน)067
  • เกียรตินาคินภัทรธนาคารเกียรตินาคินภัทร จำกัด (มหาชน)เดิมชื่อธนาคารเกียรตินาคิน เปลี่ยนชื่อและโลโก้ ปี 2563069
  • ไอซีบีซี (ไทย)ธนาคารไอซีบีซี (ไทย) จำกัด (มหาชน)070
  • ไทยเครดิตธนาคารไทยเครดิต จำกัด (มหาชน)เดิมชื่อธนาคารไทยเครดิต เพื่อรายย่อย ยกระดับเป็นธนาคารพาณิชย์เต็มรูปแบบ ปี 2567071
  • แลนด์ แอนด์ เฮ้าส์ธนาคารแลนด์ แอนด์ เฮ้าส์ จำกัด (มหาชน)073

ธนาคารของรัฐ6

  • ออมสินธนาคารออมสิน030
  • อาคารสงเคราะห์ธนาคารอาคารสงเคราะห์033
  • ธ.ก.ส.ธนาคารเพื่อการเกษตรและสหกรณ์การเกษตร034
  • EXIMเอ็กซิมแบงก์ธนาคารเพื่อการส่งออกและนำเข้าแห่งประเทศไทย035
  • อิสลามแห่งประเทศไทยธนาคารอิสลามแห่งประเทศไทย066
  • SMEเอสเอ็มอีแบงก์ธนาคารพัฒนาวิสาหกิจขนาดกลางและขนาดย่อมแห่งประเทศไทย098

ธนาคารพาณิชย์ไร้สาขา1

  • คลิกซ์ธนาคารคลิกซ์ จำกัด (มหาชน)ธนาคารพาณิชย์ไร้สาขารายแรกของไทย (กรุงไทย AIS OR) เปิดให้บริการ 27 พ.ค. 2569088

สาขาธนาคารต่างประเทศ15

  • เจพีมอร์แกน เชสธนาคารเจพีมอร์แกน เชส สาขากรุงเทพฯ008
  • OCBCโอซีบีซีธนาคารโอเวอร์ซี-ไชนีสแบงกิ้งคอร์ปอเรชั่น จำกัด009
  • ซิตี้แบงก์ธนาคารซิตี้แบงก์ เอ็น.เอ. สาขากรุงเทพฯโอนธุรกิจลูกค้ารายย่อยให้ธนาคารยูโอบี ปี 2565017
  • ซูมิโตโม มิตซุยธนาคารซูมิโตโม มิตซุย แบงกิ้ง คอร์ปอเรชั่น018
  • สแตนดาร์ดชาร์เตอร์ดธนาคารสแตนดาร์ดชาร์เตอร์ด (ไทย) จำกัด (มหาชน)020
  • RHBอาร์ เอช บีธนาคารอาร์ เอช บี จำกัด023
  • เมกะ สากลพาณิชย์ธนาคารเมกะ สากลพาณิชย์ จำกัด (มหาชน)026
  • แห่งอเมริกาธนาคารแห่งอเมริกา เนชั่นแนล แอสโซซิเอชั่น027
  • IOBอินเดียนโอเวอร์ซีส์ธนาคารอินเดียนโอเวอร์ซีส์029
  • เอชเอสบีซีธนาคารฮ่องกงและเซี่ยงไฮ้ แบงกิ้งคอร์ปอเรชั่น จำกัด สาขากรุงเทพฯ031
  • ดอยซ์แบงก์ธนาคารดอยซ์แบงก์ สาขากรุงเทพฯ032
  • มิซูโฮธนาคารมิซูโฮ จำกัด สาขากรุงเทพฯ039
  • บีเอ็นพี พารีบาส์ธนาคารบีเอ็นพี พารีบาส์ สาขากรุงเทพฯ045
  • BOCแห่งประเทศจีน (ไทย)ธนาคารแห่งประเทศจีน (ไทย) จำกัด (มหาชน)052
  • SMTBซูมิโตโม มิตซุย ทรัสต์ธนาคารซูมิโตโม มิตซุย ทรัสต์ (ไทย) จำกัด (มหาชน)080
GET/credits·การคิดเครดิต
หัก 1 เครดิตเฉพาะเมื่อ status เป็น verified และไม่ใช่สลิปซ้ำ รายการที่ไม่พบ อ่าน QR ไม่ได้ ธนาคารไม่ตอบ และสลิปซ้ำไม่หักเครดิต เช็กยอดคงเหลือได้ที่ GET /credits
คำขอShell
curl https://api.slipxpay.com/api/v1/credits -H "X-API-Key: sxp_live_..."
คำตอบJSON
{
  "success": true,
  "data": {
    "balance": 2999,
    "nextExpiry": "2026-11-07T07:10:00.000Z"
  },
  "meta": {
    "requestId": "5d2e8f1a-9b3c-4d7e-8f6a-1b2c3d4e5f60",
    "timestamp": "2026-10-08T07:25:43.512Z"
  }
}
  • หัก 1 เครดิตเมื่อ status เป็น verified และไม่ใช่สลิปซ้ำ
  • ไม่พบรายการ อ่าน QR ไม่ได้ หรือธนาคารไม่ตอบ ไม่หักเครดิต
  • สลิปซ้ำตอบจากประวัติ ไม่หักเครดิตและไม่เรียกธนาคาร
ข้อผิดพลาด
ทุกคำตอบอยู่ในรูป { success, data | error, meta } เมื่อผิดพลาด error.code บอกสาเหตุ
HTTPรหัสความหมาย
401INVALID_API_KEYคีย์ไม่ถูกต้อง ถูกยกเลิก หรือหมดอายุ
403IP_NOT_ALLOWEDเรียกจาก IP ที่คีย์ไม่อนุญาต
403ORGANIZATION_SUSPENDEDร้านถูกระงับการใช้งาน
402INSUFFICIENT_CREDITSเครดิตไม่พอ ซื้อเพิ่มที่หน้าเครดิต
503VERIFICATION_UNAVAILABLEระบบธนาคารไม่ตอบ ลองใหม่ภายหลัง ไม่หักเครดิต
400VALIDATION_FAILEDข้อมูลในคำขอไม่ถูกต้อง ดู error.details
413PAYLOAD_TOO_LARGEรูปหรือคำขอใหญ่เกิน 8 MB (รูปสลิปไม่เกิน 5 MB)
429RATE_LIMITEDเรียกถี่เกิน 60 ครั้งต่อนาทีต่อคีย์
ตัวอย่างคำตอบเมื่อผิดพลาดJSON
{
  "success": false,
  "error": {
    "code": "INSUFFICIENT_CREDITS",
    "message": "The shop has no credits left"
  },
  "meta": {
    "requestId": "5d2e8f1a-9b3c-4d7e-8f6a-1b2c3d4e5f60",
    "timestamp": "2026-10-08T07:25:43.512Z"
  }
}