คำถามที่พบบ่อยเกี่ยวกับ API ขั้นสูง

อัปเดตล่าสุด: 25 พฤศจิกายน 2568

การใช้ REST API funding endpoints ลูกค้าสามารถฝาก/ถอนเงินเข้า/ออกจากบัญชี Kraken ของตน และสามารถขอสถานะธุรกรรมการฝาก/ถอนได้แบบเรียลไทม์

การฝาก/ถอนจะผ่านหลายขั้นตอนระหว่างการร้องขอเริ่มต้นจนถึงการทำธุรกรรมเสร็จสมบูรณ์ ดังนั้น funding endpoints จะส่งคืนค่าสถานะที่แตกต่างกันขึ้นอยู่กับเวลาที่เรียกใช้

โปรดทราบว่าค่าสถานะเดิมมาจากหน้า 16/17 ของเอกสาร Internet Financial Exchange Protocol (IFEX) แต่ค่าเหล่านี้ได้รับการแก้ไขเล็กน้อยเพื่อให้เหมาะสมกับธุรกรรมคริปโตมากขึ้น (เช่น ไม่ได้ใช้ค่าสถานะที่เป็นไปได้ทั้งหมด)

การฝาก

ค่าสถานะที่เป็นไปได้สำหรับธุรกรรมการฝากมีดังนี้:

  • Settled = การฝากได้รับแล้ว แต่ยังต้องการการยืนยันเพิ่มเติมบน blockchain

  • Success = การฝากได้รับการยืนยันตามจำนวนที่ต้องการบน blockchain แล้ว

  • Failure = การฝากล้มเหลว (ด้วยเหตุผลหลายประการ)

ต่อไปนี้คือตัวอย่างบางส่วนของค่าสถานะข้างต้นที่จะปรากฏในการตอบกลับจาก DepositStatus endpoint:

สถานะ Settled:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"QSB7IFM-Q3LT3X-NVAOKE","txid":"92c908ea2ea819d678d67130e4d20b625a8f97f3cfff45f906dde8cef41a046a","info":"D7SLwMBPqfFMCZ8EJDMoVEePpZAFFegLt8","amount":"997.00000000","fee":"0.00000000","time":1611308478,"status":"Settled"}]}

สถานะ Success:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"QSB7IFM-Q3LT3X-NVAOKE","txid":"92c908ea2ea819d678d67130e4d20b625a8f97f3cfff45f906tdde8cef41a046a","info":"D7SLwMBPqfFMCZ8EJDMoVEePpZAFFegLt8","amount":"997.00000000","fee":"0.00000000","time":1611308478,"status":"Success"}]}

การถอน

ค่าสถานะที่เป็นไปได้สำหรับธุรกรรมการถอนมีดังนี้:

  • Initial = ได้รับคำขอถอนแล้วและกำลังตรวจสอบความถูกต้อง (ข้อจำกัดการระดมทุนในบัญชี ฯลฯ)

  • Pending = การถอนกำลังรอการดำเนินการโดย funding gateway ของเรา

  • Settled = การถอนถูกส่งไปยัง blockchain แล้ว (ณ จุดนี้ blockchain transaction ID จะพร้อมใช้งาน)

  • Success = ธุรกรรมการถอนมีการยืนยันอย่างน้อย 1 รายการบน blockchain

  • On hold = การถอนถูกระงับและต้องได้รับการตรวจสอบด้วยตนเองโดยทีม funding ของเรา

  • Failure = การถอนล้มเหลว (ด้วยเหตุผลหลายประการ)

ต่อไปนี้คือตัวอย่างบางส่วนของค่าสถานะข้างต้นที่จะปรากฏในการตอบกลับจาก WithdrawStatus endpoint:

สถานะ Initial:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"ASBCMYC-F5ETQT-34NMWT","txid":null,"info":"DGNBPsa2GhhtZGEZo79uF3WN2bTxFxmc9y","amount":"98.00000000","fee":"2.00000000","time":1612782924,"status":"Initial"}]}

สถานะ Pending:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"ASBCMYC-F5ETQT-34NMWT","txid":null,"info":"DGNBPsa2GhhtZGEZo79uF3WN2bTxFxmc9y","amount":"98.00000000","fee":"2.00000000","time":1612782924,"status":"Pending"}]}

