Topolo Docs Topolo Platform
Open workspace

List Inventory stock movements

Read up to 100 newest ledger entries in the granted workspace, enriched with item/location labels. Every review state is included and there is no cursor or full-ledger export on this action.

Outcome

Read up to 100 newest ledger entries in the granted workspace, enriched with item/location labels. Every review state is included and there is no cursor or full-ledger export on this action.

Before you start

  • Verify the authenticated identity, exact environment and pinned approved organization context before preparing an action.
  • The published application permission is workspace:read. Discover a granted Inventory workspace and bind that exact resource. Supplied identifiers do not grant access.

Discover the target

topolo whoami --json
topolo actions get app_topolo_inventory.movements.list --detail --json
topolo resources topolo-inventory --json
topolo workspaces list topolo-inventory --json
  • Select the exact granted workspace id as INVENTORY_WORKSPACE_ID. Fixture ids authorize no live operation.

Request

GET /api/movements

Save action input as payload.json. Inspect the plan for the exact path, query and body. Set INVENTORY_WORKSPACE_ID from granted resource discovery.

Inspect and test this action in the signed action console, then perform the verification below.

Input fields

Supply an empty input object; credential and resource context are separate.

View the complete input schema in the action console. The same schema is available through CLI and MCP action discovery.

Effects

  • Reads the latest 100 movement rows, then uses core item/location lookups to add current labels. Missing lookup labels are null.
  • Review status does not filter listing or stock aggregation. This read creates no mirror or records.

Interpret the response

Use response path $.movements[].id for inventory_movement. An empty list does not discover a target.

Use movement.id and reviewStatus pending to select an eligible review target. List order is createdAt descending; absence from this capped list does not prove a historical movement is missing.

The success schema was checked against captured handler responses. Delegated Auth profile and canonical widget context fields can vary; exact Inventory projections and all six raw SQL export stores are source-reviewed. Error examples retain their actual refusal shapes.

View the complete success schema in the action console. The worked examples below retain complete captured responses; action discovery supplies the exact schema.

Worked examples

Captured exported Worker responses use both real local SQLite D1 databases with all six committed migrations, synthetic Auth/workspace grants and simulated Notify/Nexus/archive transport. They prove local handler shapes and scoped behavior, not live authorization, notification delivery, metering acceptance or environment deployment. Large 100-row list/capped-dashboard captures are retained in local evidence; committed tests verify those limits while worked guides use smaller complete responses. Refused examples demonstrate boundaries and must not be executed as successful workflows.

Successful request

Actual exported Worker response with both local SQLite D1 databases and all committed migrations; synthetic Auth/grants and simulated Notify/Nexus/archive transport. No live delivery, billing or environment deployment proof. Captured scenario: empty movements.

Input · payload.json:

{}

CLI:

topolo actions validate app_topolo_inventory.movements.list --data @payload.json --json
topolo actions plan app_topolo_inventory.movements.list --resource-type workspace --resource-id "$INVENTORY_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_inventory.movements.list --resource-type workspace --resource-id "$INVENTORY_WORKSPACE_ID" --data @payload.json --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_inventory.movements.list",
    "input": {},
    "resourceType": "workspace",
    "resourceId": "<identifier returned by granted resource discovery>"
  }
}

Captured local response · HTTP 200:

{
  "movements": []
}

HTTP 200. Use movement.id and reviewStatus pending to select an eligible review target. List order is createdAt descending; absence from this capped list does not prove a historical movement is missing.

Another supported request

Actual exported Worker response with both local SQLite D1 databases and all committed migrations; synthetic Auth/grants and simulated Notify/Nexus/archive transport. No live delivery, billing or environment deployment proof. Captured scenario: rejected and approved ledger records.

Input · payload.json:

{}

CLI:

topolo actions validate app_topolo_inventory.movements.list --data @payload.json --json
topolo actions plan app_topolo_inventory.movements.list --resource-type workspace --resource-id "$INVENTORY_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_inventory.movements.list --resource-type workspace --resource-id "$INVENTORY_WORKSPACE_ID" --data @payload.json --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_inventory.movements.list",
    "input": {},
    "resourceType": "workspace",
    "resourceId": "<identifier returned by granted resource discovery>"
  }
}

