{
    "specVersion": "3.1.0",
    "specFormat": "openapi",
    "specFile": "openapi.yaml",
    "installSpecPath": "/media/com_nextinventory/openapi.yaml",
    "title": "Next Inventory REST API",
    "summary": "Read and change Next Inventory stock from another system.",
    "description": "The REST API of Next Inventory, the inventory component for Joomla 4, 5 and 6.\n\n**Base URL**: `https://<your-site>/api/index.php/v1/nextinventory`\n\n**Authentication**: create a token in Next Inventory → Configuration → REST API → Tokens and send it as\n`Authorization: Bearer <token>`. If your web server strips the Authorization header (some Apache\n+ PHP-FPM setups do), send `X-NextInventory-Token: <token>` instead.\n\nA token acts as the user who created it. It can do only what its **scopes** allow AND what that\nuser's Next Inventory **role** allows; every request goes through the same permission checks,\nvalidation and stock rules as the Next Inventory screens.\n\n**Responses**: success is `{ \"data\": ..., \"meta\": { \"total\": n } }` (meta on lists only); a create\nanswers `201`, a delete `204` with no body. Every failure is\n`{ \"errors\": [ { \"title\": \"...\", \"code\": \"MACHINE_CODE\", \"meta\": { ... } } ] }`.\n\n**Stock is changed only through stock movements, transfers and adjustments** — never by writing\n`stock_quantity` on an item — so every change is in the ledger (`/transactions`) and the\nFIFO/LIFO cost layers stay correct.\n\n**Rate limits**: per token and per minute, reads (GET) and changes counted apart: 300 reads\nand 120 changes by default, set on REST API → Settings (0 = no limit). Every answer carries\n`RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` (seconds); over a limit the\nanswer is `429 RATE_LIMITED` with `Retry-After: <seconds>`. More than 20 unknown tokens from one\naddress within 5 minutes are answered `429 TOO_MANY_FAILED_LOGINS` (a valid token never is).\n\n**Concurrent edits**: reading one record (`GET /items/{id}` and the like) returns an `ETag`\nheader, as does a successful change to it. Send it back as `If-Match` on `PATCH`, `DELETE` or\nan action, and the change is refused with `412` if someone else changed the record meanwhile.\nTo learn when records change, subscribe a webhook rather than polling.\n\n**Safe retries**: send an `Idempotency-Key` header on a POST, PATCH or DELETE and a retry\nafter a timeout cannot run the request twice (see the parameter).\n\nThe same token also works on the administrator task lane\n(`administrator/index.php?option=com_nextinventory&format=json&task=<controller.task>`), which\nis the RPC interface the Next Inventory screens themselves use.\n",
    "apiVersion": "6.2.0",
    "license": {
        "name": "GPL-2.0-or-later",
        "identifier": "GPL-2.0-or-later"
    },
    "contact": {
        "name": "NextSoftware",
        "url": "https://nextsoftware.dev/"
    },
    "style": "rest-path",
    "guide": "rest-api/getting-started",
    "navSection": "api",
    "navEventsSection": "webhooks",
    "baseUrl": {
        "template": "{site}/api/index.php/v1/nextinventory",
        "variables": {
            "site": {
                "description": "Your Joomla site root, without a trailing slash.",
                "example": "https://example.com",
                "enum": null
            }
        },
        "example": "https://example.com/api/index.php/v1/nextinventory"
    },
    "auth": {
        "type": "bearer",
        "header": "Authorization",
        "scheme": "Bearer",
        "queryParam": null,
        "example": "Authorization: Bearer <your-api-token>",
        "alternatives": [
            {
                "type": "header",
                "name": "X-NextInventory-Token",
                "note": "The same token, for servers that strip the Authorization header."
            }
        ],
        "enablement": [],
        "notes": [
            "A Next Inventory API token (`nxi_…`), created under Configuration → REST API → Tokens."
        ]
    },
    "conventions": [],
    "groups": [
        {
            "id": "Items",
            "title": "Items",
            "description": ""
        },
        {
            "id": "Lookup",
            "title": "Lookup",
            "description": ""
        },
        {
            "id": "Custom fields",
            "title": "Custom fields",
            "description": ""
        },
        {
            "id": "Categories",
            "title": "Categories",
            "description": ""
        },
        {
            "id": "Warehouses",
            "title": "Warehouses",
            "description": ""
        },
        {
            "id": "Recipients",
            "title": "Recipients",
            "description": ""
        },
        {
            "id": "Units",
            "title": "Units",
            "description": ""
        },
        {
            "id": "Stock movements",
            "title": "Stock movements",
            "description": ""
        },
        {
            "id": "Transactions",
            "title": "Transactions",
            "description": ""
        },
        {
            "id": "Transfers",
            "title": "Transfers",
            "description": ""
        },
        {
            "id": "Adjustments",
            "title": "Adjustments",
            "description": ""
        },
        {
            "id": "Reports",
            "title": "Reports",
            "description": ""
        }
    ],
    "endpoints": [
        {
            "id": "listItems",
            "slug": "items",
            "pagePath": "api/items",
            "group": "Items",
            "method": "GET",
            "operation": "/items",
            "summary": "List items",
            "title": "List Items",
            "description": "Scope `items:read`; role permission `inventory.view`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "limit",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 20,
                    "enum": null,
                    "example": null,
                    "description": "Page size. (min 1)"
                },
                {
                    "name": "offset",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 0,
                    "enum": null,
                    "example": null,
                    "description": "Rows to skip. (min 0)"
                },
                {
                    "name": "search",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "category_id",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "warehouse_id",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "item_type",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": [
                        "asset",
                        "consumable",
                        "sellable"
                    ],
                    "example": null,
                    "description": ""
                },
                {
                    "name": "low_stock",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": null,
                    "enum": [
                        0,
                        1
                    ],
                    "example": null,
                    "description": "1 = only items at or below their threshold"
                },
                {
                    "name": "published",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": null,
                    "enum": [
                        0,
                        1
                    ],
                    "example": null,
                    "description": "Filter on `state`."
                },
                {
                    "name": "ordering",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": "title",
                    "description": ""
                },
                {
                    "name": "direction",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": [
                        "asc",
                        "desc"
                    ],
                    "example": null,
                    "description": ""
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "A page of items.",
                    "example": {
                        "data": [
                            {
                                "id": 1,
                                "title": "string",
                                "alias": "string",
                                "item_type": "asset",
                                "sku": "string",
                                "barcode": "string",
                                "serial_number": "string",
                                "category_id": 1,
                                "category_title": "string",
                                "warehouse_id": 1,
                                "warehouse_title": "string",
                                "unit_id": 1,
                                "unit_title": "string",
                                "unit_code": "string",
                                "stock_quantity": 1.5,
                                "unit_price": 1.5,
                                "low_stock_threshold": 1.5,
                                "weight": 1.5,
                                "weight_unit": "string",
                                "track_weight": true,
                                "description": "string",
                                "image": "string",
                                "state": 1,
                                "created": "2026-01-01T12:00:00Z",
                                "modified": "2026-01-01T12:00:00Z"
                            }
                        ],
                        "meta": {
                            "total": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data[].id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].title",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data[].alias",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].item_type",
                            "type": "string",
                            "description": "One of `asset`, `consumable`, `sellable`."
                        },
                        {
                            "path": "data[].sku",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].barcode",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].serial_number",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].category_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data[].category_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].warehouse_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data[].warehouse_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].unit_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data[].unit_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].unit_code",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].stock_quantity",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data[].unit_price",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data[].low_stock_threshold",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data[].weight",
                            "type": "number|null",
                            "description": ""
                        },
                        {
                            "path": "data[].weight_unit",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].track_weight",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "path": "data[].description",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].image",
                            "type": "string|null",
                            "description": "Site-relative path of the original image."
                        },
                        {
                            "path": "data[].state",
                            "type": "integer",
                            "description": "1 published, 0 unpublished."
                        },
                        {
                            "path": "data[].created",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "data[].modified",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "meta.total",
                            "type": "integer",
                            "description": "Rows matching the filters, across all pages."
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/items\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": "List items endpoint",
            "seoDescription": "GET /items lists Next Inventory items with search, category, warehouse, type and low-stock filters and paging.",
            "seoKeywords": "list items, inventory items api, stock levels, filters, paging"
        },
        {
            "id": "createItem",
            "slug": "post-items",
            "pagePath": "api/post-items",
            "group": "Items",
            "method": "POST",
            "operation": "/items",
            "summary": "Create an item",
            "title": "Create Item",
            "description": "Scope `items:write`; role permission `inventory.create`. Required: `title`, `item_type`,\n`category_id`, `stock_quantity`, `low_stock_threshold` (send 0 for none). Custom fields are sent as `cf_<field name>` keys. Opening stock is better\nrecorded with an `add_stock` movement so it reaches the ledger.\n",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                }
            ],
            "requestBody": {
                "contentType": "application/json",
                "required": true,
                "description": "",
                "fields": [
                    {
                        "name": "title",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "item_type",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": [
                            "asset",
                            "consumable",
                            "sellable"
                        ],
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "category_id",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "warehouse_id",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "unit_id",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "stock_quantity",
                        "type": "number",
                        "required": false,
                        "description": "Opening stock on create. Later changes go through stock movements.",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "sku",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "barcode",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "serial_number",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "unit_price",
                        "type": "number",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "low_stock_threshold",
                        "type": "number",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "weight",
                        "type": "number",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "weight_unit",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "track_weight",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": [
                            0,
                            1
                        ],
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "description",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "state",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": [
                            0,
                            1
                        ],
                        "default": null,
                        "children": []
                    }
                ],
                "example": {
                    "title": "Cordless drill",
                    "item_type": "asset",
                    "category_id": 3,
                    "warehouse_id": 1,
                    "sku": "TL-0042",
                    "stock_quantity": 0,
                    "unit_price": 129.9,
                    "low_stock_threshold": 2,
                    "state": 1
                }
            },
            "responses": [
                {
                    "status": 201,
                    "description": "Created.",
                    "example": {
                        "data": {
                            "id": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X POST \"https://example.com/api/index.php/v1/nextinventory/items\" \\\n  -H \"Authorization: Bearer $API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"title\":\"Cordless drill\",\"item_type\":\"asset\",\"category_id\":3,\"warehouse_id\":1,\"sku\":\"TL-0042\",\"stock_quantity\":0,\"unit_price\":129.9,\"low_stock_threshold\":2,\"state\":1}'"
                }
            ],
            "sections": [],
            "seoTitle": "Create item endpoint",
            "seoDescription": "POST /items creates an item with the same validation as the item form; category_id and stock_quantity are required.",
            "seoKeywords": "create item, add inventory item, items api, validation, sku, barcode"
        },
        {
            "id": "getItem",
            "slug": "get-items",
            "pagePath": "api/get-items",
            "group": "Items",
            "method": "GET",
            "operation": "/items/{id}",
            "summary": "Get one item, with its custom fields",
            "title": "Get Item",
            "description": "Scope `items:read`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The item.",
                    "example": {
                        "data": {
                            "id": 1,
                            "title": "string",
                            "alias": "string",
                            "item_type": "asset",
                            "sku": "string",
                            "barcode": "string",
                            "serial_number": "string",
                            "category_id": 1,
                            "category_title": "string",
                            "warehouse_id": 1,
                            "warehouse_title": "string",
                            "unit_id": 1,
                            "unit_title": "string",
                            "unit_code": "string",
                            "stock_quantity": 1.5,
                            "unit_price": 1.5,
                            "low_stock_threshold": 1.5,
                            "weight": 1.5,
                            "weight_unit": "string",
                            "track_weight": true,
                            "description": "string",
                            "image": "string",
                            "state": 1,
                            "created": "2026-01-01T12:00:00Z",
                            "modified": "2026-01-01T12:00:00Z",
                            "custom_fields": [
                                {
                                    "name": "string",
                                    "label": "string",
                                    "field_type": "string",
                                    "value": "string"
                                }
                            ]
                        }
                    },
                    "fields": [
                        {
                            "path": "data",
                            "type": "object",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/items/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "updateItem",
            "slug": "patch-items",
            "pagePath": "api/patch-items",
            "group": "Items",
            "method": "PATCH",
            "operation": "/items/{id}",
            "summary": "Update an item (only the fields sent)",
            "title": "Update Item",
            "description": "Scope `items:write`; role permission `inventory.edit`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": {
                "contentType": "application/json",
                "required": true,
                "description": "",
                "fields": [
                    {
                        "name": "title",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "item_type",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": [
                            "asset",
                            "consumable",
                            "sellable"
                        ],
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "category_id",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "warehouse_id",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "unit_id",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "stock_quantity",
                        "type": "number",
                        "required": false,
                        "description": "Opening stock on create. Later changes go through stock movements.",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "sku",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "barcode",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "serial_number",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "unit_price",
                        "type": "number",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "low_stock_threshold",
                        "type": "number",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "weight",
                        "type": "number",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "weight_unit",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "track_weight",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": [
                            0,
                            1
                        ],
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "description",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "state",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": [
                            0,
                            1
                        ],
                        "default": null,
                        "children": []
                    }
                ],
                "example": {
                    "unit_price": 134.5
                }
            },
            "responses": [
                {
                    "status": 200,
                    "description": "Done.",
                    "example": {
                        "data": {
                            "id": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X PATCH \"https://example.com/api/index.php/v1/nextinventory/items/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"unit_price\":134.5}'"
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "deleteItem",
            "slug": "delete-items",
            "pagePath": "api/delete-items",
            "group": "Items",
            "method": "DELETE",
            "operation": "/items/{id}",
            "summary": "Delete an item",
            "title": "Delete Item",
            "description": "Scope `items:delete`; role permission `inventory.delete`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 204,
                    "description": "Deleted.",
                    "example": null,
                    "fields": [],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X DELETE \"https://example.com/api/index.php/v1/nextinventory/items/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "listItemTransactions",
            "slug": "items-transactions",
            "pagePath": "api/items-transactions",
            "group": "Items",
            "method": "GET",
            "operation": "/items/{id}/transactions",
            "summary": "The ledger of one item",
            "title": "List Item Transactions",
            "description": "Scope `transactions:read`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "limit",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 20,
                    "enum": null,
                    "example": null,
                    "description": "Page size. (min 1)"
                },
                {
                    "name": "offset",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 0,
                    "enum": null,
                    "example": null,
                    "description": "Rows to skip. (min 0)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "A page of ledger rows.",
                    "example": {
                        "data": [
                            {
                                "id": 1,
                                "item_id": 1,
                                "item_title": "string",
                                "item_sku": "string",
                                "transaction_type": "string",
                                "quantity_change": 1.5,
                                "new_quantity": 1.5,
                                "transaction_unit_id": 1,
                                "original_quantity": 1.5,
                                "cost_per_unit": 1.5,
                                "total_cost": 1.5,
                                "batch_id": "string",
                                "recipient_id": 1,
                                "recipient": "string",
                                "reason": "string",
                                "created_by": 1,
                                "created_by_name": "string",
                                "created": "2026-01-01T12:00:00Z"
                            }
                        ],
                        "meta": {
                            "total": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data[].id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].item_id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].item_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].item_sku",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].transaction_type",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data[].quantity_change",
                            "type": "number",
                            "description": "Signed: negative for stock out."
                        },
                        {
                            "path": "data[].new_quantity",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data[].transaction_unit_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data[].original_quantity",
                            "type": "number|null",
                            "description": ""
                        },
                        {
                            "path": "data[].cost_per_unit",
                            "type": "number|null",
                            "description": ""
                        },
                        {
                            "path": "data[].total_cost",
                            "type": "number|null",
                            "description": ""
                        },
                        {
                            "path": "data[].batch_id",
                            "type": "string|null",
                            "description": "Shared by every row of one movement/transfer/adjustment."
                        },
                        {
                            "path": "data[].recipient_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data[].recipient",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].reason",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].created_by",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].created_by_name",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].created",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "meta.total",
                            "type": "integer",
                            "description": "Rows matching the filters, across all pages."
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/items/1/transactions\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "getItemCostLayers",
            "slug": "items-cost-layers",
            "pagePath": "api/items-cost-layers",
            "group": "Items",
            "method": "GET",
            "operation": "/items/{id}/cost-layers",
            "summary": "FIFO/LIFO cost layers and valuation of one item",
            "title": "Get Item Cost Layers",
            "description": "Scope `items:read`. Empty unless the costing method is FIFO or LIFO.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "Layers, total value and the active costing method.",
                    "example": {
                        "data": {
                            "layers": [
                                {}
                            ],
                            "total_value": 1.5,
                            "costing_method": "standard"
                        }
                    },
                    "fields": [
                        {
                            "path": "data.layers[]",
                            "type": "object[]",
                            "description": ""
                        },
                        {
                            "path": "data.total_value",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data.costing_method",
                            "type": "string",
                            "description": "One of `standard`, `fifo`, `lifo`."
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/items/1/cost-layers\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "setItemImage",
            "slug": "items-image",
            "pagePath": "api/items-image",
            "group": "Items",
            "method": "POST",
            "operation": "/items/{id}/image",
            "summary": "Upload an image and make it the item's image",
            "title": "Set Item Image",
            "description": "Scope `items:write`; role permission `inventory.edit`. Replaces any previous image. Thumbnails are generated.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                }
            ],
            "requestBody": {
                "contentType": "multipart/form-data",
                "required": true,
                "description": "",
                "fields": [
                    {
                        "name": "image",
                        "type": "string",
                        "required": true,
                        "description": "jpg, png, gif or webp, as allowed in Settings. (binary)",
                        "enum": null,
                        "default": null,
                        "children": []
                    }
                ],
                "example": {
                    "image": "string"
                }
            },
            "responses": [
                {
                    "status": 200,
                    "description": "The stored image.",
                    "example": {
                        "data": {
                            "image": "string",
                            "thumb_small": "string",
                            "thumb_medium": "string"
                        }
                    },
                    "fields": [
                        {
                            "path": "data.image",
                            "type": "string",
                            "description": "Site-relative path of the original."
                        },
                        {
                            "path": "data.thumb_small",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.thumb_medium",
                            "type": "string|null",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X POST \"https://example.com/api/index.php/v1/nextinventory/items/1/image\" \\\n  -H \"Authorization: Bearer $API_TOKEN\" \\\n  -H \"Content-Type: multipart/form-data\" \\\n  -d '{\"image\":\"string\"}'"
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "removeItemImage",
            "slug": "delete-items-image",
            "pagePath": "api/delete-items-image",
            "group": "Items",
            "method": "DELETE",
            "operation": "/items/{id}/image",
            "summary": "Remove the item's image",
            "title": "Remove Item Image",
            "description": "Scope `items:write`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "Done.",
                    "example": {
                        "data": {
                            "id": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X DELETE \"https://example.com/api/index.php/v1/nextinventory/items/1/image\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "listCustomFields",
            "slug": "custom-fields",
            "pagePath": "api/custom-fields",
            "group": "Custom fields",
            "method": "GET",
            "operation": "/custom-fields",
            "summary": "The published custom field definitions for items, warehouses or recipients",
            "title": "List Custom Fields",
            "description": "Scope `customfields:read`. Write a field as `cf_<name>` on POST / PATCH of the entity.\nEmpty while the Custom Fields app is off.\n",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "context",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": "item",
                    "enum": [
                        "item",
                        "warehouse",
                        "recipient"
                    ],
                    "example": null,
                    "description": ""
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "Definitions, in display order.",
                    "example": {
                        "data": [
                            {
                                "id": 1,
                                "name": "string",
                                "label": "string",
                                "description": "string",
                                "field_type": "text",
                                "context": "item",
                                "default_value": "string",
                                "options": "string",
                                "validation_rules": "string",
                                "is_required": true,
                                "is_searchable": true,
                                "is_filterable": true,
                                "ordering": 1,
                                "fieldset_name": "string",
                                "fieldset_title": "string"
                            }
                        ]
                    },
                    "fields": [
                        {
                            "path": "data[].id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].name",
                            "type": "string",
                            "description": "Send as `cf_<name>`."
                        },
                        {
                            "path": "data[].label",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data[].description",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].field_type",
                            "type": "string",
                            "description": "One of `text`, `textarea`, `number`, `select`, `checkbox`, `date`, `radio`, `email`, `url`, `color`, `file`, `multiselect`."
                        },
                        {
                            "path": "data[].context",
                            "type": "string",
                            "description": "One of `item`, `warehouse`, `recipient`."
                        },
                        {
                            "path": "data[].default_value",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].options",
                            "type": "object",
                            "description": "Choices for select / radio / multiselect / checkbox."
                        },
                        {
                            "path": "data[].validation_rules",
                            "type": "object",
                            "description": ""
                        },
                        {
                            "path": "data[].is_required",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "path": "data[].is_searchable",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "path": "data[].is_filterable",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "path": "data[].ordering",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].fieldset_name",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].fieldset_title",
                            "type": "string|null",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/custom-fields\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "lookupBarcode",
            "slug": "lookup-barcode",
            "pagePath": "api/lookup-barcode",
            "group": "Lookup",
            "method": "GET",
            "operation": "/lookup/barcode",
            "summary": "Find the published item with an exact barcode",
            "title": "Lookup Barcode",
            "description": "Scope `lookups:read`. 404 when nothing matches.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "barcode",
                    "in": "query",
                    "type": "string",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The item.",
                    "example": {
                        "data": {
                            "id": 1,
                            "title": "string",
                            "alias": "string",
                            "item_type": "asset",
                            "sku": "string",
                            "barcode": "string",
                            "serial_number": "string",
                            "category_id": 1,
                            "category_title": "string",
                            "warehouse_id": 1,
                            "warehouse_title": "string",
                            "unit_id": 1,
                            "unit_title": "string",
                            "unit_code": "string",
                            "stock_quantity": 1.5,
                            "unit_price": 1.5,
                            "low_stock_threshold": 1.5,
                            "weight": 1.5,
                            "weight_unit": "string",
                            "track_weight": true,
                            "description": "string",
                            "image": "string",
                            "state": 1,
                            "created": "2026-01-01T12:00:00Z",
                            "modified": "2026-01-01T12:00:00Z"
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data.title",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data.alias",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.item_type",
                            "type": "string",
                            "description": "One of `asset`, `consumable`, `sellable`."
                        },
                        {
                            "path": "data.sku",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.barcode",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.serial_number",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.category_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data.category_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.warehouse_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data.warehouse_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.unit_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data.unit_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.unit_code",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.stock_quantity",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data.unit_price",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data.low_stock_threshold",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data.weight",
                            "type": "number|null",
                            "description": ""
                        },
                        {
                            "path": "data.weight_unit",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.track_weight",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "path": "data.description",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.image",
                            "type": "string|null",
                            "description": "Site-relative path of the original image."
                        },
                        {
                            "path": "data.state",
                            "type": "integer",
                            "description": "1 published, 0 unpublished."
                        },
                        {
                            "path": "data.created",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "data.modified",
                            "type": "string|null",
                            "description": "(date-time)"
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/lookup/barcode?barcode=value\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": "Barcode lookup endpoint",
            "seoDescription": "Find a Next Inventory item by its barcode, as a scanner or a web shop would.",
            "seoKeywords": "barcode lookup, scan barcode api, find item by barcode, inventory lookup"
        },
        {
            "id": "lookupSku",
            "slug": "lookup-sku",
            "pagePath": "api/lookup-sku",
            "group": "Lookup",
            "method": "GET",
            "operation": "/lookup/sku",
            "summary": "Find the published item with an exact SKU",
            "title": "Lookup Sku",
            "description": "Scope `lookups:read`. 404 when nothing matches.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "sku",
                    "in": "query",
                    "type": "string",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The item.",
                    "example": {
                        "data": {
                            "id": 1,
                            "title": "string",
                            "alias": "string",
                            "item_type": "asset",
                            "sku": "string",
                            "barcode": "string",
                            "serial_number": "string",
                            "category_id": 1,
                            "category_title": "string",
                            "warehouse_id": 1,
                            "warehouse_title": "string",
                            "unit_id": 1,
                            "unit_title": "string",
                            "unit_code": "string",
                            "stock_quantity": 1.5,
                            "unit_price": 1.5,
                            "low_stock_threshold": 1.5,
                            "weight": 1.5,
                            "weight_unit": "string",
                            "track_weight": true,
                            "description": "string",
                            "image": "string",
                            "state": 1,
                            "created": "2026-01-01T12:00:00Z",
                            "modified": "2026-01-01T12:00:00Z"
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data.title",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data.alias",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.item_type",
                            "type": "string",
                            "description": "One of `asset`, `consumable`, `sellable`."
                        },
                        {
                            "path": "data.sku",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.barcode",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.serial_number",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.category_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data.category_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.warehouse_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data.warehouse_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.unit_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data.unit_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.unit_code",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.stock_quantity",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data.unit_price",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data.low_stock_threshold",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data.weight",
                            "type": "number|null",
                            "description": ""
                        },
                        {
                            "path": "data.weight_unit",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.track_weight",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "path": "data.description",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.image",
                            "type": "string|null",
                            "description": "Site-relative path of the original image."
                        },
                        {
                            "path": "data.state",
                            "type": "integer",
                            "description": "1 published, 0 unpublished."
                        },
                        {
                            "path": "data.created",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "data.modified",
                            "type": "string|null",
                            "description": "(date-time)"
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/lookup/sku?sku=value\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "lookupSearch",
            "slug": "lookup-search",
            "pagePath": "api/lookup-search",
            "group": "Lookup",
            "method": "GET",
            "operation": "/lookup/search",
            "summary": "Up to 10 published items matching title, SKU, barcode or serial number",
            "title": "Lookup Search",
            "description": "Scope `lookups:read`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "q",
                    "in": "query",
                    "type": "string",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "Matches.",
                    "example": {
                        "data": [
                            {
                                "id": 1,
                                "title": "string",
                                "alias": "string",
                                "item_type": "asset",
                                "sku": "string",
                                "barcode": "string",
                                "serial_number": "string",
                                "category_id": 1,
                                "category_title": "string",
                                "warehouse_id": 1,
                                "warehouse_title": "string",
                                "unit_id": 1,
                                "unit_title": "string",
                                "unit_code": "string",
                                "stock_quantity": 1.5,
                                "unit_price": 1.5,
                                "low_stock_threshold": 1.5,
                                "weight": 1.5,
                                "weight_unit": "string",
                                "track_weight": true,
                                "description": "string",
                                "image": "string",
                                "state": 1,
                                "created": "2026-01-01T12:00:00Z",
                                "modified": "2026-01-01T12:00:00Z"
                            }
                        ]
                    },
                    "fields": [
                        {
                            "path": "data[].id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].title",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data[].alias",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].item_type",
                            "type": "string",
                            "description": "One of `asset`, `consumable`, `sellable`."
                        },
                        {
                            "path": "data[].sku",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].barcode",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].serial_number",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].category_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data[].category_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].warehouse_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data[].warehouse_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].unit_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data[].unit_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].unit_code",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].stock_quantity",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data[].unit_price",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data[].low_stock_threshold",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data[].weight",
                            "type": "number|null",
                            "description": ""
                        },
                        {
                            "path": "data[].weight_unit",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].track_weight",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "path": "data[].description",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].image",
                            "type": "string|null",
                            "description": "Site-relative path of the original image."
                        },
                        {
                            "path": "data[].state",
                            "type": "integer",
                            "description": "1 published, 0 unpublished."
                        },
                        {
                            "path": "data[].created",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "data[].modified",
                            "type": "string|null",
                            "description": "(date-time)"
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/lookup/search?q=value\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "listCategories",
            "slug": "categories",
            "pagePath": "api/categories",
            "group": "Categories",
            "method": "GET",
            "operation": "/categories",
            "summary": "List categories",
            "title": "List Categories",
            "description": "Scope `categories:read`; role permission `categories.view`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "limit",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 20,
                    "enum": null,
                    "example": null,
                    "description": "Page size. (min 1)"
                },
                {
                    "name": "offset",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 0,
                    "enum": null,
                    "example": null,
                    "description": "Rows to skip. (min 0)"
                },
                {
                    "name": "search",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "published",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": null,
                    "enum": [
                        0,
                        1
                    ],
                    "example": null,
                    "description": ""
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "A page of categories.",
                    "example": {
                        "data": [
                            {
                                "id": 1,
                                "code": "string",
                                "title": "string",
                                "description": "string",
                                "published": true,
                                "created": "2026-01-01T12:00:00Z",
                                "modified": "2026-01-01T12:00:00Z"
                            }
                        ],
                        "meta": {
                            "total": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data[].id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].code",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].title",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data[].description",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].published",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "path": "data[].created",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "data[].modified",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "meta.total",
                            "type": "integer",
                            "description": "Rows matching the filters, across all pages."
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/categories\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "createCategory",
            "slug": "post-categories",
            "pagePath": "api/post-categories",
            "group": "Categories",
            "method": "POST",
            "operation": "/categories",
            "summary": "Create a category",
            "title": "Create Category",
            "description": "Scope `categories:write`; role permission `categories.create`. Required: `title`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                }
            ],
            "requestBody": {
                "contentType": "application/json",
                "required": true,
                "description": "",
                "fields": [
                    {
                        "name": "title",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "code",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "description",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "published",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": [
                            0,
                            1
                        ],
                        "default": null,
                        "children": []
                    }
                ],
                "example": {
                    "title": "string",
                    "code": "string",
                    "description": "string",
                    "published": 0
                }
            },
            "responses": [
                {
                    "status": 201,
                    "description": "Created.",
                    "example": {
                        "data": {
                            "id": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X POST \"https://example.com/api/index.php/v1/nextinventory/categories\" \\\n  -H \"Authorization: Bearer $API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"title\":\"string\",\"code\":\"string\",\"description\":\"string\",\"published\":0}'"
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "getCategory",
            "slug": "get-categories",
            "pagePath": "api/get-categories",
            "group": "Categories",
            "method": "GET",
            "operation": "/categories/{id}",
            "summary": "Get one category",
            "title": "Get Category",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The category.",
                    "example": {
                        "data": {
                            "id": 1,
                            "code": "string",
                            "title": "string",
                            "description": "string",
                            "published": true,
                            "created": "2026-01-01T12:00:00Z",
                            "modified": "2026-01-01T12:00:00Z"
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data.code",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.title",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data.description",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.published",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "path": "data.created",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "data.modified",
                            "type": "string|null",
                            "description": "(date-time)"
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/categories/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "updateCategory",
            "slug": "patch-categories",
            "pagePath": "api/patch-categories",
            "group": "Categories",
            "method": "PATCH",
            "operation": "/categories/{id}",
            "summary": "Update a category",
            "title": "Update Category",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": {
                "contentType": "application/json",
                "required": true,
                "description": "",
                "fields": [
                    {
                        "name": "title",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "code",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "description",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "published",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": [
                            0,
                            1
                        ],
                        "default": null,
                        "children": []
                    }
                ],
                "example": {
                    "title": "string",
                    "code": "string",
                    "description": "string",
                    "published": 0
                }
            },
            "responses": [
                {
                    "status": 200,
                    "description": "Done.",
                    "example": {
                        "data": {
                            "id": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X PATCH \"https://example.com/api/index.php/v1/nextinventory/categories/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"title\":\"string\",\"code\":\"string\",\"description\":\"string\",\"published\":0}'"
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "deleteCategory",
            "slug": "delete-categories",
            "pagePath": "api/delete-categories",
            "group": "Categories",
            "method": "DELETE",
            "operation": "/categories/{id}",
            "summary": "Delete a category",
            "title": "Delete Category",
            "description": "Scope `categories:delete`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 204,
                    "description": "Deleted.",
                    "example": null,
                    "fields": [],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X DELETE \"https://example.com/api/index.php/v1/nextinventory/categories/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "setCategoryStatus",
            "slug": "categories-status",
            "pagePath": "api/categories-status",
            "group": "Categories",
            "method": "POST",
            "operation": "/categories/{id}/status",
            "summary": "Publish or unpublish a category",
            "title": "Set Category Status",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": {
                "contentType": "application/json",
                "required": true,
                "description": "",
                "fields": [
                    {
                        "name": "published",
                        "type": "boolean",
                        "required": true,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    }
                ],
                "example": {
                    "published": true
                }
            },
            "responses": [
                {
                    "status": 200,
                    "description": "The new status.",
                    "example": {
                        "data": {
                            "id": 1,
                            "published": true
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data.published",
                            "type": "boolean",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X POST \"https://example.com/api/index.php/v1/nextinventory/categories/1/status\" \\\n  -H \"Authorization: Bearer $API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"published\":true}'"
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "listWarehouses",
            "slug": "warehouses",
            "pagePath": "api/warehouses",
            "group": "Warehouses",
            "method": "GET",
            "operation": "/warehouses",
            "summary": "List warehouses",
            "title": "List Warehouses",
            "description": "Scope `warehouses:read`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "limit",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 20,
                    "enum": null,
                    "example": null,
                    "description": "Page size. (min 1)"
                },
                {
                    "name": "offset",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 0,
                    "enum": null,
                    "example": null,
                    "description": "Rows to skip. (min 0)"
                },
                {
                    "name": "search",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "published",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": null,
                    "enum": [
                        0,
                        1
                    ],
                    "example": null,
                    "description": ""
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "A page of warehouses.",
                    "example": {
                        "data": [
                            {
                                "id": 1,
                                "title": "string",
                                "address": "string",
                                "published": true,
                                "created": "2026-01-01T12:00:00Z",
                                "modified": "2026-01-01T12:00:00Z"
                            }
                        ],
                        "meta": {
                            "total": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data[].id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].title",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data[].address",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].published",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "path": "data[].created",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "data[].modified",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "meta.total",
                            "type": "integer",
                            "description": "Rows matching the filters, across all pages."
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/warehouses\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "createWarehouse",
            "slug": "post-warehouses",
            "pagePath": "api/post-warehouses",
            "group": "Warehouses",
            "method": "POST",
            "operation": "/warehouses",
            "summary": "Create a warehouse",
            "title": "Create Warehouse",
            "description": "Scope `warehouses:write`; role permission `configuration.manage_warehouses`. Required: `title`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                }
            ],
            "requestBody": {
                "contentType": "application/json",
                "required": true,
                "description": "",
                "fields": [
                    {
                        "name": "title",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "address",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "published",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": [
                            0,
                            1
                        ],
                        "default": null,
                        "children": []
                    }
                ],
                "example": {
                    "title": "string",
                    "address": "string",
                    "published": 0
                }
            },
            "responses": [
                {
                    "status": 201,
                    "description": "Created.",
                    "example": {
                        "data": {
                            "id": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X POST \"https://example.com/api/index.php/v1/nextinventory/warehouses\" \\\n  -H \"Authorization: Bearer $API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"title\":\"string\",\"address\":\"string\",\"published\":0}'"
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "getWarehouse",
            "slug": "get-warehouses",
            "pagePath": "api/get-warehouses",
            "group": "Warehouses",
            "method": "GET",
            "operation": "/warehouses/{id}",
            "summary": "Get one warehouse, with its custom fields",
            "title": "Get Warehouse",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The warehouse.",
                    "example": {
                        "data": {
                            "id": 1,
                            "title": "string",
                            "address": "string",
                            "published": true,
                            "created": "2026-01-01T12:00:00Z",
                            "modified": "2026-01-01T12:00:00Z",
                            "custom_fields": {}
                        }
                    },
                    "fields": [
                        {
                            "path": "data",
                            "type": "object",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/warehouses/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "updateWarehouse",
            "slug": "patch-warehouses",
            "pagePath": "api/patch-warehouses",
            "group": "Warehouses",
            "method": "PATCH",
            "operation": "/warehouses/{id}",
            "summary": "Update a warehouse",
            "title": "Update Warehouse",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": {
                "contentType": "application/json",
                "required": true,
                "description": "",
                "fields": [
                    {
                        "name": "title",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "address",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "published",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": [
                            0,
                            1
                        ],
                        "default": null,
                        "children": []
                    }
                ],
                "example": {
                    "title": "string",
                    "address": "string",
                    "published": 0
                }
            },
            "responses": [
                {
                    "status": 200,
                    "description": "Done.",
                    "example": {
                        "data": {
                            "id": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X PATCH \"https://example.com/api/index.php/v1/nextinventory/warehouses/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"title\":\"string\",\"address\":\"string\",\"published\":0}'"
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "deleteWarehouse",
            "slug": "delete-warehouses",
            "pagePath": "api/delete-warehouses",
            "group": "Warehouses",
            "method": "DELETE",
            "operation": "/warehouses/{id}",
            "summary": "Delete a warehouse",
            "title": "Delete Warehouse",
            "description": "Scope `warehouses:delete`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 204,
                    "description": "Deleted.",
                    "example": null,
                    "fields": [],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X DELETE \"https://example.com/api/index.php/v1/nextinventory/warehouses/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "setWarehouseStatus",
            "slug": "warehouses-status",
            "pagePath": "api/warehouses-status",
            "group": "Warehouses",
            "method": "POST",
            "operation": "/warehouses/{id}/status",
            "summary": "Publish or unpublish a warehouse",
            "title": "Set Warehouse Status",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": {
                "contentType": "application/json",
                "required": true,
                "description": "",
                "fields": [
                    {
                        "name": "published",
                        "type": "boolean",
                        "required": true,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    }
                ],
                "example": {
                    "published": true
                }
            },
            "responses": [
                {
                    "status": 200,
                    "description": "The new status.",
                    "example": {
                        "data": {
                            "id": 1,
                            "published": true
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data.published",
                            "type": "boolean",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X POST \"https://example.com/api/index.php/v1/nextinventory/warehouses/1/status\" \\\n  -H \"Authorization: Bearer $API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"published\":true}'"
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "listWarehouseInventory",
            "slug": "warehouses-inventory",
            "pagePath": "api/warehouses-inventory",
            "group": "Warehouses",
            "method": "GET",
            "operation": "/warehouses/{id}/inventory",
            "summary": "Items held in one warehouse",
            "title": "List Warehouse Inventory",
            "description": "Scope `warehouses:read`; role permission `warehouses.view`; needs the Warehouse Overview app.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "limit",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 20,
                    "enum": null,
                    "example": null,
                    "description": "Page size. (min 1)"
                },
                {
                    "name": "offset",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 0,
                    "enum": null,
                    "example": null,
                    "description": "Rows to skip. (min 0)"
                },
                {
                    "name": "search",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "A page of items.",
                    "example": {
                        "data": [
                            {
                                "id": 1,
                                "title": "string",
                                "alias": "string",
                                "item_type": "asset",
                                "sku": "string",
                                "barcode": "string",
                                "serial_number": "string",
                                "category_id": 1,
                                "category_title": "string",
                                "warehouse_id": 1,
                                "warehouse_title": "string",
                                "unit_id": 1,
                                "unit_title": "string",
                                "unit_code": "string",
                                "stock_quantity": 1.5,
                                "unit_price": 1.5,
                                "low_stock_threshold": 1.5,
                                "weight": 1.5,
                                "weight_unit": "string",
                                "track_weight": true,
                                "description": "string",
                                "image": "string",
                                "state": 1,
                                "created": "2026-01-01T12:00:00Z",
                                "modified": "2026-01-01T12:00:00Z"
                            }
                        ],
                        "meta": {
                            "total": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data[].id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].title",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data[].alias",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].item_type",
                            "type": "string",
                            "description": "One of `asset`, `consumable`, `sellable`."
                        },
                        {
                            "path": "data[].sku",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].barcode",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].serial_number",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].category_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data[].category_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].warehouse_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data[].warehouse_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].unit_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data[].unit_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].unit_code",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].stock_quantity",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data[].unit_price",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data[].low_stock_threshold",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data[].weight",
                            "type": "number|null",
                            "description": ""
                        },
                        {
                            "path": "data[].weight_unit",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].track_weight",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "path": "data[].description",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].image",
                            "type": "string|null",
                            "description": "Site-relative path of the original image."
                        },
                        {
                            "path": "data[].state",
                            "type": "integer",
                            "description": "1 published, 0 unpublished."
                        },
                        {
                            "path": "data[].created",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "data[].modified",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "meta.total",
                            "type": "integer",
                            "description": "Rows matching the filters, across all pages."
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/warehouses/1/inventory\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "listRecipients",
            "slug": "recipients",
            "pagePath": "api/recipients",
            "group": "Recipients",
            "method": "GET",
            "operation": "/recipients",
            "summary": "List recipients (people items are checked out to)",
            "title": "List Recipients",
            "description": "Scope `recipients:read`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "limit",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 20,
                    "enum": null,
                    "example": null,
                    "description": "Page size. (min 1)"
                },
                {
                    "name": "offset",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 0,
                    "enum": null,
                    "example": null,
                    "description": "Rows to skip. (min 0)"
                },
                {
                    "name": "search",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "published",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": null,
                    "enum": [
                        0,
                        1
                    ],
                    "example": null,
                    "description": ""
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "A page of recipients.",
                    "example": {
                        "data": [
                            {
                                "id": 1,
                                "name": "string",
                                "email": "string",
                                "department": "string",
                                "published": true,
                                "created": "2026-01-01T12:00:00Z",
                                "modified": "2026-01-01T12:00:00Z"
                            }
                        ],
                        "meta": {
                            "total": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data[].id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].name",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data[].email",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].department",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].published",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "path": "data[].created",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "data[].modified",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "meta.total",
                            "type": "integer",
                            "description": "Rows matching the filters, across all pages."
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/recipients\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "createRecipient",
            "slug": "post-recipients",
            "pagePath": "api/post-recipients",
            "group": "Recipients",
            "method": "POST",
            "operation": "/recipients",
            "summary": "Create a recipient",
            "title": "Create Recipient",
            "description": "Scope `recipients:write`; role permission `configuration.manage_recipients`. Required: `name`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                }
            ],
            "requestBody": {
                "contentType": "application/json",
                "required": true,
                "description": "",
                "fields": [
                    {
                        "name": "name",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "email",
                        "type": "string",
                        "required": false,
                        "description": "(email)",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "department",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "published",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": [
                            0,
                            1
                        ],
                        "default": null,
                        "children": []
                    }
                ],
                "example": {
                    "name": "string",
                    "email": "user@example.com",
                    "department": "string",
                    "published": 0
                }
            },
            "responses": [
                {
                    "status": 201,
                    "description": "Created.",
                    "example": {
                        "data": {
                            "id": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X POST \"https://example.com/api/index.php/v1/nextinventory/recipients\" \\\n  -H \"Authorization: Bearer $API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"string\",\"email\":\"user@example.com\",\"department\":\"string\",\"published\":0}'"
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "getRecipient",
            "slug": "get-recipients",
            "pagePath": "api/get-recipients",
            "group": "Recipients",
            "method": "GET",
            "operation": "/recipients/{id}",
            "summary": "Get one recipient, with its custom fields",
            "title": "Get Recipient",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The recipient.",
                    "example": {
                        "data": {
                            "id": 1,
                            "name": "string",
                            "email": "string",
                            "department": "string",
                            "published": true,
                            "created": "2026-01-01T12:00:00Z",
                            "modified": "2026-01-01T12:00:00Z",
                            "custom_fields": {}
                        }
                    },
                    "fields": [
                        {
                            "path": "data",
                            "type": "object",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/recipients/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "updateRecipient",
            "slug": "patch-recipients",
            "pagePath": "api/patch-recipients",
            "group": "Recipients",
            "method": "PATCH",
            "operation": "/recipients/{id}",
            "summary": "Update a recipient",
            "title": "Update Recipient",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": {
                "contentType": "application/json",
                "required": true,
                "description": "",
                "fields": [
                    {
                        "name": "name",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "email",
                        "type": "string",
                        "required": false,
                        "description": "(email)",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "department",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "published",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": [
                            0,
                            1
                        ],
                        "default": null,
                        "children": []
                    }
                ],
                "example": {
                    "name": "string",
                    "email": "user@example.com",
                    "department": "string",
                    "published": 0
                }
            },
            "responses": [
                {
                    "status": 200,
                    "description": "Done.",
                    "example": {
                        "data": {
                            "id": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X PATCH \"https://example.com/api/index.php/v1/nextinventory/recipients/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"string\",\"email\":\"user@example.com\",\"department\":\"string\",\"published\":0}'"
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "deleteRecipient",
            "slug": "delete-recipients",
            "pagePath": "api/delete-recipients",
            "group": "Recipients",
            "method": "DELETE",
            "operation": "/recipients/{id}",
            "summary": "Delete a recipient",
            "title": "Delete Recipient",
            "description": "Scope `recipients:delete`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 204,
                    "description": "Deleted.",
                    "example": null,
                    "fields": [],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X DELETE \"https://example.com/api/index.php/v1/nextinventory/recipients/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "setRecipientStatus",
            "slug": "recipients-status",
            "pagePath": "api/recipients-status",
            "group": "Recipients",
            "method": "POST",
            "operation": "/recipients/{id}/status",
            "summary": "Publish or unpublish a recipient",
            "title": "Set Recipient Status",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": {
                "contentType": "application/json",
                "required": true,
                "description": "",
                "fields": [
                    {
                        "name": "published",
                        "type": "boolean",
                        "required": true,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    }
                ],
                "example": {
                    "published": true
                }
            },
            "responses": [
                {
                    "status": 200,
                    "description": "The new status.",
                    "example": {
                        "data": {
                            "id": 1,
                            "published": true
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data.published",
                            "type": "boolean",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X POST \"https://example.com/api/index.php/v1/nextinventory/recipients/1/status\" \\\n  -H \"Authorization: Bearer $API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"published\":true}'"
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "listUnits",
            "slug": "units",
            "pagePath": "api/units",
            "group": "Units",
            "method": "GET",
            "operation": "/units",
            "summary": "List units of measurement",
            "title": "List Units",
            "description": "Scope `units:read`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "limit",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 20,
                    "enum": null,
                    "example": null,
                    "description": "Page size. (min 1)"
                },
                {
                    "name": "offset",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 0,
                    "enum": null,
                    "example": null,
                    "description": "Rows to skip. (min 0)"
                },
                {
                    "name": "search",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "published",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": null,
                    "enum": [
                        0,
                        1
                    ],
                    "example": null,
                    "description": ""
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "A page of units.",
                    "example": {
                        "data": [
                            {
                                "id": 1,
                                "title": "string",
                                "code": "string",
                                "base_unit_id": 1,
                                "operator": "*",
                                "operation_value": 1.5,
                                "published": true,
                                "created": "2026-01-01T12:00:00Z",
                                "modified": "2026-01-01T12:00:00Z"
                            }
                        ],
                        "meta": {
                            "total": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data[].id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].title",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data[].code",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data[].base_unit_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data[].operator",
                            "type": "string|null",
                            "description": "One of `*`, `/`, `+`, `-`, `null`."
                        },
                        {
                            "path": "data[].operation_value",
                            "type": "number|null",
                            "description": ""
                        },
                        {
                            "path": "data[].published",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "path": "data[].created",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "data[].modified",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "meta.total",
                            "type": "integer",
                            "description": "Rows matching the filters, across all pages."
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/units\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "createUnit",
            "slug": "post-units",
            "pagePath": "api/post-units",
            "group": "Units",
            "method": "POST",
            "operation": "/units",
            "summary": "Create a unit",
            "title": "Create Unit",
            "description": "Scope `units:write`; role permission `configuration.manage_units`; needs the Units app. Required: `title`, `code`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                }
            ],
            "requestBody": {
                "contentType": "application/json",
                "required": true,
                "description": "",
                "fields": [
                    {
                        "name": "title",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "code",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "base_unit_id",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "operator",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": [
                            "*",
                            "/",
                            "+",
                            "-"
                        ],
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "operation_value",
                        "type": "number",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "published",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": [
                            0,
                            1
                        ],
                        "default": null,
                        "children": []
                    }
                ],
                "example": {
                    "title": "string",
                    "code": "string",
                    "base_unit_id": 1,
                    "operator": "*",
                    "operation_value": 1.5,
                    "published": 0
                }
            },
            "responses": [
                {
                    "status": 201,
                    "description": "Created.",
                    "example": {
                        "data": {
                            "id": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X POST \"https://example.com/api/index.php/v1/nextinventory/units\" \\\n  -H \"Authorization: Bearer $API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"title\":\"string\",\"code\":\"string\",\"base_unit_id\":1,\"operator\":\"*\",\"operation_value\":1.5,\"published\":0}'"
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "getUnit",
            "slug": "get-units",
            "pagePath": "api/get-units",
            "group": "Units",
            "method": "GET",
            "operation": "/units/{id}",
            "summary": "Get one unit",
            "title": "Get Unit",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The unit.",
                    "example": {
                        "data": {
                            "id": 1,
                            "title": "string",
                            "code": "string",
                            "base_unit_id": 1,
                            "operator": "*",
                            "operation_value": 1.5,
                            "published": true,
                            "created": "2026-01-01T12:00:00Z",
                            "modified": "2026-01-01T12:00:00Z"
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data.title",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data.code",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data.base_unit_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data.operator",
                            "type": "string|null",
                            "description": "One of `*`, `/`, `+`, `-`, `null`."
                        },
                        {
                            "path": "data.operation_value",
                            "type": "number|null",
                            "description": ""
                        },
                        {
                            "path": "data.published",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "path": "data.created",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "data.modified",
                            "type": "string|null",
                            "description": "(date-time)"
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/units/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "updateUnit",
            "slug": "patch-units",
            "pagePath": "api/patch-units",
            "group": "Units",
            "method": "PATCH",
            "operation": "/units/{id}",
            "summary": "Update a unit",
            "title": "Update Unit",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": {
                "contentType": "application/json",
                "required": true,
                "description": "",
                "fields": [
                    {
                        "name": "title",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "code",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "base_unit_id",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "operator",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": [
                            "*",
                            "/",
                            "+",
                            "-"
                        ],
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "operation_value",
                        "type": "number",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "published",
                        "type": "integer",
                        "required": false,
                        "description": "",
                        "enum": [
                            0,
                            1
                        ],
                        "default": null,
                        "children": []
                    }
                ],
                "example": {
                    "title": "string",
                    "code": "string",
                    "base_unit_id": 1,
                    "operator": "*",
                    "operation_value": 1.5,
                    "published": 0
                }
            },
            "responses": [
                {
                    "status": 200,
                    "description": "Done.",
                    "example": {
                        "data": {
                            "id": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X PATCH \"https://example.com/api/index.php/v1/nextinventory/units/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"title\":\"string\",\"code\":\"string\",\"base_unit_id\":1,\"operator\":\"*\",\"operation_value\":1.5,\"published\":0}'"
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "deleteUnit",
            "slug": "delete-units",
            "pagePath": "api/delete-units",
            "group": "Units",
            "method": "DELETE",
            "operation": "/units/{id}",
            "summary": "Delete a unit",
            "title": "Delete Unit",
            "description": "Scope `units:delete`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 204,
                    "description": "Deleted.",
                    "example": null,
                    "fields": [],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X DELETE \"https://example.com/api/index.php/v1/nextinventory/units/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "setUnitStatus",
            "slug": "units-status",
            "pagePath": "api/units-status",
            "group": "Units",
            "method": "POST",
            "operation": "/units/{id}/status",
            "summary": "Publish or unpublish a unit",
            "title": "Set Unit Status",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": {
                "contentType": "application/json",
                "required": true,
                "description": "",
                "fields": [
                    {
                        "name": "published",
                        "type": "boolean",
                        "required": true,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    }
                ],
                "example": {
                    "published": true
                }
            },
            "responses": [
                {
                    "status": 200,
                    "description": "The new status.",
                    "example": {
                        "data": {
                            "id": 1,
                            "published": true
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data.published",
                            "type": "boolean",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X POST \"https://example.com/api/index.php/v1/nextinventory/units/1/status\" \\\n  -H \"Authorization: Bearer $API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"published\":true}'"
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "getUnitConversionChain",
            "slug": "units-conversion-chain",
            "pagePath": "api/units-conversion-chain",
            "group": "Units",
            "method": "GET",
            "operation": "/units/{id}/conversion-chain",
            "summary": "The chain of conversions from a unit to its base unit",
            "title": "Get Unit Conversion Chain",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The chain, from this unit to the base.",
                    "example": {
                        "data": [
                            {}
                        ]
                    },
                    "fields": [
                        {
                            "path": "data[]",
                            "type": "object[]",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/units/1/conversion-chain\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "listStockMovementTypes",
            "slug": "stock-movement-types",
            "pagePath": "api/stock-movement-types",
            "group": "Stock movements",
            "method": "GET",
            "operation": "/stock-movement-types",
            "summary": "The movement types the token owner may record",
            "title": "List Stock Movement Types",
            "description": "Scope `stock:read`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "Value / label pairs.",
                    "example": {
                        "data": [
                            {
                                "value": "string",
                                "label": "string"
                            }
                        ]
                    },
                    "fields": [
                        {
                            "path": "data[].value",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data[].label",
                            "type": "string",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/stock-movement-types\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "listStockMovements",
            "slug": "stock-movements",
            "pagePath": "api/stock-movements",
            "group": "Stock movements",
            "method": "GET",
            "operation": "/stock-movements",
            "summary": "List stock movements",
            "title": "List Stock Movements",
            "description": "Scope `stock:read`; the owner needs at least one movement permission.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "limit",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 20,
                    "enum": null,
                    "example": null,
                    "description": "Page size. (min 1)"
                },
                {
                    "name": "offset",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 0,
                    "enum": null,
                    "example": null,
                    "description": "Rows to skip. (min 0)"
                },
                {
                    "name": "search",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "movement_type",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "One type, or several comma-separated."
                },
                {
                    "name": "is_draft",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": null,
                    "enum": [
                        0,
                        1
                    ],
                    "example": null,
                    "description": ""
                },
                {
                    "name": "warehouse_id",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "recipient_id",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "date_from",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(date)"
                },
                {
                    "name": "date_to",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(date)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "A page of movements.",
                    "example": {
                        "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
                        }
                    },
                    "fields": [
                        {
                            "path": "data",
                            "type": "array",
                            "description": ""
                        },
                        {
                            "path": "meta.total",
                            "type": "integer",
                            "description": "Rows matching the filters, across all pages."
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/stock-movements\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "createStockMovement",
            "slug": "post-stock-movements",
            "pagePath": "api/post-stock-movements",
            "group": "Stock movements",
            "method": "POST",
            "operation": "/stock-movements",
            "summary": "Record a check-in, check-out, stock addition or stock removal",
            "title": "Create Stock Movement",
            "description": "Scope `stock:write`, plus the owner's role permission for the type (`transactions.checkin`,\n`checkout`, `add_stock`, `remove_stock`).\n\nWith `is_draft: false` the movement is finalized at once: stock changes and ledger rows are\nwritten. With `is_draft: true` (the default) nothing changes until\n`POST /stock-movements/{id}/finalize`.\n\nRules, the same as in Next Inventory itself: `check_out` needs a `recipient_id`;\n`check_out` / `remove_stock` are refused (400) when an item has less stock than requested;\n`check_in` / `check_out` take assets only, `add_stock` / `remove_stock` consumables and\nsellables only.\n",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                }
            ],
            "requestBody": {
                "contentType": "application/json",
                "required": true,
                "description": "",
                "fields": [
                    {
                        "name": "movement_type",
                        "type": "string",
                        "required": true,
                        "description": "",
                        "enum": [
                            "check_in",
                            "check_out",
                            "add_stock",
                            "remove_stock"
                        ],
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "movement_date",
                        "type": "string",
                        "required": true,
                        "description": "(date)",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "warehouse_id",
                        "type": "integer",
                        "required": true,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "recipient_id",
                        "type": "integer",
                        "required": false,
                        "description": "Required for check_out.",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "reference",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "details",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "is_draft",
                        "type": "boolean",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": true,
                        "children": []
                    },
                    {
                        "name": "items",
                        "type": "object[]",
                        "required": true,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": [
                            {
                                "name": "item_id",
                                "type": "integer",
                                "required": true,
                                "description": "",
                                "enum": null,
                                "default": null,
                                "children": []
                            },
                            {
                                "name": "quantity",
                                "type": "number",
                                "required": true,
                                "description": "",
                                "enum": null,
                                "default": null,
                                "children": []
                            },
                            {
                                "name": "cost_per_unit",
                                "type": "number",
                                "required": false,
                                "description": "Stock increases under FIFO/LIFO; defaults to the item's unit price.",
                                "enum": null,
                                "default": null,
                                "children": []
                            },
                            {
                                "name": "weight",
                                "type": "number",
                                "required": false,
                                "description": "",
                                "enum": null,
                                "default": null,
                                "children": []
                            },
                            {
                                "name": "weight_unit",
                                "type": "string",
                                "required": false,
                                "description": "",
                                "enum": null,
                                "default": null,
                                "children": []
                            }
                        ]
                    }
                ],
                "example": {
                    "movement_type": "add_stock",
                    "is_draft": false,
                    "movement_date": "2026-11-11",
                    "warehouse_id": 1,
                    "reference": "PO-1042",
                    "items": [
                        {
                            "item_id": 17,
                            "quantity": 40,
                            "cost_per_unit": 3.2
                        }
                    ]
                }
            },
            "responses": [
                {
                    "status": 201,
                    "description": "Created.",
                    "example": {
                        "data": {
                            "id": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X POST \"https://example.com/api/index.php/v1/nextinventory/stock-movements\" \\\n  -H \"Authorization: Bearer $API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"movement_type\":\"add_stock\",\"is_draft\":false,\"movement_date\":\"2026-11-11\",\"warehouse_id\":1,\"reference\":\"PO-1042\",\"items\":[{\"item_id\":17,\"quantity\":40,\"cost_per_unit\":3.2}]}'"
                }
            ],
            "sections": [],
            "seoTitle": "Create stock movement endpoint",
            "seoDescription": "POST /stock-movements records a check in, check out, add or remove batch, with the same stock rules as the screens and Idempotency-Key retries.",
            "seoKeywords": "stock movement api, check out, check in, add stock, remove stock, idempotency"
        },
        {
            "id": "getStockMovement",
            "slug": "get-stock-movements",
            "pagePath": "api/get-stock-movements",
            "group": "Stock movements",
            "method": "GET",
            "operation": "/stock-movements/{id}",
            "summary": "Get one movement with its lines",
            "title": "Get Stock Movement",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The movement.",
                    "example": {
                        "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",
                            "items": [
                                {
                                    "id": 1,
                                    "item_id": 1,
                                    "item_title": "string",
                                    "sku": "string",
                                    "quantity": 1.5,
                                    "weight": 1.5,
                                    "weight_unit": "string",
                                    "cost_per_unit": 1.5
                                }
                            ]
                        }
                    },
                    "fields": [
                        {
                            "path": "data",
                            "type": "object",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/stock-movements/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "deleteStockMovement",
            "slug": "delete-stock-movements",
            "pagePath": "api/delete-stock-movements",
            "group": "Stock movements",
            "method": "DELETE",
            "operation": "/stock-movements/{id}",
            "summary": "Delete a DRAFT movement",
            "title": "Delete Stock Movement",
            "description": "Scope `stock:write`. A finalized movement cannot be deleted (400): it is part of the audit trail.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 204,
                    "description": "Deleted.",
                    "example": null,
                    "fields": [],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X DELETE \"https://example.com/api/index.php/v1/nextinventory/stock-movements/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "finalizeStockMovement",
            "slug": "stock-movements-finalize",
            "pagePath": "api/stock-movements-finalize",
            "group": "Stock movements",
            "method": "POST",
            "operation": "/stock-movements/{id}/finalize",
            "summary": "Finalize a draft movement (applies the stock change)",
            "title": "Finalize Stock Movement",
            "description": "Scope `stock:write`. 400 when already finalized or when stock is insufficient.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "Done.",
                    "example": {
                        "data": {
                            "id": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X POST \"https://example.com/api/index.php/v1/nextinventory/stock-movements/1/finalize\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "listTransactions",
            "slug": "transactions",
            "pagePath": "api/transactions",
            "group": "Transactions",
            "method": "GET",
            "operation": "/transactions",
            "summary": "The ledger — every stock change, newest first",
            "title": "List Transactions",
            "description": "Scope `transactions:read`; role permission `transactions.view`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "limit",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 20,
                    "enum": null,
                    "example": null,
                    "description": "Page size. (min 1)"
                },
                {
                    "name": "offset",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 0,
                    "enum": null,
                    "example": null,
                    "description": "Rows to skip. (min 0)"
                },
                {
                    "name": "item_id",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "transaction_type",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "created_by",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "date_from",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(date)"
                },
                {
                    "name": "date_to",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(date)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "A page of ledger rows.",
                    "example": {
                        "data": [
                            {
                                "id": 1,
                                "item_id": 1,
                                "item_title": "string",
                                "item_sku": "string",
                                "transaction_type": "string",
                                "quantity_change": 1.5,
                                "new_quantity": 1.5,
                                "transaction_unit_id": 1,
                                "original_quantity": 1.5,
                                "cost_per_unit": 1.5,
                                "total_cost": 1.5,
                                "batch_id": "string",
                                "recipient_id": 1,
                                "recipient": "string",
                                "reason": "string",
                                "created_by": 1,
                                "created_by_name": "string",
                                "created": "2026-01-01T12:00:00Z"
                            }
                        ],
                        "meta": {
                            "total": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data[].id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].item_id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].item_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].item_sku",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].transaction_type",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data[].quantity_change",
                            "type": "number",
                            "description": "Signed: negative for stock out."
                        },
                        {
                            "path": "data[].new_quantity",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data[].transaction_unit_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data[].original_quantity",
                            "type": "number|null",
                            "description": ""
                        },
                        {
                            "path": "data[].cost_per_unit",
                            "type": "number|null",
                            "description": ""
                        },
                        {
                            "path": "data[].total_cost",
                            "type": "number|null",
                            "description": ""
                        },
                        {
                            "path": "data[].batch_id",
                            "type": "string|null",
                            "description": "Shared by every row of one movement/transfer/adjustment."
                        },
                        {
                            "path": "data[].recipient_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data[].recipient",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].reason",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].created_by",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].created_by_name",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].created",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "meta.total",
                            "type": "integer",
                            "description": "Rows matching the filters, across all pages."
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/transactions\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": "Transactions endpoint",
            "seoDescription": "GET /transactions reads the Next Inventory ledger: every stock change with item, quantity, recipient, reason, user and date.",
            "seoKeywords": "inventory ledger api, transactions, stock history, audit trail"
        },
        {
            "id": "getTransaction",
            "slug": "get-transactions",
            "pagePath": "api/get-transactions",
            "group": "Transactions",
            "method": "GET",
            "operation": "/transactions/{id}",
            "summary": "Get one ledger row",
            "title": "Get Transaction",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The transaction.",
                    "example": {
                        "data": {
                            "id": 1,
                            "item_id": 1,
                            "item_title": "string",
                            "item_sku": "string",
                            "transaction_type": "string",
                            "quantity_change": 1.5,
                            "new_quantity": 1.5,
                            "transaction_unit_id": 1,
                            "original_quantity": 1.5,
                            "cost_per_unit": 1.5,
                            "total_cost": 1.5,
                            "batch_id": "string",
                            "recipient_id": 1,
                            "recipient": "string",
                            "reason": "string",
                            "created_by": 1,
                            "created_by_name": "string",
                            "created": "2026-01-01T12:00:00Z"
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data.item_id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data.item_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.item_sku",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.transaction_type",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data.quantity_change",
                            "type": "number",
                            "description": "Signed: negative for stock out."
                        },
                        {
                            "path": "data.new_quantity",
                            "type": "number",
                            "description": ""
                        },
                        {
                            "path": "data.transaction_unit_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data.original_quantity",
                            "type": "number|null",
                            "description": ""
                        },
                        {
                            "path": "data.cost_per_unit",
                            "type": "number|null",
                            "description": ""
                        },
                        {
                            "path": "data.total_cost",
                            "type": "number|null",
                            "description": ""
                        },
                        {
                            "path": "data.batch_id",
                            "type": "string|null",
                            "description": "Shared by every row of one movement/transfer/adjustment."
                        },
                        {
                            "path": "data.recipient_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data.recipient",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.reason",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.created_by",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data.created_by_name",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data.created",
                            "type": "string|null",
                            "description": "(date-time)"
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/transactions/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "listTransfers",
            "slug": "transfers",
            "pagePath": "api/transfers",
            "group": "Transfers",
            "method": "GET",
            "operation": "/transfers",
            "summary": "List warehouse transfers",
            "title": "List Transfers",
            "description": "Scope `transfers:read`; role permission `inventory.manage_transfers`; needs the Transfers app.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "limit",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 20,
                    "enum": null,
                    "example": null,
                    "description": "Page size. (min 1)"
                },
                {
                    "name": "offset",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 0,
                    "enum": null,
                    "example": null,
                    "description": "Rows to skip. (min 0)"
                },
                {
                    "name": "search",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "is_draft",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": null,
                    "enum": [
                        0,
                        1
                    ],
                    "example": null,
                    "description": ""
                },
                {
                    "name": "from_warehouse_id",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "to_warehouse_id",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "date_from",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(date)"
                },
                {
                    "name": "date_to",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(date)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "A page of transfers.",
                    "example": {
                        "data": [
                            {
                                "id": 1,
                                "reference": "string",
                                "transfer_date": "2026-01-01",
                                "from_warehouse_id": 1,
                                "from_warehouse_title": "string",
                                "to_warehouse_id": 1,
                                "to_warehouse_title": "string",
                                "details": "string",
                                "is_draft": true,
                                "created": "2026-01-01T12:00:00Z",
                                "created_by": 1,
                                "modified": "2026-01-01T12:00:00Z"
                            }
                        ],
                        "meta": {
                            "total": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data[].id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].reference",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].transfer_date",
                            "type": "string|null",
                            "description": "(date)"
                        },
                        {
                            "path": "data[].from_warehouse_id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].from_warehouse_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].to_warehouse_id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].to_warehouse_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].details",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].is_draft",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "path": "data[].created",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "data[].created_by",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].modified",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "meta.total",
                            "type": "integer",
                            "description": "Rows matching the filters, across all pages."
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/transfers\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "createTransfer",
            "slug": "post-transfers",
            "pagePath": "api/post-transfers",
            "group": "Transfers",
            "method": "POST",
            "operation": "/transfers",
            "summary": "Move stock between two warehouses",
            "title": "Create Transfer",
            "description": "Scope `transfers:write`. `is_draft: false` finalizes at once.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                }
            ],
            "requestBody": {
                "contentType": "application/json",
                "required": true,
                "description": "",
                "fields": [
                    {
                        "name": "transfer_date",
                        "type": "string",
                        "required": true,
                        "description": "(date)",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "from_warehouse_id",
                        "type": "integer",
                        "required": true,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "to_warehouse_id",
                        "type": "integer",
                        "required": true,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "reference",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "details",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "is_draft",
                        "type": "boolean",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": true,
                        "children": []
                    },
                    {
                        "name": "items",
                        "type": "object[]",
                        "required": true,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": [
                            {
                                "name": "item_id",
                                "type": "integer",
                                "required": true,
                                "description": "",
                                "enum": null,
                                "default": null,
                                "children": []
                            },
                            {
                                "name": "quantity",
                                "type": "number",
                                "required": true,
                                "description": "",
                                "enum": null,
                                "default": null,
                                "children": []
                            }
                        ]
                    }
                ],
                "example": {
                    "transfer_date": "2026-11-11",
                    "from_warehouse_id": 1,
                    "to_warehouse_id": 2,
                    "is_draft": false,
                    "items": [
                        {
                            "item_id": 17,
                            "quantity": 5
                        }
                    ]
                }
            },
            "responses": [
                {
                    "status": 201,
                    "description": "Created.",
                    "example": {
                        "data": {
                            "id": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X POST \"https://example.com/api/index.php/v1/nextinventory/transfers\" \\\n  -H \"Authorization: Bearer $API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"transfer_date\":\"2026-11-11\",\"from_warehouse_id\":1,\"to_warehouse_id\":2,\"is_draft\":false,\"items\":[{\"item_id\":17,\"quantity\":5}]}'"
                }
            ],
            "sections": [],
            "seoTitle": "Create transfer endpoint",
            "seoDescription": "POST /transfers moves stock between warehouses as a draft or final document; finalizing checks each item has enough stock.",
            "seoKeywords": "warehouse transfer api, move stock, draft, finalize, multi-warehouse"
        },
        {
            "id": "getTransfer",
            "slug": "get-transfers",
            "pagePath": "api/get-transfers",
            "group": "Transfers",
            "method": "GET",
            "operation": "/transfers/{id}",
            "summary": "Get one transfer with its lines",
            "title": "Get Transfer",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The transfer.",
                    "example": {
                        "data": {
                            "id": 1,
                            "reference": "string",
                            "transfer_date": "2026-01-01",
                            "from_warehouse_id": 1,
                            "from_warehouse_title": "string",
                            "to_warehouse_id": 1,
                            "to_warehouse_title": "string",
                            "details": "string",
                            "is_draft": true,
                            "created": "2026-01-01T12:00:00Z",
                            "created_by": 1,
                            "modified": "2026-01-01T12:00:00Z",
                            "items": [
                                {
                                    "id": 1,
                                    "item_id": 1,
                                    "item_title": "string",
                                    "sku": "string",
                                    "quantity": 1.5
                                }
                            ]
                        }
                    },
                    "fields": [
                        {
                            "path": "data",
                            "type": "object",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/transfers/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "deleteTransfer",
            "slug": "delete-transfers",
            "pagePath": "api/delete-transfers",
            "group": "Transfers",
            "method": "DELETE",
            "operation": "/transfers/{id}",
            "summary": "Delete a DRAFT transfer",
            "title": "Delete Transfer",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 204,
                    "description": "Deleted.",
                    "example": null,
                    "fields": [],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X DELETE \"https://example.com/api/index.php/v1/nextinventory/transfers/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "finalizeTransfer",
            "slug": "transfers-finalize",
            "pagePath": "api/transfers-finalize",
            "group": "Transfers",
            "method": "POST",
            "operation": "/transfers/{id}/finalize",
            "summary": "Finalize a draft transfer",
            "title": "Finalize Transfer",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "Done.",
                    "example": {
                        "data": {
                            "id": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X POST \"https://example.com/api/index.php/v1/nextinventory/transfers/1/finalize\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "listAdjustmentTypes",
            "slug": "adjustment-types",
            "pagePath": "api/adjustment-types",
            "group": "Adjustments",
            "method": "GET",
            "operation": "/adjustment-types",
            "summary": "Adjustment types (addition, damage, subtraction)",
            "title": "List Adjustment Types",
            "description": "Scope `adjustments:read`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "Value / label pairs.",
                    "example": {
                        "data": [
                            {
                                "value": "string",
                                "label": "string"
                            }
                        ]
                    },
                    "fields": [
                        {
                            "path": "data[].value",
                            "type": "string",
                            "description": ""
                        },
                        {
                            "path": "data[].label",
                            "type": "string",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/adjustment-types\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "listAdjustments",
            "slug": "adjustments",
            "pagePath": "api/adjustments",
            "group": "Adjustments",
            "method": "GET",
            "operation": "/adjustments",
            "summary": "List stock adjustments",
            "title": "List Adjustments",
            "description": "Scope `adjustments:read`; role permission `inventory.manage_adjustments`; needs the Adjustments app.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "limit",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 20,
                    "enum": null,
                    "example": null,
                    "description": "Page size. (min 1)"
                },
                {
                    "name": "offset",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 0,
                    "enum": null,
                    "example": null,
                    "description": "Rows to skip. (min 0)"
                },
                {
                    "name": "search",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "is_draft",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": null,
                    "enum": [
                        0,
                        1
                    ],
                    "example": null,
                    "description": ""
                },
                {
                    "name": "adjustment_type",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": [
                        "addition",
                        "damage",
                        "subtraction"
                    ],
                    "example": null,
                    "description": ""
                },
                {
                    "name": "warehouse_id",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "date_from",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(date)"
                },
                {
                    "name": "date_to",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(date)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "A page of adjustments.",
                    "example": {
                        "data": [
                            {
                                "id": 1,
                                "reference": "string",
                                "adjustment_date": "2026-01-01",
                                "adjustment_type": "addition",
                                "warehouse_id": 1,
                                "warehouse_title": "string",
                                "details": "string",
                                "is_draft": true,
                                "created": "2026-01-01T12:00:00Z",
                                "created_by": 1,
                                "modified": "2026-01-01T12:00:00Z"
                            }
                        ],
                        "meta": {
                            "total": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data[].id",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].reference",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].adjustment_date",
                            "type": "string|null",
                            "description": "(date)"
                        },
                        {
                            "path": "data[].adjustment_type",
                            "type": "string",
                            "description": "One of `addition`, `damage`, `subtraction`."
                        },
                        {
                            "path": "data[].warehouse_id",
                            "type": "integer|null",
                            "description": ""
                        },
                        {
                            "path": "data[].warehouse_title",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].details",
                            "type": "string|null",
                            "description": ""
                        },
                        {
                            "path": "data[].is_draft",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "path": "data[].created",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "data[].created_by",
                            "type": "integer",
                            "description": ""
                        },
                        {
                            "path": "data[].modified",
                            "type": "string|null",
                            "description": "(date-time)"
                        },
                        {
                            "path": "meta.total",
                            "type": "integer",
                            "description": "Rows matching the filters, across all pages."
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/adjustments\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "createAdjustment",
            "slug": "post-adjustments",
            "pagePath": "api/post-adjustments",
            "group": "Adjustments",
            "method": "POST",
            "operation": "/adjustments",
            "summary": "Record found, damaged or lost stock",
            "title": "Create Adjustment",
            "description": "Scope `adjustments:write`. `is_draft: false` finalizes at once.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                }
            ],
            "requestBody": {
                "contentType": "application/json",
                "required": true,
                "description": "",
                "fields": [
                    {
                        "name": "adjustment_date",
                        "type": "string",
                        "required": true,
                        "description": "(date)",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "adjustment_type",
                        "type": "string",
                        "required": true,
                        "description": "",
                        "enum": [
                            "addition",
                            "damage",
                            "subtraction"
                        ],
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "warehouse_id",
                        "type": "integer",
                        "required": true,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "reference",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "details",
                        "type": "string",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": []
                    },
                    {
                        "name": "is_draft",
                        "type": "boolean",
                        "required": false,
                        "description": "",
                        "enum": null,
                        "default": true,
                        "children": []
                    },
                    {
                        "name": "items",
                        "type": "object[]",
                        "required": true,
                        "description": "",
                        "enum": null,
                        "default": null,
                        "children": [
                            {
                                "name": "item_id",
                                "type": "integer",
                                "required": true,
                                "description": "",
                                "enum": null,
                                "default": null,
                                "children": []
                            },
                            {
                                "name": "quantity",
                                "type": "number",
                                "required": true,
                                "description": "",
                                "enum": null,
                                "default": null,
                                "children": []
                            }
                        ]
                    }
                ],
                "example": {
                    "adjustment_date": "2026-11-11",
                    "adjustment_type": "damage",
                    "warehouse_id": 1,
                    "details": "Water damage",
                    "is_draft": false,
                    "items": [
                        {
                            "item_id": 17,
                            "quantity": 2
                        }
                    ]
                }
            },
            "responses": [
                {
                    "status": 201,
                    "description": "Created.",
                    "example": {
                        "data": {
                            "id": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X POST \"https://example.com/api/index.php/v1/nextinventory/adjustments\" \\\n  -H \"Authorization: Bearer $API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"adjustment_date\":\"2026-11-11\",\"adjustment_type\":\"damage\",\"warehouse_id\":1,\"details\":\"Water damage\",\"is_draft\":false,\"items\":[{\"item_id\":17,\"quantity\":2}]}'"
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "getAdjustment",
            "slug": "get-adjustments",
            "pagePath": "api/get-adjustments",
            "group": "Adjustments",
            "method": "GET",
            "operation": "/adjustments/{id}",
            "summary": "Get one adjustment with its lines",
            "title": "Get Adjustment",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The adjustment.",
                    "example": {
                        "data": {
                            "id": 1,
                            "reference": "string",
                            "adjustment_date": "2026-01-01",
                            "adjustment_type": "addition",
                            "warehouse_id": 1,
                            "warehouse_title": "string",
                            "details": "string",
                            "is_draft": true,
                            "created": "2026-01-01T12:00:00Z",
                            "created_by": 1,
                            "modified": "2026-01-01T12:00:00Z",
                            "items": [
                                {
                                    "id": 1,
                                    "item_id": 1,
                                    "item_title": "string",
                                    "sku": "string",
                                    "quantity": 1.5
                                }
                            ]
                        }
                    },
                    "fields": [
                        {
                            "path": "data",
                            "type": "object",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/adjustments/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "deleteAdjustment",
            "slug": "delete-adjustments",
            "pagePath": "api/delete-adjustments",
            "group": "Adjustments",
            "method": "DELETE",
            "operation": "/adjustments/{id}",
            "summary": "Delete a DRAFT adjustment",
            "title": "Delete Adjustment",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 204,
                    "description": "Deleted.",
                    "example": null,
                    "fields": [],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X DELETE \"https://example.com/api/index.php/v1/nextinventory/adjustments/1\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "finalizeAdjustment",
            "slug": "adjustments-finalize",
            "pagePath": "api/adjustments-finalize",
            "group": "Adjustments",
            "method": "POST",
            "operation": "/adjustments/{id}/finalize",
            "summary": "Finalize a draft adjustment",
            "title": "Finalize Adjustment",
            "description": "",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "id",
                    "in": "path",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(min 1)"
                },
                {
                    "name": "Idempotency-Key",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. Any unique string (1 to 191 printable ASCII characters, no spaces; a UUID is\nideal). The request runs once: a retry with the same key gets the first response back,\nwith the header `Idempotent-Replayed: true`, instead of running again. Keys are kept for\n24 hours per token. `409 IDEMPOTENCY_IN_PROGRESS` while the first request is still\nrunning; `422 IDEMPOTENCY_KEY_REUSED` if the key comes with a different request. A 5xx\nanswer is not kept, so it can be retried with the same key. (min length 1, max length 191, pattern `^[\\x21-\\x7E]+$`)"
                },
                {
                    "name": "If-Match",
                    "in": "header",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "Optional. The `ETag` from your last read of this record. The change is made only if the\nrecord is still that version; otherwise `412 PRECONDITION_FAILED` and nothing changes, so\ntwo systems editing one record cannot silently overwrite each other. `*` matches any\nexisting record.\n"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "Done.",
                    "example": {
                        "data": {
                            "id": 1
                        }
                    },
                    "fields": [
                        {
                            "path": "data.id",
                            "type": "integer",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s -X POST \"https://example.com/api/index.php/v1/nextinventory/adjustments/1/finalize\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "reportStockValuation",
            "slug": "reports-stock-valuation",
            "pagePath": "api/reports-stock-valuation",
            "group": "Reports",
            "method": "GET",
            "operation": "/reports/stock-valuation",
            "summary": "Stock value by category, with totals",
            "title": "Report Stock Valuation",
            "description": "Scope `reports:read`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The report, in the same shape the Reports screen reads. Its structure may grow between minor versions.",
                    "example": {
                        "data": "string"
                    },
                    "fields": [
                        {
                            "path": "data",
                            "type": "object",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/reports/stock-valuation\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "reportLowStock",
            "slug": "reports-low-stock",
            "pagePath": "api/reports-low-stock",
            "group": "Reports",
            "method": "GET",
            "operation": "/reports/low-stock",
            "summary": "Items at or below their low-stock threshold",
            "title": "Report Low Stock",
            "description": "Scope `reports:read`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The report, in the same shape the Reports screen reads. Its structure may grow between minor versions.",
                    "example": {
                        "data": "string"
                    },
                    "fields": [
                        {
                            "path": "data",
                            "type": "object",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/reports/low-stock\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "reportStockByWarehouse",
            "slug": "reports-stock-by-warehouse",
            "pagePath": "api/reports-stock-by-warehouse",
            "group": "Reports",
            "method": "GET",
            "operation": "/reports/stock-by-warehouse",
            "summary": "Quantity and value per warehouse",
            "title": "Report Stock By Warehouse",
            "description": "Scope `reports:read`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The report, in the same shape the Reports screen reads. Its structure may grow between minor versions.",
                    "example": {
                        "data": "string"
                    },
                    "fields": [
                        {
                            "path": "data",
                            "type": "object",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/reports/stock-by-warehouse\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "reportStockByType",
            "slug": "reports-stock-by-type",
            "pagePath": "api/reports-stock-by-type",
            "group": "Reports",
            "method": "GET",
            "operation": "/reports/stock-by-type",
            "summary": "Quantity and value per item type",
            "title": "Report Stock By Type",
            "description": "Scope `reports:read`; needs the Reports app.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The report, in the same shape the Reports screen reads. Its structure may grow between minor versions.",
                    "example": {
                        "data": "string"
                    },
                    "fields": [
                        {
                            "path": "data",
                            "type": "object",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/reports/stock-by-type\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "reportStockMovement",
            "slug": "reports-stock-movement",
            "pagePath": "api/reports-stock-movement",
            "group": "Reports",
            "method": "GET",
            "operation": "/reports/stock-movement",
            "summary": "Stock in and out per day",
            "title": "Report Stock Movement",
            "description": "Scope `reports:read`; needs the Reports app.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "date_from",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(date)"
                },
                {
                    "name": "date_to",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(date)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The report, in the same shape the Reports screen reads. Its structure may grow between minor versions.",
                    "example": {
                        "data": "string"
                    },
                    "fields": [
                        {
                            "path": "data",
                            "type": "object",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/reports/stock-movement\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "reportTransactionTrends",
            "slug": "reports-transaction-trends",
            "pagePath": "api/reports-transaction-trends",
            "group": "Reports",
            "method": "GET",
            "operation": "/reports/transaction-trends",
            "summary": "Transaction counts by type over time",
            "title": "Report Transaction Trends",
            "description": "Scope `reports:read`; needs the Reports app.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "period",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 30,
                    "enum": null,
                    "example": null,
                    "description": "Days, when no date range is given."
                },
                {
                    "name": "date_from",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(date)"
                },
                {
                    "name": "date_to",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": "(date)"
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The report, in the same shape the Reports screen reads. Its structure may grow between minor versions.",
                    "example": {
                        "data": "string"
                    },
                    "fields": [
                        {
                            "path": "data",
                            "type": "object",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/reports/transaction-trends\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "reportKpiTrends",
            "slug": "reports-kpi-trends",
            "pagePath": "api/reports-kpi-trends",
            "group": "Reports",
            "method": "GET",
            "operation": "/reports/kpi-trends",
            "summary": "Dashboard KPIs compared with the previous period",
            "title": "Report Kpi Trends",
            "description": "Scope `reports:read`.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "days",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 30,
                    "enum": null,
                    "example": null,
                    "description": ""
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The report, in the same shape the Reports screen reads. Its structure may grow between minor versions.",
                    "example": {
                        "data": "string"
                    },
                    "fields": [
                        {
                            "path": "data",
                            "type": "object",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/reports/kpi-trends\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "reportTopPerformers",
            "slug": "reports-top-performers",
            "pagePath": "api/reports-top-performers",
            "group": "Reports",
            "method": "GET",
            "operation": "/reports/top-performers",
            "summary": "Most (or least) moved items",
            "title": "Report Top Performers",
            "description": "Scope `reports:read`; needs the Reports app.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "limit",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 10,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "days",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 30,
                    "enum": null,
                    "example": null,
                    "description": ""
                },
                {
                    "name": "type",
                    "in": "query",
                    "type": "string",
                    "required": false,
                    "default": "best",
                    "enum": [
                        "best",
                        "worst"
                    ],
                    "example": null,
                    "description": ""
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The report, in the same shape the Reports screen reads. Its structure may grow between minor versions.",
                    "example": {
                        "data": "string"
                    },
                    "fields": [
                        {
                            "path": "data",
                            "type": "object",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/reports/top-performers\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "reportCategoryDrilldown",
            "slug": "reports-category-drilldown",
            "pagePath": "api/reports-category-drilldown",
            "group": "Reports",
            "method": "GET",
            "operation": "/reports/category-drilldown",
            "summary": "Items and value inside one category",
            "title": "Report Category Drilldown",
            "description": "Scope `reports:read`; needs the Reports app.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "category_id",
                    "in": "query",
                    "type": "integer",
                    "required": true,
                    "default": null,
                    "enum": null,
                    "example": null,
                    "description": ""
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The report, in the same shape the Reports screen reads. Its structure may grow between minor versions.",
                    "example": {
                        "data": "string"
                    },
                    "fields": [
                        {
                            "path": "data",
                            "type": "object",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/reports/category-drilldown?category_id=value\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "reportCogs",
            "slug": "reports-cogs",
            "pagePath": "api/reports-cogs",
            "group": "Reports",
            "method": "GET",
            "operation": "/reports/cogs",
            "summary": "Cost of goods sold (FIFO/LIFO)",
            "title": "Report Cogs",
            "description": "Scope `reports:read`; needs the Reports app.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [
                {
                    "name": "period",
                    "in": "query",
                    "type": "integer",
                    "required": false,
                    "default": 30,
                    "enum": null,
                    "example": null,
                    "description": ""
                }
            ],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The report, in the same shape the Reports screen reads. Its structure may grow between minor versions.",
                    "example": {
                        "data": "string"
                    },
                    "fields": [
                        {
                            "path": "data",
                            "type": "object",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/reports/cogs\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        },
        {
            "id": "reportInventoryAging",
            "slug": "reports-inventory-aging",
            "pagePath": "api/reports-inventory-aging",
            "group": "Reports",
            "method": "GET",
            "operation": "/reports/inventory-aging",
            "summary": "Age of stock still held, by cost layer",
            "title": "Report Inventory Aging",
            "description": "Scope `reports:read`; needs the Reports app.",
            "stability": "stable",
            "deprecated": null,
            "auth": true,
            "params": [],
            "requestBody": null,
            "responses": [
                {
                    "status": 200,
                    "description": "The report, in the same shape the Reports screen reads. Its structure may grow between minor versions.",
                    "example": {
                        "data": "string"
                    },
                    "fields": [
                        {
                            "path": "data",
                            "type": "object",
                            "description": ""
                        }
                    ],
                    "notes": ""
                }
            ],
            "errors": [
                "http_4XX"
            ],
            "rateLimit": null,
            "samples": [
                {
                    "lang": "bash",
                    "label": "curl",
                    "code": "curl -s \"https://example.com/api/index.php/v1/nextinventory/reports/inventory-aging\" \\\n  -H \"Authorization: Bearer $API_TOKEN\""
                }
            ],
            "sections": [],
            "seoTitle": null,
            "seoDescription": null,
            "seoKeywords": null
        }
    ],
    "errors": [
        {
            "id": "http_4XX",
            "status": 4,
            "code": null,
            "when": "A refusal. Common codes: `MISSING_TOKEN` / `INVALID_TOKEN` (401); `API_DISABLED`,\n`ACCOUNT_UNUSABLE`, `ACCESS_DENIED`, `TASK_NOT_ALLOWED`, `MISSING_SCOPE`, `APP_DISABLED`,\n`DEMO_LOCKED`, `FORBIDDEN` (403); `NOT_FOUND` (404); `BAD_REQUEST` / `INVALID_JSON` /\n`INVALID_IDEMPOTENCY_KEY` (400, validation and stock rules, with the reason in `title`);\n`IDEMPOTENCY_IN_PROGRESS` (409); `PRECONDITION_FAILED` (412, the record changed since the\n`If-Match` ETag was read); `IDEMPOTENCY_KEY_REUSED` (422); `RATE_LIMITED` /\n`TOO_MANY_FAILED_LOGINS` (429, with a `Retry-After` header in seconds); `SERVER_ERROR` (500).\n",
            "body": null,
            "global": true
        }
    ],
    "rateLimits": [],
    "webhooks": {
        "description": "Outbound events. When stock or a record changes, Next Inventory sends an HTTP POST to each webhook subscribed to that event, so another system can react without polling.\n\nA webhook says something happened; the REST API reads the full record. To keep another system's stock in step, subscribe to `stock.changed`: it covers every way stock can change.",
        "configuredIn": "Configuration → Webhooks",
        "transport": {
            "method": "POST",
            "contentType": "application/json"
        },
        "envelope": {
            "example": {
                "event": "stock.changed",
                "timestamp": "2026-11-11T09:30:00Z",
                "site": "https://your-site.example",
                "data": []
            },
            "fields": [
                {
                    "path": "event",
                    "type": "string",
                    "description": "The event name. The same as the `X-NextInventory-Event` header."
                },
                {
                    "path": "timestamp",
                    "type": "string",
                    "description": "ISO 8601, when the event happened. Unchanged on a retry."
                },
                {
                    "path": "site",
                    "type": "string",
                    "description": "The sending site's root address, so one receiver can serve several sites."
                },
                {
                    "path": "data",
                    "type": "object",
                    "description": "The event's own fields."
                }
            ]
        },
        "signing": {
            "header": "webhook-signature",
            "algorithm": "HMAC-SHA256",
            "format": "v1,<base64>",
            "signedPayload": "`{webhook-id}.{webhook-timestamp}.{raw body}`",
            "secretSetting": "Signing secret (each webhook in Configuration → Webhooks)",
            "notes": [
                "Two schemes are sent on every delivery; verify **either one**: the Standard Webhooks `webhook-signature` (base64, signs id, timestamp and body) or `X-NextInventory-Signature` (`sha256=` + hex HMAC of the raw body only).",
                "Each webhook has its own secret. A generated secret starts with `whsec_` and is base64: the HMAC key is the **decoded bytes** after the prefix. A secret you typed yourself is used as-is.",
                "Compute the HMAC over the bytes as received; re-encoding the parsed JSON changes them and the check fails. Compare with a constant-time function.",
                "Reject a `webhook-timestamp` more than about 300 seconds old to refuse replayed messages. `X-NextInventory-Signature` has no timestamp, so it cannot tell a replay from a fresh delivery.",
                "Making a new secret takes effect on the next delivery, so update the receiver first.",
                "`webhook-id` (`msg_<delivery id>`) and `X-NextInventory-Delivery` are the same on every retry of one delivery: dedupe on them."
            ],
            "sample": {
                "lang": "php",
                "label": "Verify a Standard Webhooks signature in PHP",
                "code": "$body = file_get_contents('php://input');\n$id   = $_SERVER['HTTP_WEBHOOK_ID'] ?? '';\n$ts   = $_SERVER['HTTP_WEBHOOK_TIMESTAMP'] ?? '';\n$sigs = $_SERVER['HTTP_WEBHOOK_SIGNATURE'] ?? '';\n\nif (abs(time() - (int) $ts) > 300) {\n    http_response_code(401);\n    exit;\n}\n\n$key      = str_starts_with($secret, 'whsec_') ? base64_decode(substr($secret, 6)) : $secret;\n$expected = 'v1,' . base64_encode(hash_hmac('sha256', \"$id.$ts.$body\", $key, true));\n$valid    = false;\n\nforeach (explode(' ', $sigs) as $sig) {\n    $valid = $valid || hash_equals($expected, $sig);\n}\n\nif (!$valid) {\n    http_response_code(401);\n    exit;\n}\n\n$event = json_decode($body, true);"
            }
        },
        "delivery": {
            "retries": 7,
            "retrySchedule": [
                "1m",
                "5m",
                "30m",
                "2h",
                "6h",
                "12h",
                "24h"
            ],
            "ordering": "none",
            "log": "The **Deliveries** tab of the Webhooks screen lists every delivery with its event, status (pending, sent, failed), attempts, HTTP code and last error, with a status filter and **Resend**.",
            "consumerAdvice": [
                "**Answer 2xx within 8 seconds.** Anything else is retried after 1m, 5m, 30m, 2h, 6h, 12h and 24h; after the 8th failed attempt the delivery is marked failed. Answer `410 Gone` to stop at once.",
                "**Be idempotent.** Dedupe on `webhook-id`: a retry or a Resend carries the same id.",
                "**Expect any order.** A retry can arrive after a later event about the same item.",
                "**Retries need the scheduled task** \"Next Inventory: Retry webhook deliveries\", created when the first webhook is saved. The Health tab warns when deliveries are overdue.",
                "**The endpoint must be reachable from your server.** Private and local addresses are refused unless a Super User allows them.",
                "**Ignore fields you do not recognise.** New fields may be added over time."
            ]
        },
        "selection": "Tick the events each webhook should receive. A webhook only receives the events it subscribes to; **Send a test ping** sends `ping` to it whatever it subscribes to.",
        "events": [
            {
                "name": "stock.changed",
                "slug": "stock-changed",
                "pagePath": "api/events/stock-changed",
                "summary": "An item's stock quantity changed, in any way",
                "trigger": "One message per item whose quantity changed: a stock movement, transfer or adjustment is finalized, the Items page's Check In / Check Out / Add / Remove dialog is saved, a quantity is typed into the item form, or an item is created with an opening quantity. Subscribe to this one to keep another system's stock in step.",
                "description": "",
                "testOnly": false,
                "fields": [
                    {
                        "name": "data",
                        "type": "object",
                        "description": "`item_id`, `title`, `sku`, `old_quantity`, `new_quantity`, `change`, `low_stock_threshold`, `warehouse_id`, and `source` + `source_id`: what changed it (`stock_movement`, `transfer`, `adjustment`, `transaction`, `item_edit`, `item_create`) and that record's id."
                    }
                ],
                "payload": {
                    "event": "stock.changed",
                    "timestamp": "2026-11-11T09:30:00Z",
                    "site": "https://your-site.example",
                    "data": {
                        "item_id": 17,
                        "title": "A4 Copy Paper",
                        "sku": "OFFC-001",
                        "old_quantity": 26,
                        "new_quantity": 16,
                        "change": -10,
                        "low_stock_threshold": 18,
                        "warehouse_id": 1,
                        "source": "transaction",
                        "source_id": 9412
                    }
                },
                "variants": []
            },
            {
                "name": "stock.low",
                "slug": "stock-low",
                "pagePath": "api/events/stock-low",
                "summary": "An item fell to its low-stock threshold",
                "trigger": "Sent once, when a stock change of any kind takes the item across its threshold. Not sent again while the item stays low.",
                "description": "",
                "testOnly": false,
                "fields": [
                    {
                        "name": "data",
                        "type": "object",
                        "description": "`item_id`, `title`, `sku`, `stock_quantity`, `low_stock_threshold`, `warehouse_id`."
                    }
                ],
                "payload": {
                    "event": "stock.low",
                    "timestamp": "2026-11-11T09:30:00Z",
                    "site": "https://your-site.example",
                    "data": {
                        "item_id": 17,
                        "title": "A4 Copy Paper",
                        "sku": "OFFC-001",
                        "stock_quantity": 4,
                        "low_stock_threshold": 5,
                        "warehouse_id": 1
                    }
                },
                "variants": []
            },
            {
                "name": "stock_movement.finalized",
                "slug": "stock-movement-finalized",
                "pagePath": "api/events/stock-movement-finalized",
                "summary": "A check in, check out, add or remove batch was finalized",
                "trigger": "A stock movement is saved as final or finalized from a draft, on screen or through the API.",
                "description": "",
                "testOnly": false,
                "fields": [
                    {
                        "name": "data",
                        "type": "object",
                        "description": "The whole document: `id`, `movement_type`, `reference`, `batch_id`, `movement_date`, `warehouse_id`, `recipient_id`, `recipient_name`, `created_by` and `lines` (each with `item_id`, `title`, `sku`, `quantity` and the item's `stock_quantity` after the movement)."
                    }
                ],
                "payload": {
                    "event": "stock_movement.finalized",
                    "timestamp": "2026-11-11T09:30:00Z",
                    "site": "https://your-site.example",
                    "data": {
                        "id": 812,
                        "movement_type": "check_out",
                        "reference": "REQ-2231",
                        "batch_id": "c5b0e1",
                        "movement_date": "2026-11-11",
                        "warehouse_id": 1,
                        "recipient_id": 5,
                        "recipient_name": "Dana Smith",
                        "created_by": 412,
                        "lines": [
                            {
                                "item_id": 23,
                                "title": "Laptop 14\"",
                                "sku": "IT-0023",
                                "quantity": 1,
                                "stock_quantity": 6
                            }
                        ]
                    }
                },
                "variants": []
            },
            {
                "name": "transfer.finalized",
                "slug": "transfer-finalized",
                "pagePath": "api/events/transfer-finalized",
                "summary": "A warehouse transfer was finalized",
                "trigger": "A transfer is saved as final or finalized from a draft.",
                "description": "",
                "testOnly": false,
                "fields": [
                    {
                        "name": "data",
                        "type": "object",
                        "description": "`id`, `reference`, `transfer_date`, `from_warehouse_id`, `to_warehouse_id`, `created_by`, `lines`."
                    }
                ],
                "payload": {
                    "event": "transfer.finalized",
                    "timestamp": "2026-11-11T09:30:00Z",
                    "site": "https://your-site.example",
                    "data": {
                        "id": 44,
                        "reference": "TR-0044",
                        "transfer_date": "2026-11-11",
                        "from_warehouse_id": 1,
                        "to_warehouse_id": 2,
                        "created_by": 412,
                        "lines": [
                            {
                                "item_id": 17,
                                "title": "A4 Copy Paper",
                                "sku": "OFFC-001",
                                "quantity": 10,
                                "stock_quantity": 16
                            }
                        ]
                    }
                },
                "variants": []
            },
            {
                "name": "adjustment.finalized",
                "slug": "adjustment-finalized",
                "pagePath": "api/events/adjustment-finalized",
                "summary": "A stock adjustment was finalized",
                "trigger": "An addition, damage or subtraction adjustment is saved as final or finalized from a draft.",
                "description": "",
                "testOnly": false,
                "fields": [
                    {
                        "name": "data",
                        "type": "object",
                        "description": "`id`, `reference`, `adjustment_date`, `adjustment_type` (`addition`, `damage`, `subtraction`), `warehouse_id`, `created_by`, `lines`."
                    }
                ],
                "payload": {
                    "event": "adjustment.finalized",
                    "timestamp": "2026-11-11T09:30:00Z",
                    "site": "https://your-site.example",
                    "data": {
                        "id": 31,
                        "reference": "ADJ-0031",
                        "adjustment_date": "2026-11-11",
                        "adjustment_type": "damage",
                        "warehouse_id": 1,
                        "created_by": 412,
                        "lines": [
                            {
                                "item_id": 17,
                                "title": "A4 Copy Paper",
                                "sku": "OFFC-001",
                                "quantity": 2,
                                "stock_quantity": 14
                            }
                        ]
                    }
                },
                "variants": []
            },
            {
                "name": "item.created",
                "slug": "item-created",
                "pagePath": "api/events/item-created",
                "summary": "An item was created",
                "trigger": "An item is saved for the first time, on screen or through the API.",
                "description": "",
                "testOnly": false,
                "fields": [
                    {
                        "name": "data",
                        "type": "object",
                        "description": "`id`, `title`, `item_type`, `sku`, `barcode`, `serial_number`, `category_id`, `warehouse_id`, `unit_id`, `stock_quantity`, `unit_price`, `low_stock_threshold`, `state`."
                    }
                ],
                "payload": {
                    "event": "item.created",
                    "timestamp": "2026-11-11T09:30:00Z",
                    "site": "https://your-site.example",
                    "data": {
                        "id": 17,
                        "title": "A4 Copy Paper",
                        "item_type": "consumable",
                        "sku": "OFFC-001",
                        "barcode": "5012345678900",
                        "serial_number": "",
                        "category_id": 3,
                        "warehouse_id": 1,
                        "unit_id": 2,
                        "stock_quantity": 16,
                        "unit_price": 4.5,
                        "low_stock_threshold": 18,
                        "state": 1
                    }
                },
                "variants": []
            },
            {
                "name": "item.updated",
                "slug": "item-updated",
                "pagePath": "api/events/item-updated",
                "summary": "An item was edited",
                "trigger": "An existing item is saved, or its image is changed.",
                "description": "",
                "testOnly": false,
                "fields": [
                    {
                        "name": "data",
                        "type": "object",
                        "description": "The same fields as `item.created`."
                    }
                ],
                "payload": {
                    "event": "item.updated",
                    "timestamp": "2026-11-11T09:30:00Z",
                    "site": "https://your-site.example",
                    "data": {
                        "id": 17,
                        "title": "A4 Copy Paper",
                        "item_type": "consumable",
                        "sku": "OFFC-001",
                        "barcode": "5012345678900",
                        "serial_number": "",
                        "category_id": 3,
                        "warehouse_id": 1,
                        "unit_id": 2,
                        "stock_quantity": 16,
                        "unit_price": 4.5,
                        "low_stock_threshold": 18,
                        "state": 1
                    }
                },
                "variants": []
            },
            {
                "name": "item.deleted",
                "slug": "item-deleted",
                "pagePath": "api/events/item-deleted",
                "summary": "An item was deleted",
                "trigger": "An item is deleted.",
                "description": "",
                "testOnly": false,
                "fields": [
                    {
                        "name": "data",
                        "type": "object",
                        "description": "`id`, `title`, `sku`."
                    }
                ],
                "payload": {
                    "event": "item.deleted",
                    "timestamp": "2026-11-11T09:30:00Z",
                    "site": "https://your-site.example",
                    "data": {
                        "id": 17,
                        "title": "A4 Copy Paper",
                        "sku": "OFFC-001"
                    }
                },
                "variants": []
            },
            {
                "name": "warehouse.created",
                "slug": "warehouse-created",
                "pagePath": "api/events/warehouse-created",
                "summary": "A warehouse was created",
                "trigger": "A warehouse is saved for the first time.",
                "description": "",
                "testOnly": false,
                "fields": [
                    {
                        "name": "data",
                        "type": "object",
                        "description": "`id`, `title`, `address`, `published`, `custom_fields` (field name to value)."
                    }
                ],
                "payload": {
                    "event": "warehouse.created",
                    "timestamp": "2026-11-11T09:30:00Z",
                    "site": "https://your-site.example",
                    "data": {
                        "id": 1,
                        "title": "Main warehouse",
                        "address": "12 Dock Road",
                        "published": 1,
                        "custom_fields": []
                    }
                },
                "variants": []
            },
            {
                "name": "warehouse.updated",
                "slug": "warehouse-updated",
                "pagePath": "api/events/warehouse-updated",
                "summary": "A warehouse was edited",
                "trigger": "An existing warehouse is saved.",
                "description": "",
                "testOnly": false,
                "fields": [
                    {
                        "name": "data",
                        "type": "object",
                        "description": "The same fields as `warehouse.created`."
                    }
                ],
                "payload": {
                    "event": "warehouse.updated",
                    "timestamp": "2026-11-11T09:30:00Z",
                    "site": "https://your-site.example",
                    "data": {
                        "id": 1,
                        "title": "Main warehouse",
                        "address": "12 Dock Road",
                        "published": 1,
                        "custom_fields": []
                    }
                },
                "variants": []
            },
            {
                "name": "warehouse.deleted",
                "slug": "warehouse-deleted",
                "pagePath": "api/events/warehouse-deleted",
                "summary": "A warehouse was deleted",
                "trigger": "A warehouse is deleted.",
                "description": "",
                "testOnly": false,
                "fields": [
                    {
                        "name": "data",
                        "type": "object",
                        "description": "The record as it was just before it was deleted."
                    }
                ],
                "payload": {
                    "event": "warehouse.deleted",
                    "timestamp": "2026-11-11T09:30:00Z",
                    "site": "https://your-site.example",
                    "data": {
                        "id": 1,
                        "title": "Main warehouse",
                        "address": "12 Dock Road",
                        "published": 1,
                        "custom_fields": []
                    }
                },
                "variants": []
            },
            {
                "name": "recipient.created",
                "slug": "recipient-created",
                "pagePath": "api/events/recipient-created",
                "summary": "A recipient was created",
                "trigger": "A recipient is saved for the first time.",
                "description": "",
                "testOnly": false,
                "fields": [
                    {
                        "name": "data",
                        "type": "object",
                        "description": "`id`, `name`, `email`, `department`, `published`, `custom_fields` (field name to value)."
                    }
                ],
                "payload": {
                    "event": "recipient.created",
                    "timestamp": "2026-11-11T09:30:00Z",
                    "site": "https://your-site.example",
                    "data": {
                        "id": 5,
                        "name": "Dana Smith",
                        "email": "dana@example.com",
                        "department": "IT",
                        "published": 1,
                        "custom_fields": []
                    }
                },
                "variants": []
            },
            {
                "name": "recipient.updated",
                "slug": "recipient-updated",
                "pagePath": "api/events/recipient-updated",
                "summary": "A recipient was edited",
                "trigger": "An existing recipient is saved.",
                "description": "",
                "testOnly": false,
                "fields": [
                    {
                        "name": "data",
                        "type": "object",
                        "description": "The same fields as `recipient.created`."
                    }
                ],
                "payload": {
                    "event": "recipient.updated",
                    "timestamp": "2026-11-11T09:30:00Z",
                    "site": "https://your-site.example",
                    "data": {
                        "id": 5,
                        "name": "Dana Smith",
                        "email": "dana@example.com",
                        "department": "IT",
                        "published": 1,
                        "custom_fields": []
                    }
                },
                "variants": []
            },
            {
                "name": "recipient.deleted",
                "slug": "recipient-deleted",
                "pagePath": "api/events/recipient-deleted",
                "summary": "A recipient was deleted",
                "trigger": "A recipient is deleted.",
                "description": "",
                "testOnly": false,
                "fields": [
                    {
                        "name": "data",
                        "type": "object",
                        "description": "The record as it was just before it was deleted."
                    }
                ],
                "payload": {
                    "event": "recipient.deleted",
                    "timestamp": "2026-11-11T09:30:00Z",
                    "site": "https://your-site.example",
                    "data": {
                        "id": 5,
                        "name": "Dana Smith",
                        "email": "dana@example.com",
                        "department": "IT",
                        "published": 1,
                        "custom_fields": []
                    }
                },
                "variants": []
            },
            {
                "name": "ping",
                "slug": "ping",
                "pagePath": "api/events/ping",
                "summary": "A test message",
                "trigger": "Sent only by **Send a test ping** on the Webhooks screen, whatever events the webhook subscribes to.",
                "description": "",
                "testOnly": false,
                "fields": [
                    {
                        "name": "data",
                        "type": "object",
                        "description": "`message`, `webhook_id`."
                    }
                ],
                "payload": {
                    "event": "ping",
                    "timestamp": "2026-11-11T09:30:00Z",
                    "site": "https://your-site.example",
                    "data": {
                        "message": "Next Inventory webhook test.",
                        "webhook_id": 3
                    }
                },
                "variants": []
            }
        ]
    },
    "seoOverview": {
        "title": "REST API Reference",
        "description": "Next Inventory REST API reference: items, stock movements, transfers, adjustments, warehouses, recipients, units, the ledger, reports and webhooks.",
        "keywords": "next inventory api, rest api, openapi, joomla inventory api, api tokens, scopes, webhooks"
    },
    "seoEvents": {
        "title": "Webhooks",
        "description": "Next Inventory webhooks: stock changes, low stock, finalized movements, transfers and adjustments, and item, warehouse and recipient changes, each signed.",
        "keywords": "next inventory webhooks, stock webhooks, standard webhooks, hmac signature, low stock event, retries"
    },
    "changelog": [],
    "generatedBy": "NextExtManager",
    "generated": "2026-11-12T08:42:58+00:00"
}