สถานะ Settled:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"ASBCMYC-F5ETQT-34NMWT","txid":"064536e901f2cbfa6e279aa7a87c700b64e0ce561bf6e266788c47496f75106c","info":"DGNBPsa2GhhtZGEZo79uF3WN2bTxFxmc9y","amount":"98.00000000","fee":"2.00000000","time":1612782924,"status":"Settled"}]}

สถานะ Success:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"ASBCMYC-F5ETQT-34NMWT","txid":"064536e901f2cbfa6e279aa7a87c700b64e0ce561bf6e266788c47496f75106c","info":"DGNBPsa2GhhtZGEZo79uF3WN2bTxFxmc9y","amount":"98.00000000","fee":"2.00000000","time":1612782924,"status":"Success"}]}

สถานะ Failure:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"ASBCMYC-F5ETQT-34NMWT","txid":null,"info":"DGNBPsa2GhhtZGEZo79uF3WN2bTxFxmc9y","amount":"98.00000000","fee":"2.00000000","time":1612782924,"status":"Failure","status-prop":"canceled"}]}

ข้อมูลเพิ่มเติมเกี่ยวกับการฝาก/ถอนมีอยู่ในหน้าสนับสนุน การระดมทุนด้วยเงินสด และ การระดมทุนด้วยคริปโตเคอร์เรนซี ของเรา

REST API OHLC endpoint ให้ข้อมูลย้อนหลังในปริมาณที่จำกัด โดยเฉพาะ 720 จุดข้อมูลของช่วงเวลาที่ร้องขอ ตัวอย่างเช่น การขอข้อมูล OHLC ในช่วงเวลา 1 นาทีจะส่งคืนข้อมูลล่าสุด 720 นาที (12 ชั่วโมง)

สำหรับแอปพลิเคชันที่ต้องการข้อมูล OHLC หรือ tick เพิ่มเติม สามารถดึงประวัติการซื้อขายทั้งหมดของตลาดของเรา (ประวัติเวลาและการขาย) ผ่าน REST API Trades endpoint จากนั้นสามารถสร้าง OHLC สำหรับกรอบเวลาและช่วงเวลาใดก็ได้จากข้อมูลประวัติเวลาและการขาย

Trades endpoint ใช้พารามิเตอร์เสริมชื่อ since ซึ่งระบุวันที่/เวลาเริ่มต้นของข้อมูล ค่า since คือ UNIX timestamp ที่มีความละเอียดระดับนาโนวินาที (UNIX timestamp มาตรฐานในหน่วยวินาทีพร้อมตัวเลขเพิ่มเติม 9 หลัก)

ตัวอย่างเช่น การเรียก Trades endpoint เช่น https://api.kraken.com/0/public/Trades?pair=xbtusd&since=1559347200000000000 จะส่งคืนประวัติเวลาและการขายสำหรับ XBT/USD ตั้งแต่วันที่ 1 มิถุนายน 2019 เวลา 00:00:00 UTC:

{"error":[],"result":{"XXBTZUSD":[["8552.90000","0.03190270",1559347203.7998,"s","m",""],["8552.90000","0.03155529",1559347203.8086,"s","m",""],["8552.90000","0.00510797",1559347203.9664,"s","m",""],["8552.90000","0.09047336",1559347203.9789,"s","m",""],["8552.90000","0.00328738",1559347203.9847,"s","m",""],["8552.90000","0.00492152",1559347203.9897,"s","m",""],["8552.90000","0.00201848",1559347203.9937,"s","m",""],["8552.90000","0.11422068",1559347203.9993,"s","m",""],["8552.90000","0.00425858",1559347204.071,"s","m",""],["8552.90000","0.00427679",1559347204.0762,"s","m",""],["8552.90000","0.06381401",1559347204.1662,"s","m",""]
...
["8579.50000","0.05379597",1559350785.248,"s","l",""],["8579.50000","0.94620403",1559350785.2936,"s","l",""],["8578.10000","0.45529068",1559350785.297,"s","l",""]],"last":"1559350785297011117"}}

การเรียก Trades endpoint ครั้งต่อไปควรกำหนดค่าพารามิเตอร์ since ด้วยค่าพารามิเตอร์ last จากผลลัพธ์ของการเรียกครั้งก่อนหน้า เช่น https://api.kraken.com/0/public/Trades?pair=xbtusd&since=1559350785297011117

