{
    "openapi": "3.0.3",
    "info": {
        "title": "CloudPOS REST API",
        "version": "2.0.0",
        "description": "Secure REST API for CloudPOS.\n\n**How to call it**\n1. Create an API key in the CloudPOS admin (Settings > API keys). Send it in the `api-key` header on every request.\n2. `POST /auth/token` with the system username and password -> `access_token`.\n3. Send `Authorization: Bearer <access_token>` together with `api-key` on every other request.\n\nBoth credentials are always required. HTTPS only. Rate limits and automatic IP blocking apply. Permissions follow the user's group exactly as in the admin panel.\n\nResponses: `{\"success\":true,\"data\":...,\"meta\":...}` or `{\"success\":false,\"error\":{\"code\",\"message\"}}`."
    },
    "servers": [
        {
            "url": "https://YOUR-CLOUDPOS-HOST/api/v2",
            "description": "Your CloudPOS installation"
        }
    ],
    "security": [
        {
            "ApiKeyAuth": [],
            "BearerAuth": []
        }
    ],
    "tags": [
        {
            "name": "Authentication",
            "description": "api-key -> bearer token"
        },
        {
            "name": "System"
        },
        {
            "name": "Customers",
            "description": "Customer accounts (companies with group_name = customer)."
        },
        {
            "name": "Suppliers",
            "description": "Supplier accounts (companies with group_name = supplier)."
        },
        {
            "name": "Billers",
            "description": "Billers / branches (companies with group_name = biller)."
        },
        {
            "name": "Product categories",
            "description": "Product categories (tree through parent_id)."
        },
        {
            "name": "Brands",
            "description": "Product brands."
        },
        {
            "name": "Units",
            "description": "Units of measure (a unit may point to a base_unit)."
        },
        {
            "name": "Warehouses",
            "description": "Warehouses / stores."
        },
        {
            "name": "Tax rates",
            "description": "Tax rates (type 1 = percentage, 2 = fixed)."
        },
        {
            "name": "Currencies",
            "description": "Currencies and exchange rates."
        },
        {
            "name": "Price groups",
            "description": "Price groups."
        },
        {
            "name": "Customer groups",
            "description": "Customer groups (discount percentage)."
        },
        {
            "name": "Expense categories",
            "description": "Expense categories."
        },
        {
            "name": "Variants",
            "description": "Variant names (size, colour ...)."
        },
        {
            "name": "Products",
            "description": "Catalogue. Read everything, edit descriptive fields and prices. Stock is read through /stock."
        },
        {
            "name": "Stock",
            "description": "Quantity on hand per product and warehouse (read only)."
        },
        {
            "name": "Sales",
            "description": "Sales and POS invoices (returns are negative sales rows). Add ?expand=items to include the lines."
        },
        {
            "name": "Purchases",
            "description": "Purchase orders and goods received."
        },
        {
            "name": "Quotations",
            "description": "Quotations."
        },
        {
            "name": "Stock transfers",
            "description": "Warehouse to warehouse transfers."
        },
        {
            "name": "Stock adjustments",
            "description": "Quantity adjustments."
        },
        {
            "name": "Payments",
            "description": "Payments received and made against sales and purchases."
        },
        {
            "name": "Expenses",
            "description": "Expense vouchers."
        },
        {
            "name": "Deposits",
            "description": "Customer / supplier deposit ledger rows."
        },
        {
            "name": "Bank accounts",
            "description": "Cash and bank accounts."
        },
        {
            "name": "User groups",
            "description": "Permission groups."
        },
        {
            "name": "Users",
            "description": "Staff accounts (read only, no secrets)."
        }
    ],
    "paths": {
        "/auth/token": {
            "post": {
                "tags": [
                    "Authentication"
                ],
                "summary": "Log in and get an access token",
                "description": "Step 2 of the flow. Send the **api-key** header plus the system username and password. Returns a bearer token (1 hour) and a refresh token (14 days). 5 wrong passwords from one IP lock that IP out for 10 minutes; repeated failures block the IP automatically.\n\nAccounts with authenticator-app 2FA must also send `otp`; if it is missing the answer is `401 otp_required`.",
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/TokenRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Token issued",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/TokenResponse"
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/auth/refresh": {
            "post": {
                "tags": [
                    "Authentication"
                ],
                "summary": "Exchange a refresh token for a new token pair",
                "description": "Refresh tokens are single use (rotation). Presenting an already-used refresh token revokes the whole session chain.",
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RefreshRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "New token pair",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/TokenResponse"
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/auth/me": {
            "get": {
                "tags": [
                    "Authentication"
                ],
                "summary": "Who am I",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Current user"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/auth/logout": {
            "post": {
                "tags": [
                    "Authentication"
                ],
                "summary": "Revoke the current token (or every session of the user)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "all_sessions": {
                                        "type": "boolean",
                                        "default": false
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Revoked"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/health": {
            "get": {
                "tags": [
                    "System"
                ],
                "summary": "Liveness probe (no authentication)",
                "security": [],
                "responses": {
                    "200": {
                        "description": "ok"
                    }
                }
            }
        },
        "/customers": {
            "get": {
                "tags": [
                    "Customers"
                ],
                "summary": "List customers",
                "description": "Customer accounts (companies with group_name = customer). Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Customers"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "post": {
                "tags": [
                    "Customers"
                ],
                "summary": "Create a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Customers"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created (Location header points to the record)"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ef99b4a0c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/customers/_schema": {
            "get": {
                "tags": [
                    "Customers"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/customers/{id}": {
            "get": {
                "tags": [
                    "Customers"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Customers"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Customers"
                ],
                "summary": "Update fields of a record (partial)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Customers"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "put": {
                "tags": [
                    "Customers"
                ],
                "summary": "Alias of PATCH (partial update)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Customers"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Customers"
                ],
                "summary": "Delete a record",
                "description": "Owner only for most resources. Answers 409 `in_use` when other records reference it.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Deleted"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "409": {
                        "$ref": "#/components/responses/Eda5d78af"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/suppliers": {
            "get": {
                "tags": [
                    "Suppliers"
                ],
                "summary": "List suppliers",
                "description": "Supplier accounts (companies with group_name = supplier). Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Suppliers"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "post": {
                "tags": [
                    "Suppliers"
                ],
                "summary": "Create a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Suppliers"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created (Location header points to the record)"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ef99b4a0c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/suppliers/_schema": {
            "get": {
                "tags": [
                    "Suppliers"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/suppliers/{id}": {
            "get": {
                "tags": [
                    "Suppliers"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Suppliers"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Suppliers"
                ],
                "summary": "Update fields of a record (partial)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Suppliers"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "put": {
                "tags": [
                    "Suppliers"
                ],
                "summary": "Alias of PATCH (partial update)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Suppliers"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Suppliers"
                ],
                "summary": "Delete a record",
                "description": "Owner only for most resources. Answers 409 `in_use` when other records reference it.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Deleted"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "409": {
                        "$ref": "#/components/responses/Eda5d78af"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/billers": {
            "get": {
                "tags": [
                    "Billers"
                ],
                "summary": "List billers",
                "description": "Billers / branches (companies with group_name = biller). Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Billers"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "post": {
                "tags": [
                    "Billers"
                ],
                "summary": "Create a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Billers"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created (Location header points to the record)"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ef99b4a0c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/billers/_schema": {
            "get": {
                "tags": [
                    "Billers"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/billers/{id}": {
            "get": {
                "tags": [
                    "Billers"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Billers"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Billers"
                ],
                "summary": "Update fields of a record (partial)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Billers"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "put": {
                "tags": [
                    "Billers"
                ],
                "summary": "Alias of PATCH (partial update)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Billers"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Billers"
                ],
                "summary": "Delete a record",
                "description": "Owner only for most resources. Answers 409 `in_use` when other records reference it.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Deleted"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "409": {
                        "$ref": "#/components/responses/Eda5d78af"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/categories": {
            "get": {
                "tags": [
                    "Product categories"
                ],
                "summary": "List product categories",
                "description": "Product categories (tree through parent_id). Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Categories"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "post": {
                "tags": [
                    "Product categories"
                ],
                "summary": "Create a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Categories"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created (Location header points to the record)"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ef99b4a0c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/categories/_schema": {
            "get": {
                "tags": [
                    "Product categories"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/categories/{id}": {
            "get": {
                "tags": [
                    "Product categories"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Categories"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Product categories"
                ],
                "summary": "Update fields of a record (partial)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Categories"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "put": {
                "tags": [
                    "Product categories"
                ],
                "summary": "Alias of PATCH (partial update)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Categories"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Product categories"
                ],
                "summary": "Delete a record",
                "description": "Owner only for most resources. Answers 409 `in_use` when other records reference it.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Deleted"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "409": {
                        "$ref": "#/components/responses/Eda5d78af"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/brands": {
            "get": {
                "tags": [
                    "Brands"
                ],
                "summary": "List brands",
                "description": "Product brands. Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Brands"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "post": {
                "tags": [
                    "Brands"
                ],
                "summary": "Create a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Brands"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created (Location header points to the record)"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ef99b4a0c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/brands/_schema": {
            "get": {
                "tags": [
                    "Brands"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/brands/{id}": {
            "get": {
                "tags": [
                    "Brands"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Brands"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Brands"
                ],
                "summary": "Update fields of a record (partial)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Brands"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "put": {
                "tags": [
                    "Brands"
                ],
                "summary": "Alias of PATCH (partial update)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Brands"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Brands"
                ],
                "summary": "Delete a record",
                "description": "Owner only for most resources. Answers 409 `in_use` when other records reference it.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Deleted"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "409": {
                        "$ref": "#/components/responses/Eda5d78af"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/units": {
            "get": {
                "tags": [
                    "Units"
                ],
                "summary": "List units",
                "description": "Units of measure (a unit may point to a base_unit). Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Units"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "post": {
                "tags": [
                    "Units"
                ],
                "summary": "Create a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Units"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created (Location header points to the record)"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ef99b4a0c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/units/_schema": {
            "get": {
                "tags": [
                    "Units"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/units/{id}": {
            "get": {
                "tags": [
                    "Units"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Units"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Units"
                ],
                "summary": "Update fields of a record (partial)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Units"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "put": {
                "tags": [
                    "Units"
                ],
                "summary": "Alias of PATCH (partial update)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Units"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Units"
                ],
                "summary": "Delete a record",
                "description": "Owner only for most resources. Answers 409 `in_use` when other records reference it.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Deleted"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "409": {
                        "$ref": "#/components/responses/Eda5d78af"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/warehouses": {
            "get": {
                "tags": [
                    "Warehouses"
                ],
                "summary": "List warehouses",
                "description": "Warehouses / stores. Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Warehouses"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "post": {
                "tags": [
                    "Warehouses"
                ],
                "summary": "Create a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Warehouses"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created (Location header points to the record)"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ef99b4a0c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/warehouses/_schema": {
            "get": {
                "tags": [
                    "Warehouses"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/warehouses/{id}": {
            "get": {
                "tags": [
                    "Warehouses"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Warehouses"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Warehouses"
                ],
                "summary": "Update fields of a record (partial)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Warehouses"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "put": {
                "tags": [
                    "Warehouses"
                ],
                "summary": "Alias of PATCH (partial update)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Warehouses"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Warehouses"
                ],
                "summary": "Delete a record",
                "description": "Owner only for most resources. Answers 409 `in_use` when other records reference it.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Deleted"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "409": {
                        "$ref": "#/components/responses/Eda5d78af"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/tax_rates": {
            "get": {
                "tags": [
                    "Tax rates"
                ],
                "summary": "List tax rates",
                "description": "Tax rates (type 1 = percentage, 2 = fixed). Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Tax_rates"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "post": {
                "tags": [
                    "Tax rates"
                ],
                "summary": "Create a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Tax_rates"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created (Location header points to the record)"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ef99b4a0c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/tax_rates/_schema": {
            "get": {
                "tags": [
                    "Tax rates"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/tax_rates/{id}": {
            "get": {
                "tags": [
                    "Tax rates"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Tax_rates"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Tax rates"
                ],
                "summary": "Update fields of a record (partial)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Tax_rates"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "put": {
                "tags": [
                    "Tax rates"
                ],
                "summary": "Alias of PATCH (partial update)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Tax_rates"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Tax rates"
                ],
                "summary": "Delete a record",
                "description": "Owner only for most resources. Answers 409 `in_use` when other records reference it.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Deleted"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "409": {
                        "$ref": "#/components/responses/Eda5d78af"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/currencies": {
            "get": {
                "tags": [
                    "Currencies"
                ],
                "summary": "List currencies",
                "description": "Currencies and exchange rates. Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Currencies"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "post": {
                "tags": [
                    "Currencies"
                ],
                "summary": "Create a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Currencies"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created (Location header points to the record)"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ef99b4a0c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/currencies/_schema": {
            "get": {
                "tags": [
                    "Currencies"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/currencies/{id}": {
            "get": {
                "tags": [
                    "Currencies"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Currencies"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Currencies"
                ],
                "summary": "Update fields of a record (partial)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Currencies"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "put": {
                "tags": [
                    "Currencies"
                ],
                "summary": "Alias of PATCH (partial update)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Currencies"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Currencies"
                ],
                "summary": "Delete a record",
                "description": "Owner only for most resources. Answers 409 `in_use` when other records reference it.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Deleted"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "409": {
                        "$ref": "#/components/responses/Eda5d78af"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/price_groups": {
            "get": {
                "tags": [
                    "Price groups"
                ],
                "summary": "List price groups",
                "description": "Price groups. Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Price_groups"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "post": {
                "tags": [
                    "Price groups"
                ],
                "summary": "Create a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Price_groups"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created (Location header points to the record)"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ef99b4a0c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/price_groups/_schema": {
            "get": {
                "tags": [
                    "Price groups"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/price_groups/{id}": {
            "get": {
                "tags": [
                    "Price groups"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Price_groups"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Price groups"
                ],
                "summary": "Update fields of a record (partial)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Price_groups"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "put": {
                "tags": [
                    "Price groups"
                ],
                "summary": "Alias of PATCH (partial update)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Price_groups"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Price groups"
                ],
                "summary": "Delete a record",
                "description": "Owner only for most resources. Answers 409 `in_use` when other records reference it.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Deleted"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "409": {
                        "$ref": "#/components/responses/Eda5d78af"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/customer_groups": {
            "get": {
                "tags": [
                    "Customer groups"
                ],
                "summary": "List customer groups",
                "description": "Customer groups (discount percentage). Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Customer_groups"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "post": {
                "tags": [
                    "Customer groups"
                ],
                "summary": "Create a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Customer_groups"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created (Location header points to the record)"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ef99b4a0c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/customer_groups/_schema": {
            "get": {
                "tags": [
                    "Customer groups"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/customer_groups/{id}": {
            "get": {
                "tags": [
                    "Customer groups"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Customer_groups"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Customer groups"
                ],
                "summary": "Update fields of a record (partial)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Customer_groups"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "put": {
                "tags": [
                    "Customer groups"
                ],
                "summary": "Alias of PATCH (partial update)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Customer_groups"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Customer groups"
                ],
                "summary": "Delete a record",
                "description": "Owner only for most resources. Answers 409 `in_use` when other records reference it.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Deleted"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "409": {
                        "$ref": "#/components/responses/Eda5d78af"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/expense_categories": {
            "get": {
                "tags": [
                    "Expense categories"
                ],
                "summary": "List expense categories",
                "description": "Expense categories. Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Expense_categories"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "post": {
                "tags": [
                    "Expense categories"
                ],
                "summary": "Create a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Expense_categories"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created (Location header points to the record)"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ef99b4a0c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/expense_categories/_schema": {
            "get": {
                "tags": [
                    "Expense categories"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/expense_categories/{id}": {
            "get": {
                "tags": [
                    "Expense categories"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Expense_categories"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Expense categories"
                ],
                "summary": "Update fields of a record (partial)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Expense_categories"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "put": {
                "tags": [
                    "Expense categories"
                ],
                "summary": "Alias of PATCH (partial update)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Expense_categories"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Expense categories"
                ],
                "summary": "Delete a record",
                "description": "Owner only for most resources. Answers 409 `in_use` when other records reference it.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Deleted"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "409": {
                        "$ref": "#/components/responses/Eda5d78af"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/variants": {
            "get": {
                "tags": [
                    "Variants"
                ],
                "summary": "List variants",
                "description": "Variant names (size, colour ...). Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Variants"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "post": {
                "tags": [
                    "Variants"
                ],
                "summary": "Create a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Variants"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created (Location header points to the record)"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ef99b4a0c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/variants/_schema": {
            "get": {
                "tags": [
                    "Variants"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/variants/{id}": {
            "get": {
                "tags": [
                    "Variants"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Variants"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Variants"
                ],
                "summary": "Update fields of a record (partial)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Variants"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "put": {
                "tags": [
                    "Variants"
                ],
                "summary": "Alias of PATCH (partial update)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Variants"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Variants"
                ],
                "summary": "Delete a record",
                "description": "Owner only for most resources. Answers 409 `in_use` when other records reference it.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Deleted"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "409": {
                        "$ref": "#/components/responses/Eda5d78af"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/products": {
            "get": {
                "tags": [
                    "Products"
                ],
                "summary": "List products",
                "description": "Catalogue. Read everything, edit descriptive fields and prices. Stock is read through /stock. Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "description": "Embed sub-collections: photos, variants, prices",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Products"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/products/_schema": {
            "get": {
                "tags": [
                    "Products"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/products/{id}": {
            "get": {
                "tags": [
                    "Products"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "description": "Embed sub-collections: photos, variants, prices",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Products"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Products"
                ],
                "summary": "Update fields of a record (partial)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Products"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            },
            "put": {
                "tags": [
                    "Products"
                ],
                "summary": "Alias of PATCH (partial update)",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Products"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated record"
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "422": {
                        "$ref": "#/components/responses/Ed10fb60c"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/products/{id}/photos": {
            "get": {
                "tags": [
                    "Products"
                ],
                "summary": "List photos of a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Photos"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/products/{id}/variants": {
            "get": {
                "tags": [
                    "Products"
                ],
                "summary": "List variants of a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Variants"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/products/{id}/prices": {
            "get": {
                "tags": [
                    "Products"
                ],
                "summary": "List prices of a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Prices"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/stock": {
            "get": {
                "tags": [
                    "Stock"
                ],
                "summary": "List stock",
                "description": "Quantity on hand per product and warehouse (read only). Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Stock"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/stock/_schema": {
            "get": {
                "tags": [
                    "Stock"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/stock/{id}": {
            "get": {
                "tags": [
                    "Stock"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Stock"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/sales": {
            "get": {
                "tags": [
                    "Sales"
                ],
                "summary": "List sales",
                "description": "Sales and POS invoices (returns are negative sales rows). Add ?expand=items to include the lines. Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "description": "Embed sub-collections: items, payments",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Sales"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/sales/_schema": {
            "get": {
                "tags": [
                    "Sales"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/sales/{id}": {
            "get": {
                "tags": [
                    "Sales"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "description": "Embed sub-collections: items, payments",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Sales"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/sales/{id}/items": {
            "get": {
                "tags": [
                    "Sales"
                ],
                "summary": "List items of a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Items"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/sales/{id}/payments": {
            "get": {
                "tags": [
                    "Sales"
                ],
                "summary": "List payments of a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Payments"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/purchases": {
            "get": {
                "tags": [
                    "Purchases"
                ],
                "summary": "List purchases",
                "description": "Purchase orders and goods received. Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "description": "Embed sub-collections: items, payments",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Purchases"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/purchases/_schema": {
            "get": {
                "tags": [
                    "Purchases"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/purchases/{id}": {
            "get": {
                "tags": [
                    "Purchases"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "description": "Embed sub-collections: items, payments",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Purchases"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/purchases/{id}/items": {
            "get": {
                "tags": [
                    "Purchases"
                ],
                "summary": "List items of a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Items"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/purchases/{id}/payments": {
            "get": {
                "tags": [
                    "Purchases"
                ],
                "summary": "List payments of a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Payments"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/quotes": {
            "get": {
                "tags": [
                    "Quotations"
                ],
                "summary": "List quotations",
                "description": "Quotations. Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "description": "Embed sub-collections: items",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Quotes"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/quotes/_schema": {
            "get": {
                "tags": [
                    "Quotations"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/quotes/{id}": {
            "get": {
                "tags": [
                    "Quotations"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "description": "Embed sub-collections: items",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Quotes"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/quotes/{id}/items": {
            "get": {
                "tags": [
                    "Quotations"
                ],
                "summary": "List items of a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Items"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/transfers": {
            "get": {
                "tags": [
                    "Stock transfers"
                ],
                "summary": "List stock transfers",
                "description": "Warehouse to warehouse transfers. Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "description": "Embed sub-collections: items",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Transfers"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/transfers/_schema": {
            "get": {
                "tags": [
                    "Stock transfers"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/transfers/{id}": {
            "get": {
                "tags": [
                    "Stock transfers"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "description": "Embed sub-collections: items",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Transfers"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/transfers/{id}/items": {
            "get": {
                "tags": [
                    "Stock transfers"
                ],
                "summary": "List items of a record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Items"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/adjustments": {
            "get": {
                "tags": [
                    "Stock adjustments"
                ],
                "summary": "List stock adjustments",
                "description": "Quantity adjustments. Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Adjustments"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/adjustments/_schema": {
            "get": {
                "tags": [
                    "Stock adjustments"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/adjustments/{id}": {
            "get": {
                "tags": [
                    "Stock adjustments"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Adjustments"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/payments": {
            "get": {
                "tags": [
                    "Payments"
                ],
                "summary": "List payments",
                "description": "Payments received and made against sales and purchases. Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Payments"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/payments/_schema": {
            "get": {
                "tags": [
                    "Payments"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/payments/{id}": {
            "get": {
                "tags": [
                    "Payments"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Payments"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/expenses": {
            "get": {
                "tags": [
                    "Expenses"
                ],
                "summary": "List expenses",
                "description": "Expense vouchers. Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Expenses"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/expenses/_schema": {
            "get": {
                "tags": [
                    "Expenses"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/expenses/{id}": {
            "get": {
                "tags": [
                    "Expenses"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Expenses"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/deposits": {
            "get": {
                "tags": [
                    "Deposits"
                ],
                "summary": "List deposits",
                "description": "Customer / supplier deposit ledger rows. Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Deposits"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/deposits/_schema": {
            "get": {
                "tags": [
                    "Deposits"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/deposits/{id}": {
            "get": {
                "tags": [
                    "Deposits"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Deposits"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/banks": {
            "get": {
                "tags": [
                    "Bank accounts"
                ],
                "summary": "List bank accounts",
                "description": "Cash and bank accounts. Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Banks"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/banks/_schema": {
            "get": {
                "tags": [
                    "Bank accounts"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/banks/{id}": {
            "get": {
                "tags": [
                    "Bank accounts"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Banks"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/groups": {
            "get": {
                "tags": [
                    "User groups"
                ],
                "summary": "List user groups",
                "description": "Permission groups. Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Groups"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/groups/_schema": {
            "get": {
                "tags": [
                    "User groups"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/groups/{id}": {
            "get": {
                "tags": [
                    "User groups"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Groups"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/users": {
            "get": {
                "tags": [
                    "Users"
                ],
                "summary": "List users",
                "description": "Staff accounts (read only, no secrets). Filter by any column: `?column=value`, or `column__gt|gte|lt|lte|ne|like|in|null`.",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text search over the resource's searchable columns",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "Column name; prefix with - for descending (e.g. -id)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "description": "Comma separated column subset",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Page of records",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Users"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/Meta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/users/_schema": {
            "get": {
                "tags": [
                    "Users"
                ],
                "summary": "Live column list with types and writable flags",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Columns"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        },
        "/users/{id}": {
            "get": {
                "tags": [
                    "Users"
                ],
                "summary": "Get one record",
                "security": [
                    {
                        "ApiKeyAuth": [],
                        "BearerAuth": []
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The record",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Users"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/E9e076f58"
                    },
                    "400": {
                        "$ref": "#/components/responses/E6953f127"
                    },
                    "401": {
                        "$ref": "#/components/responses/Ee75b8bfe"
                    },
                    "403": {
                        "$ref": "#/components/responses/E10df64bf"
                    },
                    "429": {
                        "$ref": "#/components/responses/E6b0008d3"
                    }
                }
            }
        }
    },
    "components": {
        "securitySchemes": {
            "ApiKeyAuth": {
                "type": "apiKey",
                "in": "header",
                "name": "api-key",
                "description": "API key from Settings > API keys"
            },
            "BearerAuth": {
                "type": "http",
                "scheme": "bearer",
                "description": "access_token from POST /auth/token"
            }
        },
        "schemas": {
            "Error": {
                "type": "object",
                "properties": {
                    "success": {
                        "type": "boolean",
                        "example": false
                    },
                    "error": {
                        "type": "object",
                        "properties": {
                            "code": {
                                "type": "string",
                                "example": "invalid_token"
                            },
                            "message": {
                                "type": "string"
                            },
                            "retry_after": {
                                "type": "integer",
                                "description": "Seconds to wait (429 / blocked IP)"
                            }
                        }
                    }
                }
            },
            "Meta": {
                "type": "object",
                "properties": {
                    "page": {
                        "type": "integer"
                    },
                    "per_page": {
                        "type": "integer"
                    },
                    "total": {
                        "type": "integer"
                    },
                    "pages": {
                        "type": "integer"
                    }
                }
            },
            "TokenRequest": {
                "type": "object",
                "required": [
                    "username",
                    "password"
                ],
                "properties": {
                    "username": {
                        "type": "string",
                        "description": "System username or e-mail address",
                        "example": "owner"
                    },
                    "password": {
                        "type": "string",
                        "format": "password"
                    },
                    "otp": {
                        "type": "string",
                        "description": "Authenticator-app code (or one-time recovery code). Only for accounts with authenticator 2FA enabled.",
                        "example": "123456"
                    }
                }
            },
            "TokenResponse": {
                "type": "object",
                "properties": {
                    "success": {
                        "type": "boolean",
                        "example": true
                    },
                    "data": {
                        "type": "object",
                        "properties": {
                            "token_type": {
                                "type": "string",
                                "example": "Bearer"
                            },
                            "access_token": {
                                "type": "string",
                                "example": "cp2_..."
                            },
                            "expires_in": {
                                "type": "integer",
                                "example": 3600
                            },
                            "refresh_token": {
                                "type": "string",
                                "example": "cp2r_..."
                            },
                            "refresh_expires_in": {
                                "type": "integer",
                                "example": 1209600
                            }
                        }
                    }
                }
            },
            "RefreshRequest": {
                "type": "object",
                "required": [
                    "refresh_token"
                ],
                "properties": {
                    "refresh_token": {
                        "type": "string"
                    }
                }
            },
            "Customers": {
                "type": "object",
                "description": "Typical columns; the live list is GET /customers/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    },
                    "name": {
                        "type": "string"
                    },
                    "company": {
                        "type": "string"
                    },
                    "email": {
                        "type": "string"
                    },
                    "phone": {
                        "type": "string"
                    },
                    "address": {
                        "type": "string"
                    },
                    "city": {
                        "type": "string"
                    },
                    "state": {
                        "type": "string"
                    },
                    "country": {
                        "type": "string"
                    },
                    "vat_no": {
                        "type": "string"
                    },
                    "customer_group_id": {
                        "type": "integer"
                    },
                    "price_group_id": {
                        "type": "integer"
                    }
                },
                "additionalProperties": true
            },
            "Suppliers": {
                "type": "object",
                "description": "Typical columns; the live list is GET /suppliers/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    },
                    "name": {
                        "type": "string"
                    },
                    "company": {
                        "type": "string"
                    },
                    "email": {
                        "type": "string"
                    },
                    "phone": {
                        "type": "string"
                    },
                    "address": {
                        "type": "string"
                    },
                    "city": {
                        "type": "string"
                    },
                    "state": {
                        "type": "string"
                    },
                    "country": {
                        "type": "string"
                    },
                    "vat_no": {
                        "type": "string"
                    }
                },
                "additionalProperties": true
            },
            "Billers": {
                "type": "object",
                "description": "Typical columns; the live list is GET /billers/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    },
                    "name": {
                        "type": "string"
                    },
                    "company": {
                        "type": "string"
                    },
                    "email": {
                        "type": "string"
                    },
                    "phone": {
                        "type": "string"
                    },
                    "address": {
                        "type": "string"
                    },
                    "city": {
                        "type": "string"
                    },
                    "state": {
                        "type": "string"
                    },
                    "country": {
                        "type": "string"
                    }
                },
                "additionalProperties": true
            },
            "Categories": {
                "type": "object",
                "description": "Typical columns; the live list is GET /categories/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    },
                    "code": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "image": {
                        "type": "string"
                    },
                    "parent_id": {
                        "type": "integer"
                    }
                },
                "additionalProperties": true
            },
            "Brands": {
                "type": "object",
                "description": "Typical columns; the live list is GET /brands/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    },
                    "code": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "image": {
                        "type": "string"
                    }
                },
                "additionalProperties": true
            },
            "Units": {
                "type": "object",
                "description": "Typical columns; the live list is GET /units/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    },
                    "code": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "base_unit": {
                        "type": "integer"
                    },
                    "operator": {
                        "type": "string"
                    },
                    "operation_value": {
                        "type": "string"
                    }
                },
                "additionalProperties": true
            },
            "Warehouses": {
                "type": "object",
                "description": "Typical columns; the live list is GET /warehouses/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    },
                    "code": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "address": {
                        "type": "string"
                    },
                    "phone": {
                        "type": "string"
                    },
                    "email": {
                        "type": "string"
                    },
                    "price_group_id": {
                        "type": "integer"
                    }
                },
                "additionalProperties": true
            },
            "Tax_rates": {
                "type": "object",
                "description": "Typical columns; the live list is GET /tax_rates/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    },
                    "name": {
                        "type": "string"
                    },
                    "code": {
                        "type": "string"
                    },
                    "rate": {
                        "type": "number"
                    },
                    "type": {
                        "type": "string"
                    }
                },
                "additionalProperties": true
            },
            "Currencies": {
                "type": "object",
                "description": "Typical columns; the live list is GET /currencies/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    },
                    "code": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "rate": {
                        "type": "number"
                    },
                    "symbol": {
                        "type": "string"
                    }
                },
                "additionalProperties": true
            },
            "Price_groups": {
                "type": "object",
                "description": "Typical columns; the live list is GET /price_groups/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    },
                    "name": {
                        "type": "string"
                    }
                },
                "additionalProperties": true
            },
            "Customer_groups": {
                "type": "object",
                "description": "Typical columns; the live list is GET /customer_groups/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    },
                    "name": {
                        "type": "string"
                    },
                    "percent": {
                        "type": "number"
                    }
                },
                "additionalProperties": true
            },
            "Expense_categories": {
                "type": "object",
                "description": "Typical columns; the live list is GET /expense_categories/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    },
                    "code": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    }
                },
                "additionalProperties": true
            },
            "Variants": {
                "type": "object",
                "description": "Typical columns; the live list is GET /variants/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    },
                    "name": {
                        "type": "string"
                    }
                },
                "additionalProperties": true
            },
            "Products": {
                "type": "object",
                "description": "Typical columns; the live list is GET /products/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    },
                    "code": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "price": {
                        "type": "number"
                    },
                    "cost": {
                        "type": "number"
                    },
                    "category_id": {
                        "type": "integer"
                    },
                    "unit": {
                        "type": "integer"
                    },
                    "brand": {
                        "type": "integer"
                    },
                    "tax_rate": {
                        "type": "integer"
                    },
                    "alert_quantity": {
                        "type": "number"
                    },
                    "details": {
                        "type": "string"
                    },
                    "barcode_symbology": {
                        "type": "string"
                    }
                },
                "additionalProperties": true
            },
            "Stock": {
                "type": "object",
                "description": "Typical columns; the live list is GET /stock/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    },
                    "product_id": {
                        "type": "integer"
                    },
                    "warehouse_id": {
                        "type": "integer"
                    },
                    "quantity": {
                        "type": "number"
                    },
                    "rack": {
                        "type": "string"
                    },
                    "avg_cost": {
                        "type": "number"
                    }
                },
                "additionalProperties": true
            },
            "Sales": {
                "type": "object",
                "description": "Typical columns; the live list is GET /sales/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    },
                    "date": {
                        "type": "string"
                    },
                    "reference_no": {
                        "type": "string"
                    },
                    "customer_id": {
                        "type": "integer"
                    },
                    "biller_id": {
                        "type": "integer"
                    },
                    "warehouse_id": {
                        "type": "integer"
                    },
                    "grand_total": {
                        "type": "number"
                    },
                    "paid": {
                        "type": "number"
                    },
                    "sale_status": {
                        "type": "string"
                    },
                    "payment_status": {
                        "type": "string"
                    }
                },
                "additionalProperties": true
            },
            "Purchases": {
                "type": "object",
                "description": "Typical columns; the live list is GET /purchases/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    },
                    "date": {
                        "type": "string"
                    },
                    "reference_no": {
                        "type": "string"
                    },
                    "supplier_id": {
                        "type": "integer"
                    },
                    "warehouse_id": {
                        "type": "integer"
                    },
                    "grand_total": {
                        "type": "number"
                    },
                    "paid": {
                        "type": "number"
                    },
                    "status": {
                        "type": "string"
                    },
                    "payment_status": {
                        "type": "string"
                    }
                },
                "additionalProperties": true
            },
            "Quotes": {
                "type": "object",
                "description": "Typical columns; the live list is GET /quotes/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    }
                },
                "additionalProperties": true
            },
            "Transfers": {
                "type": "object",
                "description": "Typical columns; the live list is GET /transfers/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    }
                },
                "additionalProperties": true
            },
            "Adjustments": {
                "type": "object",
                "description": "Typical columns; the live list is GET /adjustments/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    }
                },
                "additionalProperties": true
            },
            "Payments": {
                "type": "object",
                "description": "Typical columns; the live list is GET /payments/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    }
                },
                "additionalProperties": true
            },
            "Expenses": {
                "type": "object",
                "description": "Typical columns; the live list is GET /expenses/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    }
                },
                "additionalProperties": true
            },
            "Deposits": {
                "type": "object",
                "description": "Typical columns; the live list is GET /deposits/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    }
                },
                "additionalProperties": true
            },
            "Banks": {
                "type": "object",
                "description": "Typical columns; the live list is GET /banks/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    }
                },
                "additionalProperties": true
            },
            "Groups": {
                "type": "object",
                "description": "Typical columns; the live list is GET /groups/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    }
                },
                "additionalProperties": true
            },
            "Users": {
                "type": "object",
                "description": "Typical columns; the live list is GET /users/_schema. Unknown columns are rejected on write.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true
                    },
                    "username": {
                        "type": "string"
                    },
                    "email": {
                        "type": "string"
                    },
                    "first_name": {
                        "type": "string"
                    },
                    "last_name": {
                        "type": "string"
                    },
                    "group_id": {
                        "type": "integer"
                    },
                    "active": {
                        "type": "integer"
                    }
                },
                "additionalProperties": true
            }
        },
        "responses": {
            "E6953f127": {
                "description": "Malformed request (bad JSON, unknown filter, bad id).",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "Ee75b8bfe": {
                "description": "Missing / invalid api-key or bearer token.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "E10df64bf": {
                "description": "Not permitted for this account, or the client IP is blocked / not allowed.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "E6b0008d3": {
                "description": "Rate limit exceeded or login locked. See the Retry-After header.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "Ef99b4a0c": {
                "description": "Validation failed (unknown / read-only / missing / invalid fields).",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "E9e076f58": {
                "description": "Not found",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "Ed10fb60c": {
                "description": "Validation failed",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "Eda5d78af": {
                "description": "Referenced by other records",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            }
        }
    }
}
