แลกเพชรเป็นเครดิต

ใช้งานได้
POST/api/v1/diamond/redeem

แลกสินค้าในร้าน 1 รายการ

เครดิตที่แลกจะบันทึกเป็นรายการชนิด DIAMOND_REDEEM ในประวัติธุรกรรม และติดเทิร์นตาม shop_wagering_x ของ agent

idempotent = true แปลว่าเป็นการ replay — อย่านับเป็นการแลกครั้งใหม่ ให้ใช้ diamond_balance/balance ที่ตอบกลับอัปเดตหน้าจอเฉย ๆ

Headers

ฟิลด์ชนิดจำเป็นคำอธิบาย
Authorizationstringใช่ใช้ — แนบ Bearer <access_token> ของสมาชิก
X-Api-Keystringใช่API key ของ agent (ak_…) จากหน้า bo
X-Timestampstringใช่เวลา sign เป็น unix milliseconds (คลาดเคลื่อนได้ ±300 วินาที)
X-Noncestringใช่ค่าไม่ซ้ำต่อ request (UUIDv4) กัน replay
X-Signaturestringใช่hex(HMAC-SHA256(secret, canonical)) — ดูหน้า Authentication
X-Player-IPstring—IP จริงของผู้เล่น (IPv4/IPv6) — แนะนำให้ส่ง (ใช้ใน login history)
X-Player-UAstring—User-Agent ของผู้เล่น (optional — ลง login history)
X-Request-Idstring—correlation id ของฝั่งคุณ — ระบบ echo กลับใน request_uuid (แนะนำให้ส่ง)
x-langstring—th (default) หรือ en — ภาษาของ message

Request bodyapplication/json

ฟิลด์ชนิดจำเป็นคำอธิบาย
item_idstringใช่id ของสินค้าที่จะแลก มาจาก items ใน /diamond/shop (UUID)
idempotency_keystring—คีย์กันกดซ้ำของฝั่งคุณ สูงสุด 64 ตัวอักษร — ส่งค่าเดิมเมื่อ retry เพื่อไม่ให้แลกซ้ำ ถ้าไม่ส่งระบบจะสร้าง uuid ให้ (การ retry จึงต้องส่งคีย์เองถึงจะกันซ้ำได้)
ตัวอย่าง request
{
  "item_id": "3f1c9a2e-7b41-4d6c-9a8e-2f5b1c0d7e10",
  "idempotency_key": "redeem-2026-07-12-9f8a1c"
}

Response

ฟิลด์ใน data

ฟิลด์ชนิดจำเป็นคำอธิบาย
idempotentboolean—true = คำขอนี้เป็นการ replay ด้วย idempotency_key เดิม (ไม่ได้หักเพชร/เครดิตซ้ำ) คืนยอดปัจจุบัน · false = แลกจริงในครั้งนี้
diamond_balancenumber—ยอดเพชรคงเหลือหลังหักค่าสินค้า (จำนวนเต็ม)
balancestring—ยอดเงินในกระเป๋าหลังเครดิตรางวัลเข้า (THB, string)
credit_amountstring—เครดิตที่ได้รับจากการแลกครั้งนี้ (THB, string)
item_idstring—id ของสินค้าที่แลก (echo กลับมาให้ผูกกับ toast/ประวัติ)
ตัวอย่าง response
{
  "success": true,
  "code": 0,
  "message": "Redeemed successfully",
  "data": {
    "idempotent": false,
    "diamond_balance": 220,
    "balance": "170.00",
    "credit_amount": "50",
    "item_id": "3f1c9a2e-7b41-4d6c-9a8e-2f5b1c0d7e10"
  },
  "request_uuid": "c4a8f2d6-1b39-4e75-90cd-5e7a3f8b1d64"
}

Error codes ที่พบได้

codeชื่อHTTPข้อความ
6222DIAMOND_INSUFFICIENT400เพชรไม่พอสำหรับการแลกเพชรไม่พอสำหรับสินค้านี้ (diamond_balance < cost_diamonds) — สะสมเพิ่มก่อน
6223DIAMOND_ITEM_UNAVAILABLE400ไอเทมในร้านเพชรปิดอยู่หรือไม่พบสินค้าไม่พร้อมขาย — ไม่มี id นี้หรือถูกปิดใช้ (โหลด /diamond/shop ใหม่)
6221DIAMOND_NOT_ENABLED400โปรแกรมเพชรยังไม่เปิดใช้งานหรือไม่มีสิทธิ์ระบบเพชรหรือร้านค้าปิดอยู่ (enabled/shop_enabled = false) หรือบัญชีไม่เข้าเงื่อนไข (ไม่ใช่กระเป๋าโหมด TRANSFER)
9002SERVICE_UNAVAILABLE503บริการไม่พร้อมใช้งานระบบออกเครดิตของ agent ไม่พร้อมชั่วคราว — เพชรไม่ถูกหัก ลองใหม่ภายหลัง (สาเหตุที่แท้จริงถูกซ่อนจากสมาชิก)
4001VALIDATION_ERROR400ข้อมูลไม่ถูกต้องitem_id ไม่ใช่ UUID หรือ idempotency_key ยาวเกิน 64 ตัวอักษร
1001UNAUTHORIZED401ไม่ได้รับอนุญาต
1007TOKEN_INVALID401โทเค็นไม่ถูกต้อง