API

Movements

Returns a log of stock changes, so you can fetch only what changed since your last check instead of re-downloading everything.

Endpoint

GET https://vintrhall.com/api/v1/movements
curl -H "Authorization: Bearer vh_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  "https://vintrhall.com/api/v1/movements?since=2026-07-10T00:00:00Z"

Query parameters

ParameterDescription
sinceRequired. ISO 8601 timestamp. Return only movements posted at or after this time.
cursorPagination cursor from a previous response.
limitPage size, default 100, maximum 200.

Response

{
  "items": [
    {
      "id": "mv_01h...",
      "kind": "scan_sort",
      "sku": "TSH-BLK-M",
      "qtyDelta": 5,
      "warehouse": "WH1",
      "location": "A/3/2/1",
      "postedAt": "2026-07-11T07:12:00.000Z"
    }
  ],
  "nextCursor": null
}

kind is one of:

KindMeaning
receipt_inStock received into a location.
scan_sortStock added to a location during scanning.
scan_undoA previous scan was undone.
stocktake_plusA count found more stock than expected.
stocktake_minusA count found less stock than expected.

To keep your own system in sync, store the highest postedAt you have processed and pass it as since on the next request. This way you only fetch what changed. Because since has second-level granularity, re-running a request from the last processed postedAt can return a movement you already have, so deduplicate incoming items by id.