การใช้ค่า since พิเศษเป็น 0 (ศูนย์) จะส่งคืนประวัติเวลาและการขายตั้งแต่เริ่มต้นตลาด (เริ่มจากการซื้อขายครั้งแรกสุด)

user reference คือ client provided order ID ที่สามารถใช้แทน order ID จริง (ที่ API ให้มา) สำหรับงานจัดการคำสั่งซื้อบางอย่าง (โดยเฉพาะการยกเลิกคำสั่งซื้อ)

user reference ถูกนำมาใช้เพื่อให้มีความยืดหยุ่นมากที่สุด และสามารถนำไปใช้ได้หลายวิธี รวมถึง:

  • เป็น ID ที่ไม่ซ้ำกัน (โดยที่แต่ละคำสั่งซื้อมี user reference ที่แตกต่างกัน)

  • เพื่อจัดกลุ่มคำสั่งซื้อที่เกี่ยวข้องเข้าด้วยกัน (เช่น การจัดกลุ่มคำสั่งซื้อที่มีระดับ leverage ที่แตกต่างกัน)

  • หรือเป็น backup ID ในกรณีที่ไม่ทราบ order ID จริง

user reference ต้องเป็นค่าตัวเลขระหว่าง 1 ถึง 2,147,483,647 (โดยพื้นฐานแล้วคือจำนวนบวก 32 บิตใดๆ) และสามารถนำไปใช้เป็นตัวนับง่ายๆ เป็นค่า 32 บิตแบบสุ่ม หรือแม้แต่เป็น timestamp ในหน่วยวินาที (แม้ว่าวิธีนี้จะล้มเหลวหลังจากวันที่ 19 มกราคม 2038 เวลา 3:14:07 UTC)

การวางคำสั่งซื้อด้วย user reference

สามารถวางคำสั่งซื้อพร้อม user reference ได้โดยการเรียก AddOrder endpoint และรวมพารามิเตอร์ userref พร้อม user reference เป็นค่า:

$ ./krakenapi AddOrder pair=xdgusd type=buy ordertype=limit price=0.1 volume=50 userref=27649653

{"error":[],"result":{"descr":{"order":"buy 50.00000000 XDGUSD @ limit 0.1000000"},"txid":["OQJSXE-F5FOM-IXHVL4"]}}

การดูคำสั่งซื้อที่มี user reference

คำสั่งซื้อที่มี user reference อยู่แล้วสามารถดูได้โดยการเรียก Open/Closed/QueryOrders endpoints และรวมพารามิเตอร์ userref พร้อม user reference ที่มีอยู่เป็นค่า (ในกรณีนี้ user reference ทำหน้าที่เป็นตัวกรอง โดยแสดงเฉพาะคำสั่งซื้อที่เกี่ยวข้อง):

$ ./krakenapi OpenOrders userref=27649653

{"error":[],"result":{"open":{"OQJSXE-F5FOM-IXHVL4":{"refid":null,"userref":27649653,"status":"open","opentm":1629618802.9812,"starttm":0,"expiretm":0,"descr":{"pair":"XDGUSD","type":"buy","ordertype":"limit","price":"0.1000000","price2":"0","leverage":"none","order":"buy 50.00000000 XDGUSD @ limit 0.1000000","close":""},"vol":"50.00000000","vol_exec":"0.00000000","cost":"0.000000000","fee":"0.000000000","price":"0.000000000","stopprice":"0.000000000","limitprice":"0.000000000","misc":"","oflags":"fciq"}}}}

$ ./krakenapi ClosedOrders userref=38695724

{"error":[],"result":{"closed":{"O7YEFN-3V4RK-FBNSNM":{"refid":null,"userref":38695724,"status":"canceled","reason":"User requested","opentm":1629619539.3593,"closetm":1629619542.2246,"starttm":0,"expiretm":0,"descr":{"pair":"XBTUSD","type":"buy","ordertype":"limit","price":"25000.0","price2":"0","leverage":"none","order":"buy 0.00010000 XBTUSD @ limit 25000.0","close":""},"vol":"0.00010000","vol_exec":"0.00000000","cost":"0.00000","fee":"0.00000","price":"0.00000","stopprice":"0.00000","limitprice":"0.00000","misc":"","oflags":"fciq"}},"count":1}}

การยกเลิกคำสั่งซื้อที่มี user reference

