Next Restaurant 6.1.0: move your data in, run payroll, and connect other systems Next Inventory 6.2.0: a REST API and webhooks for your other systems Next DB 6.1: Auto-Updating Tables, Printing, Phone Layout and SEO Next Task 6.0.0: a task manager for Joomla Next Inventory 6.1.1: smoother Check Out, no more list limits, and much faster PHP2Shell: Is Your Joomla Site Safe? What to Do Today Introducing Next Boards: Kanban project and task boards for Joomla Building the Future of Joomla Extensions
NextSoftware

List Stock Movements

GET /stock-movements

List stock movements

Scope stock:read; the owner needs at least one movement permission.

Request

GET https://example.com/api/index.php/v1/nextinventory/stock-movements?limit=<integer>&offset=<integer>&search=<string>&movement_type=<string>&is_draft=<integer>&warehouse_id=<integer>&recipient_id=<integer>&date_from=<string>&date_to=<string>

Parameters

Name Type In Required Description
limit integer query No Page size. (min 1) Defaults to 20.
offset integer query No Rows to skip. (min 0) Defaults to 0.
search string query No
movement_type string query No One type, or several comma-separated.
is_draft integer query No One of 0, 1.
warehouse_id integer query No
recipient_id integer query No
date_from string query No (date)
date_to string query No (date)

Responses

200 — A page of movements.

{
    "data": [
        {
            "id": 1,
            "batch_id": "string",
            "reference": "string",
            "movement_date": "2026-01-01",
            "movement_type": "check_in",
            "recipient_id": 1,
            "warehouse_id": 1,
            "details": "string",
            "is_draft": true,
            "created": "2026-01-01T12:00:00Z",
            "created_by": 1,
            "modified": "2026-01-01T12:00:00Z",
            "warehouse_title": "string",
            "recipient_name": "string",
            "created_by_name": "string",
            "items_count": 1
        }
    ],
    "meta": {
        "total": 1
    }
}
Field Type Meaning
data array
meta.total integer Rows matching the filters, across all pages.

Errors

Status Code When
4 A refusal. Common codes: MISSING_TOKEN / INVALID_TOKEN (401); API_DISABLED, ACCOUNT_UNUSABLE, ACCESS_DENIED, TASK_NOT_ALLOWED, MISSING_SCOPE, APP_DISABLED, DEMO_LOCKED, FORBIDDEN (403); NOT_FOUND (404); BAD_REQUEST / INVALID_JSON / INVALID_IDEMPOTENCY_KEY (400, validation and stock rules, with the reason in title); IDEMPOTENCY_IN_PROGRESS (409); PRECONDITION_FAILED (412, the record changed since the If-Match ETag was read); IDEMPOTENCY_KEY_REUSED (422); RATE_LIMITED / TOO_MANY_FAILED_LOGINS (429, with a Retry-After header in seconds); SERVER_ERROR (500).

Examples

curl

curl -s "https://example.com/api/index.php/v1/nextinventory/stock-movements" \
  -H "Authorization: Bearer $API_TOKEN"

PHP

<?php
$ch = curl_init('https://example.com/api/index.php/v1/nextinventory/stock-movements?limit=<integer>&offset=<integer>&search=<string>&movement_type=<string>&is_draft=<integer>&warehouse_id=<integer>&recipient_id=<integer>&date_from=<string>&date_to=<string>');

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('API_TOKEN'),
    ],
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

JavaScript

const API_TOKEN = process.env.API_TOKEN;

const response = await fetch("https://example.com/api/index.php/v1/nextinventory/stock-movements?limit=<integer>&offset=<integer>&search=<string>&movement_type=<string>&is_draft=<integer>&warehouse_id=<integer>&recipient_id=<integer>&date_from=<string>&date_to=<string>", {
  headers: {
    "Authorization": `Bearer ${API_TOKEN}`,
  },
});
const data = await response.json();

All Extensions