ดึงข้อมูลประวัติการเคลื่อนไหวของสต๊อก (Stock Movement History) ทั้งหมดของสินค้า โดยสามารถแยกตาม SKU และ Warehouse เพื่อให้เห็นลำดับเหตุการณ์การเปลี่ยนแปลงของสต๊อกแบบละเอียด (Event-based Tracking)
แตกต่างจาก Get Stock Levels ซึ่งแสดงเพียง "สถานะปัจจุบันของสต๊อก" — Endpoint นี้จะให้ข้อมูลแบบย้อนหลังทุกเหตุการณ์ (Immutable History) ที่ส่งผลให้จำนวนสต๊อกเปลี่ยนแปลง พร้อมค่า running_balance หลังเกิดแต่ละรายการเคลื่อนไหว
Endpoint นี้ทำงานในรูปแบบ Stock Ledger ตามหลัก Event Sourcing โดยทุกการเปลี่ยนแปลงของสต๊อกจะถูกบันทึกเป็นรายการ (Movement Record) เช่น:
แต่ละรายการจะมีผลต่อยอดสต๊อกคงเหลือแบบ Real-time ผ่าน running_balance
ตรวจสอบย้อนหลังว่าสต๊อกเปลี่ยนแปลงจากเหตุการณ์ใด และเกิดขึ้นเมื่อไหร่ — ใช้ reference_type และ reference_id เพื่อ trace กลับไปยังเอกสารต้นทาง
ใช้เปรียบเทียบความถูกต้องของสต๊อกระหว่างระบบ POS, ERP และคลังสินค้า โดยนับ Movement สะสมแล้วตรวจสอบกับ quantity_on_hand จาก Get Stock Levels
วิเคราะห์การใช้งานสินค้า เช่น:
ซิงค์ข้อมูล Movement ไปยังระบบบัญชีหรือ ERP เพื่อสร้าง Ledger ภายในองค์กร
read:inventory
Access Token ต้องได้รับ Scope read:inventory มิฉะนั้นระบบจะปฏิเสธคำขอ
GET /api/partner/v1/inventory/movements
Authorization: Bearer <access_token>
| Parameter | Type | Required | Description |
|---|---|---|---|
| from | string (YYYY-MM-DD) | No | กรองรายการที่มี created_at ตั้งแต่วันที่กำหนด |
| to | string (YYYY-MM-DD) | No | กรองรายการที่มี created_at ไม่เกินวันที่กำหนด |
| branch_id | string (UUID) | No | กรองตามสาขา สามารถส่งหลายค่าได้ |
| warehouse_id | string (UUID) | No | กรองตาม Warehouse |
| product_sku_id | string (UUID) | No | กรองตาม SKU |
| movement_type | string | No | กรองตามประเภทการเคลื่อนไหว: IN, OUT, TRANSFER, ADJUSTMENT |
| limit | integer | No | จำนวนรายการต่อหน้า (1–200) ค่าเริ่มต้น 50 |
| cursor | string | No | Cursor สำหรับดึงหน้าถัดไป |
| Type | Description |
|---|---|
| IN | Stock เข้า เช่น รับสินค้าจาก Purchase Order |
| OUT | Stock ออก เช่น ขายสินค้า |
| TRANSFER | โอนย้าย Stock ระหว่าง Warehouse |
| ADJUSTMENT | ปรับ Stock โดยตรง เช่น นับ Stock หรือแก้ไขข้อผิดพลาด |
reference_type บอกว่า Movement นี้เกิดจากเอกสารประเภทใด สามารถใช้ reference_id เพื่อ join กับข้อมูลต้นทาง
| reference_type | ต้นทาง |
|---|---|
| SALE | Sales Order |
| PURCHASE | Purchase Order |
| TRANSFER | Stock Transfer Document |
| ADJUSTMENT | Manual Adjustment |
Endpoint นี้ใช้ Cursor-based Pagination
หาก has_more เป็น true ให้ส่ง next_cursor กลับมาใน parameter cursor
GET /api/partner/v1/inventory/movements?cursor=<next_cursor>
curl -X GET \
"https://<host>/api/partner/v1/inventory/movements?from=2026-06-01&to=2026-06-15&movement_type=OUT&limit=50" \
-H "Authorization: Bearer <access_token>"
{
"data": [
{
"id": "d5d0ca0e-33ed-4934-ac20-fcc39123282d",
"product_sku_id": "ee4ee997-bf6d-4bc2-9da6-2ca39fd0bffc",
"warehouse_id": "1c5e4054-faef-4fb4-b95b-3baeefc2bcb9",
"branch_id": "b1f85720-71cf-420e-a584-e36b75d3fd20",
"movement_type": "OUT",
"reference_type": "SALE",
"reference_id": "e11c9298-9044-4de1-a0b6-2ede0134d799",
"quantity": "1",
"cost_per_unit": "70",
"total_cost": "70",
"running_balance": "-6",
"batch_number": null,
"reason": null,
"created_at": "2026-06-14T12:41:21.987Z",
"product_skus": {
"sku_code": "",
"sku_name": "ส้มตำปู"
}
}
],
"pagination": {
"next_cursor": "...",
"has_more": true,
"limit": 50
}
}
| Field | Type | Description |
|---|---|---|
| id | string (UUID) | Movement ID |
| product_sku_id | string (UUID) | SKU ที่เกี่ยวข้อง |
| warehouse_id | string (UUID) | Warehouse ที่เกิด Movement |
| branch_id | string (UUID) | สาขาของ Warehouse |
| movement_type | string | ประเภทการเคลื่อนไหว ดู Movement Types ด้านบน |
| reference_type | string | ประเภทเอกสารต้นทาง ดู Reference Types ด้านบน |
| reference_id | string (UUID) | null | ID ของเอกสารต้นทาง สำหรับ join กับข้อมูลอื่น |
| quantity | string (decimal) | จำนวนที่เคลื่อนไหว (เป็น positive เสมอ) |
| cost_per_unit | string (decimal) | ต้นทุนต่อหน่วย ณ เวลาที่เกิด Movement |
| total_cost | string (decimal) | ต้นทุนรวม = quantity × cost_per_unit |
| running_balance | string (decimal) | Stock คงเหลือหลัง Movement นี้ |
| batch_number | string | null | Batch หรือ Lot Number (ถ้ามี) |
| reason | string | null | หมายเหตุการปรับ Stock |
| created_at | string (ISO 8601) | เวลาที่เกิด Movement |
| product_skus | { sku_code, sku_name } | ข้อมูล SKU สรุป |