Captured local response · HTTP 200:

{
  "movements": [
    {
      "id": "invmove_16afb7cb-6c3f-4051-a68e-3988135bf040",
      "itemId": "invitem_cf12df06-7056-4441-bef4-95d5c15ef1ed",
      "locationId": "invloc_cfa27344-e120-4c97-90e4-7e876b0a5e3e",
      "movementType": "adjustment",
      "quantityDelta": -10,
      "note": "Compensating correction",
      "itemName": "Blue widget",
      "itemSku": "WIDGET-BLUE",
      "locationName": "Main warehouse",
      "createdByUserId": "usr_inventory_fixture",
      "createdByEmail": "operator@example.test",
      "createdAt": "2026-10-04T05:46:37.212Z",
      "reviewStatus": "approved",
      "reviewReason": "Absolute quantity delta 10 met the configured threshold 10.",
      "reviewedByUserId": "usr_inventory_fixture",
      "reviewedAt": "2026-10-04T05:46:37.232Z"
    },
    {
      "id": "invmove_3847adc5-c5b0-452d-87a0-37b1272057be",
      "itemId": "invitem_cf12df06-7056-4441-bef4-95d5c15ef1ed",
      "locationId": "invloc_cfa27344-e120-4c97-90e4-7e876b0a5e3e",
      "movementType": "receipt",
      "quantityDelta": 10,
      "note": "",
      "itemName": "Blue widget",
      "itemSku": "WIDGET-BLUE",
      "locationName": "Main warehouse",
      "createdByUserId": "usr_inventory_fixture",
      "createdByEmail": "operator@example.test",
      "createdAt": "2026-10-04T05:46:37.131Z",
      "reviewStatus": "rejected",
      "reviewReason": "Absolute quantity delta 10 met the configured threshold 10.",
      "reviewedByUserId": "usr_inventory_fixture",
      "reviewedAt": "2026-10-04T05:46:37.164Z"
    }
  ]
}

HTTP 200. Use movement.id and reviewStatus pending to select an eligible review target. List order is createdAt descending; absence from this capped list does not prove a historical movement is missing.

Verify the result

  • Use movement.id and reviewStatus pending to select an eligible review target.
  • List order is createdAt descending; absence from this capped list does not prove a historical movement is missing.

Errors and recovery

  • invalid_action_input (HTTP 400): Correct only the exact fields reported by the published schema validator. An invalid input can be refused before its handler.
  • action_permission_required (HTTP 403): Stop when the verified credential lacks the published action permission. Resource identifiers and organization ownership do not grant that permission.
  • organization_required (HTTP 403): Use the specifically authorized organization context; personal scope cannot act on organization-owned Inventory data.
  • workspace_required (HTTP 400): Discover an authorized Inventory workspace and pass its exact separate resource binding; bootstrap does not select a workspace.
  • workspaces_unavailable (HTTP 503): Retain the request id and report unavailable canonical workspace discovery; do not invent a default workspace.

Auth, action-input validation and platform resource resolution can refuse a request before its handler. Retain the exact error, request id and context; requesting another context is not a legitimate way to bypass a refusal.

Recovery boundary

The read does not change local inventory records. No local rollback is needed; do not perform a mutation merely to reverse a read.

  • Review Inventory stock movement: Resolve a pending movement review as approved or rejected. This changes review metadata only: rejecting does not delete the ledger entry, reverse stock or undo notifications already emitted.
  • Export Inventory organization data: Export all six local Inventory stores across every workspace of the authenticated organization, with raw SQL column names. A workspace header does not narrow the scope and free-text/customer fields are not redacted.

Evidence

Captured exported Worker responses use both real local SQLite D1 databases with all six committed migrations, synthetic Auth/workspace grants and simulated Notify/Nexus/archive transport. They prove local handler shapes and scoped behavior, not live authorization, notification delivery, metering acceptance or environment deployment. Large 100-row list/capped-dashboard captures are retained in local evidence; committed tests verify those limits while worked guides use smaller complete responses. Capture digests and test scenarios are retained in the source fixture records.