คำสั่งซื้อที่มี user reference อยู่แล้วสามารถยกเลิกได้โดยใช้ user reference โดยการเรียก CancelOrder endpoint และใช้ user reference เป็นค่า txid (แทนค่า order ID):

$ ./krakenapi CancelOrder txid=16764529

{"error":[],"result":{"count":1}}

โปรดทราบว่าคำสั่งซื้อที่เปิดอยู่ทั้งหมดที่มี user reference เดียวกันจะถูกยกเลิก ดังนั้นจึงสามารถเรียก CancelOrder เพียงครั้งเดียวเพื่อยกเลิกคำสั่งซื้อหลายรายการพร้อมกันได้ (ตามที่ระบุโดยค่า count เป็น 3 ในการตอบกลับต่อไปนี้):

$ ./krakenapi CancelOrder txid=48695624

{"error":[],"result":{"count":3}}

ปัญหานี้อาจเกี่ยวข้องกับ Cloudflare:

https://support.cloudflare.com/hc/en-us/articles/200169226-Why-am-I-getting-a-403-error-

หมายเหตุ: Kraken ได้เปิดใช้งาน "Browser Integrity Check"

สิ่งนี้อาจเกิดขึ้นหากคำขอของคุณมีส่วนหัวที่น่าสงสัย ตัวอย่างเช่น คำขอของคุณอาจไม่มี user agent หรือใช้ user agent ที่ไม่เป็นไปตามมาตรฐาน ดังนั้นโปรดตรวจสอบส่วนหัวของคำขอของคุณ

หากคุณไม่สามารถสร้างคำขอมาตรฐานใดๆ ที่ระบบของเราอนุญาตได้ โปรดส่งสำเนาคำขอทั้งหมดที่คุณกำลังพยายาม รวมถึงที่อยู่ IP และส่วนหัวทั้งหมด ข้อมูลนี้จะช่วยให้เราสามารถตรวจสอบเพิ่มเติมได้

Futures API

สำหรับ Futures REST และ WebSocket APIs (futures.kraken.com) เรามีสภาพแวดล้อมการทดสอบเต็มรูปแบบโดยใช้ API URL demo-futures.kraken.com

สภาพแวดล้อมการทดสอบ REST, WebSocket และ FIX

สำหรับ REST/WebSocket API และ FIX API แบบ Spot ของเรา เรามีสภาพแวดล้อมการทดสอบสำหรับลูกค้าที่มีคุณสมบัติเหมาะสม การเข้าถึงสภาพแวดล้อมนี้ต้องผ่านกระบวนการเริ่มต้นใช้งาน ซึ่งสามารถเริ่มต้นได้โดย ติดต่อทีม API โดยตรง

การทดสอบ API ของเราโดยใช้พารามิเตอร์การทดสอบ Validate

เมื่อส่งคำสั่งซื้อผ่าน REST API AddOrder หรือ WebSocket API addOrder endpoint พารามิเตอร์อินพุต validate สามารถใช้เพื่อจำลองคำสั่งซื้อได้

การเรียก AddOrder/addOrder โดยตั้งค่าพารามิเตอร์ validate เป็น true (validate=1, validate=true, validate=anything, เป็นต้น) จะทำให้รายละเอียดคำสั่งซื้อถูกตรวจสอบข้อผิดพลาด แต่การตอบกลับของ API จะไม่มี order ID (ซึ่งจะถูกส่งคืนเสมอสำหรับคำสั่งซื้อที่สำเร็จโดยไม่มีพารามิเตอร์ validate)

ตัวอย่างการเรียก AddOrder ด้วยพารามิเตอร์ validate (โปรดทราบว่าไม่มี order ID):

bash

Bash

$ ./krakenapi AddOrder pair=xdgusd type=buy ordertype=market volume=5000 validate=true{"error":[],"result":{"descr":{"order":"buy 5000.00000000 XDGUSD @ market"}}}

คำสั่งซื้อจริงขนาดเล็กและ/หรือคำสั่งซื้อที่มีราคาที่รุนแรง

สำหรับการทดสอบ API ที่ครอบคลุมโดยใช้พารามิเตอร์ Validate เราขอแนะนำให้ส่งคำสั่งซื้อแบบ market order ที่มีขนาดเล็กมาก (คำสั่งซื้อสำหรับ ขนาดคำสั่งซื้อขั้นต่ำ) หรือ limit order ที่มีราคาห่างไกลจากราคาตลาดปัจจุบันมาก (เช่น การส่ง limit order เพื่อขาย ETH/USD ที่ 800 ดอลลาร์ ในขณะที่ราคาตลาดอยู่ที่ 200 ดอลลาร์)

