Developer Docs

    เริ่มต้น

    Partner API — Auth

    Partner API — Sales

    Partner API — Products

    Partner API — Inventory

    Partner API — Purchasing

    Partner API — Customers

    Partner API — Reports

    Partner API — Webhooks

    อ้างอิง

    List Stock Movements

    ดึงข้อมูลประวัติการเคลื่อนไหวของสต๊อก (Stock Movement History) ทั้งหมดของสินค้า โดยสามารถแยกตาม SKU และ Warehouse เพื่อให้เห็นลำดับเหตุการณ์การเปลี่ยนแปลงของสต๊อกแบบละเอียด (Event-based Tracking)

    แตกต่างจาก Get Stock Levels ซึ่งแสดงเพียง "สถานะปัจจุบันของสต๊อก" — Endpoint นี้จะให้ข้อมูลแบบย้อนหลังทุกเหตุการณ์ (Immutable History) ที่ส่งผลให้จำนวนสต๊อกเปลี่ยนแปลง พร้อมค่า running_balance หลังเกิดแต่ละรายการเคลื่อนไหว

    Endpoint นี้ทำงานในรูปแบบ Stock Ledger ตามหลัก Event Sourcing โดยทุกการเปลี่ยนแปลงของสต๊อกจะถูกบันทึกเป็นรายการ (Movement Record) เช่น:

    • การขายสินค้า (Sale Deduction)
    • การรับสินค้าเข้า (Stock In)
    • การปรับสต๊อก (Adjustment)
    • การโอนระหว่างคลัง (Transfer)

    แต่ละรายการจะมีผลต่อยอดสต๊อกคงเหลือแบบ Real-time ผ่าน running_balance


    Use Cases

    1. Audit Trail & Traceability

    ตรวจสอบย้อนหลังว่าสต๊อกเปลี่ยนแปลงจากเหตุการณ์ใด และเกิดขึ้นเมื่อไหร่ — ใช้ reference_type และ reference_id เพื่อ trace กลับไปยังเอกสารต้นทาง

    2. Stock Reconciliation

    ใช้เปรียบเทียบความถูกต้องของสต๊อกระหว่างระบบ POS, ERP และคลังสินค้า โดยนับ Movement สะสมแล้วตรวจสอบกับ quantity_on_hand จาก Get Stock Levels

    3. Inventory Analytics

    วิเคราะห์การใช้งานสินค้า เช่น:

    • สินค้าไหนถูกใช้เร็วที่สุด
    • ช่วงเวลาไหนมี Movement สูง
    • แนวโน้มการขาย vs การเติมสต๊อก

    4. ERP / External Sync

    ซิงค์ข้อมูล Movement ไปยังระบบบัญชีหรือ ERP เพื่อสร้าง Ledger ภายในองค์กร

    Required Scope

    read:inventory
    

    Access Token ต้องได้รับ Scope read:inventory มิฉะนั้นระบบจะปฏิเสธคำขอ


    Endpoint

    GET /api/partner/v1/inventory/movements
    

    Request Headers

    Authorization: Bearer <access_token>
    

    Query Parameters

    ParameterTypeRequiredDescription
    fromstring (YYYY-MM-DD)Noกรองรายการที่มี created_at ตั้งแต่วันที่กำหนด
    tostring (YYYY-MM-DD)Noกรองรายการที่มี created_at ไม่เกินวันที่กำหนด
    branch_idstring (UUID)Noกรองตามสาขา สามารถส่งหลายค่าได้
    warehouse_idstring (UUID)Noกรองตาม Warehouse
    product_sku_idstring (UUID)Noกรองตาม SKU
    movement_typestringNoกรองตามประเภทการเคลื่อนไหว: IN, OUT, TRANSFER, ADJUSTMENT
    limitintegerNoจำนวนรายการต่อหน้า (1–200) ค่าเริ่มต้น 50
    cursorstringNoCursor สำหรับดึงหน้าถัดไป

    Movement Types

    TypeDescription
    INStock เข้า เช่น รับสินค้าจาก Purchase Order
    OUTStock ออก เช่น ขายสินค้า
    TRANSFERโอนย้าย Stock ระหว่าง Warehouse
    ADJUSTMENTปรับ Stock โดยตรง เช่น นับ Stock หรือแก้ไขข้อผิดพลาด

    Reference Types

    reference_type บอกว่า Movement นี้เกิดจากเอกสารประเภทใด สามารถใช้ reference_id เพื่อ join กับข้อมูลต้นทาง

    reference_typeต้นทาง
    SALESales Order
    PURCHASEPurchase Order
    TRANSFERStock Transfer Document
    ADJUSTMENTManual Adjustment

    Pagination

    Endpoint นี้ใช้ Cursor-based Pagination

    หาก has_more เป็น true ให้ส่ง next_cursor กลับมาใน parameter cursor

    GET /api/partner/v1/inventory/movements?cursor=<next_cursor>
    

    Example Request

    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>"
    

    Example Response

    {
      "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
      }
    }
    

    InventoryMovement Object

    FieldTypeDescription
    idstring (UUID)Movement ID
    product_sku_idstring (UUID)SKU ที่เกี่ยวข้อง
    warehouse_idstring (UUID)Warehouse ที่เกิด Movement
    branch_idstring (UUID)สาขาของ Warehouse
    movement_typestringประเภทการเคลื่อนไหว ดู Movement Types ด้านบน
    reference_typestringประเภทเอกสารต้นทาง ดู Reference Types ด้านบน
    reference_idstring (UUID) | nullID ของเอกสารต้นทาง สำหรับ join กับข้อมูลอื่น
    quantitystring (decimal)จำนวนที่เคลื่อนไหว (เป็น positive เสมอ)
    cost_per_unitstring (decimal)ต้นทุนต่อหน่วย ณ เวลาที่เกิด Movement
    total_coststring (decimal)ต้นทุนรวม = quantity × cost_per_unit
    running_balancestring (decimal)Stock คงเหลือหลัง Movement นี้
    batch_numberstring | nullBatch หรือ Lot Number (ถ้ามี)
    reasonstring | nullหมายเหตุการปรับ Stock
    created_atstring (ISO 8601)เวลาที่เกิด Movement
    product_skus{ sku_code, sku_name }ข้อมูล SKU สรุป