Products

List stock movements of a product

Read the append-only stock ledger of a product, newest movement first.

  • Rows carry signed delta and stock_after (base units); stock_after ignores direction.
  • Cursor-paginated (limit + starting_after); direction=in|out narrows the rows.
get/companies/{company}/products/{product}/stock-movements

Request

  • Base URL: https://api.factuarea.com/v1
  • URL: https://api.factuarea.com/v1/companies/{company}/products/{product}/stock-movements
  • Auth: one of:
    • HTTP bearer
    • API key in header X-API-Key

Path parameters

companystring uuid required

Public identifier (UUID v7) of the company. Get it from GET /v1/me (data.scope[].id).

productstring uuid required

Public identifier (UUID v7) of the product.

Query parameters

limitinteger

Number of stock movements per page, between 1 and 100 (default 25).

starting_afterstring uuid nullable

Cursor for forward pagination: the id of the last stock movement you received.

direction'in' | 'out' | 'null' nullable

in returns only incoming movements and out only outgoing ones (all when omitted).

Headers

Factuarea-Versionstring date
Example:2026-06-01

Pin the API version (YYYY-MM-DD, Stripe-style date versioning) for this request; omit to use the key's pinned version, or the latest if none. Unsupported version → 400 unsupported_api_version; malformed → 400 parameter_invalid_format. The effective version is echoed in the Factuarea-Version response header. See the Versioning guide.

Response

has_moreboolean required

Whether more pages are available after this one.

next_cursorstring nullable required

Opaque cursor for the next page, or null when has_more is false. The example below shows the shape used by most listings; others return a different one, so pass the value back verbatim instead of validating it.

Example response

{
  "has_more": true,
  "next_cursor": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a0c"
}

Changes

No recorded changes to this operation across all 1 revision of this API.