การทดสอบโดยใช้คำสั่งซื้อจริงช่วยให้โค้ด API ของคุณสามารถโต้ตอบกับ API ของเราในสภาพแวดล้อมจริง ดังนั้นทุกแง่มุมของการทดสอบจะแม่นยำ (เช่น คำสั่งซื้อของคุณส่งผลต่อ order book อย่างไร)

ด้วยเหตุผลด้านความปลอดภัย เราได้ยกเลิกการรองรับ TLS 1.0 และ 1.1 เมื่อเร็วๆ นี้ หากคุณพบข้อความแสดงข้อผิดพลาดในการเชื่อมต่อ SSL/TLS ขณะพยายามเชื่อมต่อกับ API ของเรา อาจเป็นเพราะการใช้มาตรฐานที่เลิกใช้แล้วเหล่านี้ คุณจะต้องแก้ไขไคลเอนต์ API ของคุณเพื่อบังคับใช้ TLS 1.2/1.3 หรืออัปเกรดเวอร์ชัน .NET ของคุณเป็น 4.6 หรือสูงกว่า ซึ่งใช้ TLS 1.2/1.3 เป็นมาตรฐาน

Google Sheet ต่อไปนี้สามารถใช้เพื่อคำนวณ REST API authentication signature สำหรับข้อมูลอินพุตทุกชุด:

  • API private (secret) key

  • API endpoint (Balance, TradeBalance, QueryOrders เป็นต้น)

  • ค่า Nonce (ดูหน้าสนับสนุน nonce คืออะไร ของเราสำหรับรายละเอียดเพิ่มเติม)

  • พารามิเตอร์อินพุต Endpoint (เช่น asset=doge)

เครื่องคำนวณนี้สามารถใช้เพื่อตรวจสอบว่าอัลกอริทึมการยืนยันตัวตนได้รับการนำไปใช้อย่างถูกต้อง ซึ่งจะช่วยหลีกเลี่ยงปัญหาที่อาจเกิดขึ้น (โดยเฉพาะข้อผิดพลาด invalid key ที่ไม่คาดคิด) ในภายหลังของวงจรการพัฒนา

คำแนะนำการใช้งาน

  1. 1

    เปิด เครื่องคำนวณการยืนยันตัวตน REST API ใน Chrome (หรือเว็บเบราว์เซอร์อื่น ๆ ที่เป็นเวอร์ชันล่าสุด)

  2. 2

    สร้างสำเนาของเครื่องคำนวณไปยัง Google Drive ของคุณเองผ่านเมนู ไฟล์ -> สร้างสำเนา (คุณจะต้องลงชื่อเข้าใช้บัญชี Google ของคุณสำหรับขั้นตอนนี้)

  3. 3

    แก้ไขช่อง API key, API endpoint, nonce value และ input data ด้วย API key และรายละเอียดคำขอของคุณเอง

  4. 4

    เปรียบเทียบ API authentication signature ที่คำนวณได้กับค่าที่คำนวณโดยโค้ด API ของคุณเอง (ค่าทั้งสองต้องตรงกันทุกประการ)

ด้วย เหตุผลด้านความปลอดภัย เราขอแนะนำให้ใช้เครื่องคำนวณการยืนยันตัวตนกับ API key ชั่วคราว จากนั้นลบ API key ออกจากบัญชีของคุณเมื่อการใช้งาน authentication signature ของคุณแสดงว่าถูกต้องแล้ว

ตัวอย่าง

Screenshot_2021-06-21_at_14.42.35.png

ประโยชน์หลักจากการใช้ client library wrapper ของเราคือคุณไม่จำเป็นต้องเสียเวลา/ความพยายามในการสร้าง API signature ขึ้นมาใหม่ เพราะเราได้ดำเนินการให้คุณเรียบร้อยแล้ว

หากคุณตั้งใจที่จะเรียกใช้เฉพาะ public method คุณอาจเลือกที่จะไม่ใช้ client library เนื่องจากไม่จำเป็นต้องมีการยืนยันตัวตน

คุณสามารถ ดูรายการ wrapper ที่มีอยู่ได้ที่นี่

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่